Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在缓存中找不到元素-可能页面在查找后已更改-为什么?_Java_Selenium - Fatal编程技术网

Java 在缓存中找不到元素-可能页面在查找后已更改-为什么?

Java 在缓存中找不到元素-可能页面在查找后已更改-为什么?,java,selenium,Java,Selenium,我是这个领域的新手,我想问,如果我试图实现这个场景,我如何循环:(涉及SELENIUM和WEBDRIVER的JAVA代码) 我在一个列表视图上,例如帐户模块。然后,在account模块中,如果有分页(单击按钮获取更多帐户),我将单击它,当listview中没有更多分页时,我将执行一段代码 如果listview中没有分页,那么我将自动执行一段代码 如果listview中不再出现“单击以获取更多帐户”,我将执行以下代码块 List<WebElement> button = d

我是这个领域的新手,我想问,如果我试图实现这个场景,我如何循环:(涉及SELENIUM和WEBDRIVER的JAVA代码)

  • 我在一个列表视图上,例如帐户模块。然后,在account模块中,如果有分页(单击按钮获取更多帐户),我将单击它,当listview中没有更多分页时,我将执行一段代码

  • 如果listview中没有分页,那么我将自动执行一段代码

如果listview中不再出现“单击以获取更多帐户”,我将执行以下代码块

    List<WebElement> button = driver.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button"));
    for(WebElement click:button){
        while(click.isDisplayed()){

            WebDriverWait JEAN11 = new WebDriverWait(driver, 100);
            JEAN11.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button")));
            click.click();
            Thread.sleep(4000);

        }
        WebElement present = driver.findElement(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody"));
        List<WebElement> list = present.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody/tr"));
        System.out.println("Total Number of TR: " + list.size());

    }
List button=driver.findElements(By.xpath(“/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button”);
对于(WebElement单击:按钮){
while(单击.isDisplayed()){
WebDriverWait JEAN11=新的WebDriverWait(驱动程序,100);
JEAN11.until(通过.xpath(“/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button”)查询所有元素的预期条件和可见性);
点击。点击();
睡眠(4000);
}
WebElement present=driver.findElement(By.xpath(“/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div/div[3]/div/table/tbody”);
List List=present.findElements(By.xpath(“/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div/div[3]/div/table/tbody/tr”);
System.out.println(“TR总数:+list.size());
}
为什么我接收到缓存中找不到的
元素-可能该页面在查找后已更改了
:(

我建议您

1-分别勾选“点击查看更多帐户”和“TR总数”:

2-在这种情况下,监视新对象。(不要只监视对象一次,然后像以前一样将其用于脚本的其余部分)

所以代码应该是

while(clickMore == true) {
    List<WebElement> button = driver.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button"));
    if(button.size() > 0) {
        button.get(0).click();
        Thread.sleep(4000);
    }
    else clickMore = false;
}

WebElement present = driver.findElement(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody"));
List<WebElement> list = present.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody/tr"));
System.out.println("Total Number of TR: " + list.size());
while(单击更多==true){
List button=driver.findElements(By.xpath(“/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button”);
如果(button.size()>0){
按钮。获取(0)。单击();
睡眠(4000);
}
否则clickMore=false;
}
WebElement present=driver.findElement(By.xpath(“/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div/div[3]/div/table/tbody”);
List List=present.findElements(By.xpath(“/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div/div[3]/div/table/tbody/tr”);
System.out.println(“TR总数:+list.size());

您正在查找
:您的条件将是:
如果(list.size()>0)然后…//执行操作
仍在获取:缓存中找不到元素-可能页面在向上查找后已更改,您希望准确检查什么?是否希望如有分页,然后向前处理,否则停止?我希望检查的是,如果按钮出现在listview中,我希望单击它,并且我希望单击它如果在第一次加载时没有按钮可供单击,则循环直到看不到按钮为止-继续执行我在说明中的最后一条语句。如果在第一次加载时按钮不在列表视图中,则继续执行我在说明中的最后3条语句。@HelpingHandsHi@Nguyen,我如何初始化单击您指定的更多信息?我是否应该输入
布尔值clickMORE=false
??