“StaleElementReferenceException:在缓存中找不到元素 - 也许页面在查找后已经发生了变化

时间:2014-02-19 15:30:34

标签: java selenium selenium-webdriver

我想在页面上找到损坏的链接。

但是我在第二次迭代时遇到错误当我尝试点击第二个链接时(检查页面上已损坏的链接)

StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up Command duration or timeout: 47 milliseconds"

这是我的代码:

    WebElement element =driver.findElement(By.tagName("a"));
    List<WebElement> links = driver.findElements(By.tagName("a"));
   System.out.println(links.size());

   for (int index=0; index<links.size(); index++ ) { 
       links.get(index).click();
       driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
       driver.getTitle();
       driver.navigate().back(); 

       } 

任何人都可以告诉我我犯了错误吗?

2 个答案:

答案 0 :(得分:1)

我认为你不能在页面上存储元素,浏览,然后回来使用它们。每次到达新页面时,都需要再次选择它们(有点刷新)。

尝试这样的事情

   for (int index=0; index<links.size(); index++ ) {
      links = driver.findElements(By.tagName("a")); 
      links.get(index).click();
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      driver.getTitle();
      driver.navigate().back(); 
   } 

答案 1 :(得分:0)

如果页面重新加载链接(webelements列表)将失去保持点击下一个元素。

您可以执行以下操作,点击循环中的每个链接。

WebElement element =driver.findElement(By.tagName("a"));
List<WebElement> links = driver.findElements(By.tagName("a"));
System.out.println(links.size());

for (int index=0; index<links.size(); index++ ) { 
       driver.findElements(By.tagName("a")).get(i).click(); //this is what I've change
       driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
       driver.getTitle();
       driver.navigate().back(); 

 }