有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java StaleElementReferenceException:在缓存中找不到元素可能该页在查询命令持续时间或超时后已更改

AT line 106我得到了这个例外。请解决它。组织。openqa。硒。StaleElementReferenceException:在缓存中找不到元素-可能页面在查找后已更改 命令持续时间或超时:5.10秒

代码:

 List<WebElement> select_year = driver.findElements(By.xpath("//ul[@class='uib-datepicker-popup dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span"));
    for(WebElement ele: select_year)
    {

        String fyear=ele.getText();
        if((syear).equals(fyear))
        {
            System.out.println(syear);
            System.out.println(fyear);
            ele.click();
            List<WebElement>select_month=driver.findElements(By.xpath("//ul[@class='uib-datepicker-popup dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span"));
            for(WebElement ele2:select_month)
            {
                String fmonth=ele2.getText();
                if((smonth).equals(fmonth))
                {
                    ele2.click();
                    List<WebElement>select_day=driver.findElements(By.xpath("//ul[@class='uib-datepicker-popup dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span"));
                    for(WebElement ele3:select_day)
                    {
                        String fday=ele3.getText();
                        Thread.sleep(3000);
                        if((sday).equals(fday))
                        {
                            ele3.click();

                        }
                    }
                }
            }
        }
    }   

共 (1) 个答案

  1. # 1 楼答案

    不需要在这里循环。您只需找到包含文本的单个元素,然后按如下方式选择:-

    //To select year
    driver.findElement(By.xpath("//ul[@class='uib-datepicker-pop‌​up dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span[text() = " + syear+"]")).click();
    
     //To select month
    driver.findElement(By.xpath("//ul[@class='uib-datepicker-pop‌​up dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span[text() = " + smonth+"]")).click();
    
    //To select day
    driver.findElement(By.xpath("//ul[@class='uib-datepicker-pop‌​up dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span[text() = " + sday+"]")).click();
    

    已编辑:-如果希望在此处循环,只需在if条件变为真时break循环,如下所示:-

    //To select year
    List<WebElement> select_year = driver.findElements(By.xpath("//ul[@class='uib-datepicker-popup dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span"));
     for(WebElement ele: select_year)
    {
        String fyear=ele.getText();
        if((syear).equals(fyear))
        {
            ele.click();
            break;
        }
     }
    
    //To select month 
    List<WebElement> select_month = driver.findElements(By.xpath("//ul[@class='uib-datepicker-popup dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span"));
     for(WebElement ele: select_year)
    {
        String fmonth = ele.getText();
        if((smonth).equals(fmonth))
        {
            ele.click();
            break;
        }
     }
    
    //To select day
    List<WebElement> select_day = driver.findElements(By.xpath("//ul[@class='uib-datepicker-popup dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span"));
     for(WebElement ele: select_year)
    {
        String fday = ele.getText();
        if((sday).equals(fday))
        {
            ele.click();
            break;
        }
     }