我正在使用Selenium WebDriver和Java。
我正在获取网页上的所有链接,并试图逐个点击每个链接。我得到下面的错误:
error org.openqa.selenium.StaleElementReferenceException:元素该高速缓存中找不到-可能页面在查找后已更改命令持续时间或超时:如需有关此错误的文档,请访问:http://seleniumhq.org/exceptions/stale_element_reference.html构建信息:版本:“2.25.0”,修订版:‘17482’,时间:2012-07-18 21:09:54
下面是我的代码:
public void getLinks()throws Exception{
try {
List<WebElement> links = driver.findElements(By.tagName("a"));
int linkcount = links.size();
System.out.println(links.size());
for (WebElement myElement : links){
String link = myElement.getText();
System.out.println(link);
System.out.println(myElement);
if (link !=""){
myElement.click();
Thread.sleep(2000);
System.out.println("third");
}
//Thread.sleep(5000);
}
}catch (Exception e){
System.out.println("error "+e);
}
}
实际上,它显示在输出中
[[FirefoxDriver:firefox on XP(ce0da229-f77b-4fb8-b017-df517845fa78)] -〉tag name:a]
作为链接,我想消除这些形式的结果。
7条答案
按热度按时间ni65a41a1#
有没有这样一个好主意,有以下情况:
为什么?因为不能保证
element.click();
不会对其他找到的元素产生影响,所以DOM
可能会被改变,因此StaleElementReferenceException
也会被改变。最好使用以下场景:
这是更好的,因为你将始终采取
WebElement
刷新,即使以前的点击有一些影响。编辑:添加示例
希望足够了。
mhd8tkvw2#
信用属于“贷款”。
我也得到了“陈旧异常”,所以我用'贷款'的答案和完美的作品。只是如果有人需要知道如何点击每个链接从结果页尝试这个(java)
clickAllHyperLinksByTagName("h3");
其中“h3”标记包含超链接nimxete23#
yks3o0rb4#
如果您可以使用
WebDriver.get()
而不是WebElement.click()
来测试链接,另一种方法是将每个找到的WebElement
的href
值保存在一个单独的列表中。这样您就可以避免StaleElementReferenceException
,因为您在使用第一个WebElement.click()
导航离开后不会尝试重用后续的WebElement
。基本示例:
ie3xauqp5#
完整的解释请阅读此POST
ktca8awb6#
ncgqoxb07#
List jobLinks =driver.findElements(By.tagName(“loc”));