【问题标题】:get StaleElementReferenceException error while using driver.navigate().back() in a loop in selenium在 selenium 的循环中使用 driver.navigate().back() 时出现 StaleElementReferenceException 错误
【发布时间】:2016-11-16 21:38:08
【问题描述】:

我有以下代码,它获取元素列表,然后在使用driver.navigate().back();时循环遍历它

List<WebElement> listingWebElementList = driver.findElements(By.xpath("(//span[@id='titletextonly'])"));

for (WebElement listingElement : listingWebElementList)
{
    Thread.sleep(5000);
    listingElement.click();
    Thread.sleep(5000);
    driver.navigate().back();
}

在第二轮循环中,使用 chromedriver 时出现以下错误

org.openqa.selenium.StaleElementReferenceException:过时的元素 参考:元素未附加到页面文档

我在 FirefoxDriver 中遇到以下错误

org.openqa.selenium.StaleElementReferenceException:找不到元素 在缓存中 - 页面可能在查找后发生了变化

driver.navigate().back(); 不能像上面那样在循环中使用吗?

【问题讨论】:

    标签: java selenium selenium-webdriver selenium-chromedriver


    【解决方案1】:

    当 DOM 发生更改或刷新时,“驱动程序”会丢失之前定位的所有 WebElements。您需要在循环的每次迭代中重新定位列表

    int size = 1;
    
    for (int i = 0 ; i < size ; ++i) {
        List<WebElement> listingWebElementList = driver.findElements(By.xpath("(//span[@id='titletextonly'])"));
        size = listingWebElementList.size();
    
        Thread.sleep(5000);
        listingWebElementList.get(i).click();
        Thread.sleep(5000);
        driver.navigate().back();
    }
    

    您可以使用索引继续跟踪列表中的位置。

    【讨论】:

      【解决方案2】:

      您的问题发生是因为当您再次导航时,该元素不再有效。为避免这种情况,请使用以下代码:

      List<WebElement> listingWebElementList = driver.findElements(By.xpath("(//span[@id='titletextonly'])"));
      int size = listingWebElementList.size();
      
      for (int i=0;i<size;i++)
      {
         List<WebElement> listingWebElementListInLoop = driver.findElements(By.xpath("(//span[@id='titletextonly'])"));
         Thread.sleep(5000);//don't use this kind of wait. wait using until.
      
         listingWebElementListInLoop.get(i).click();
         Thread.sleep(5000);
         driver.navigate().back();
         Thread.sleep(2000);
      } 
      

      【讨论】:

        猜你喜欢
        • 2017-11-16
        • 2021-10-26
        • 2014-03-03
        • 1970-01-01
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 2020-09-05
        相关资源
        最近更新 更多