当前位置: 首页 > 知识库问答 >
问题:

使用驱动程序时发生get StaleElementReferenceException错误。导航()。在selenium中循环返回()

杨凌
2023-03-14

我有下面的代码,它获取一个元素列表,然后在使用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.:过时的元素引用:元素没有附加到页面文档

我发现FirefoxDriver有以下错误

组织。openqa。硒。StaleElementReferenceException:在缓存中找不到元素-可能页面在查找后已更改

可以使用驱动程序。导航()。背() 不能在上述循环中使用?


共有2个答案

何长恨
2023-03-14

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

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);
} 
段干麒
2023-03-14

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

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

 类似资料:
  • 问题内容: 在硒测试中出现以下错误 我所做的是 环境: Firefox v47.0 Webdriver 3.0.0-beta2 问题答案: 这是完全可以预期的。没有GeckoDriver(木偶)的发行版支持该类。这是Mozilla团队开发Marionette的首要任务之一。

  • 我得到了下面的错误,如果我开始执行程序。 线程“main”org.openqa.selenium.remote.UnreachableBrowserException中的异常:无法启动新会话。可能的原因是远程服务器的地址无效或浏览器启动失败。构建信息:版本:“2.53.0”,修订版本:“35ae25b”,时间:“2016-03-15 16:57:40”

  • 我见过很多关于等待Selenium Web驱动程序(专门针对Java)的方法(比如这一个)。然而,应用这里的方法似乎并不奏效。 我试图通过在哈希表中的值中循环来测试用户查询结果。我在下面的代码中尝试了两种方法:等待Document.ReadyState和等待Class选择的项的加载。然而,看起来列表是在创建all,而没有留下完成元素刷新的时间。 我有时会出现以下错误,实际上可能是元素更新的时候。我

  • Html代码: 结果: 在com.example.tests.finalizepo.main(finalizepo.java:41)的org.openqa.selenium.support.ui.webdriverwait.timeoutexception(webdriverwait.java:80)直到(fluentwait.java:261)由:org.openqa.selenium.nosu

  • 我使用python脚本,它传递给卡桑德拉批处理查询,如下所示: 这是一段时间的工作,但在启动脚本失败并打印后约2分钟内: 我将超时从 更改为: read_request_timeout_in_ms:15000 range_request_timeout_in_ms:20000 write_request_timeout_in_ms:20000 cas_contention_timeout_in_m

  • 我正试图在eclipse中运行我的第一个webdriver脚本。使用jre1。8.0_1111. 我使用了下面的代码,但它显示了错误。请帮我查一下密码。 错误堆栈 线程“main”java中出现异常。lang.IllegalStateException:驱动程序可执行文件的路径必须由webdriver设置。壁虎。驱动系统属性;有关更多信息,请参阅github。com/mozilla/geckodr