【发布时间】:2019-04-18 07:47:54
【问题描述】:
我的目标是:
- 迭代网页中的 WebElements
- 点击所有创建的元素并在同一会话中打开链接
- 使用其他逻辑解析新页面
- 返回上一页并为所有上一页匹配的 id 继续循环
我有这个代码:
List<WebElement> links = driver.findElements(By.cssSelector("div[data-sigil='touchable']"));
// this will display list of all images exist on page
for(WebElement ele:links)
{
System.out.println("test->"+ele.getAttribute("id"));
ele.click();
Thread.sleep(500);
System.out.println("URI->"+driver.getCurrentUrl());
js.executeScript("window.history.go(-1)");
}
return "ok";
哪个工作正常,它找到正确的元素 id,“ele.click()”实际上工作,但是当我执行 js.executeScript("window.history.go(-1)") 时总是失败
这是我的错误信息:
org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
(Session info: chrome=73.0.3683.103)
(Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.17134 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
所以基本上我无法继续循环。 是否有任何有用的技术可以“点击进入新标签”并管理不同的 Selenium 驱动程序会话?
非常感谢您的任何建议。
【问题讨论】:
-
我相信您的
js变量是一个WebElement,并且由于页面发生了变化而发生了变化,您需要重新查找该元素。 -
谢谢,但是如何标记我已经处理的 webelements ID?
-
那是一个不同的问题。您需要找到每个链接的独特之处(如 url),将其添加到字典或列表中,然后查找整个列表并删除字典/列表中的那些。
标签: java selenium google-chrome