在缓存中找不到元素 - 也许页面在查找后发生了变化 - 为什么?

时间:2015-07-07 00:45:53

标签: java selenium

我是这个领域的新手,我想问一下如果我想要实现这个场景我怎么能循环:( JAVA代码涉及硒和WEBDRIVER)

  • 我在列表视图中,例如帐户模块。然后在帐户模块中,如果有一个分页(点击更多帐户的按钮)那么我将点击它,当列表视图中没有看到更多的分页时,我将执行一个代码块。

  • 如果列表视图中没有分页,那么我将自动执行代码块。

以下是我想要执行的代码块,如果"点击更多帐户"列表视图中不再出现

    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());

    }

为什么我会收到Element not found in the cache - perhaps the page has changed since it was looked up :(

1 个答案:

答案 0 :(得分:1)

我建议你

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());