我正在测试由多个框架组成的网站。即使没有更改元素,服务器也可以随时重新生成帧。如果在
期间发生这种情况driver.findElement(By.id("11")).getText();
在findElement和getText之间,抛出StaleElementExcpetion。我目前的解决方案是多次重试。
for (int i = 0; i < 3; i++) {
try {
driver.findElement(By.id("11")).getText();
} catch (StaleElementException e) {
// retry
}
}
这真的让代码膨胀,任何更好的解决方案?
答案 0 :(得分:2)
编写一个为您执行此操作的函数,以使代码看起来不那么臃肿,但我不相信有更好的方法来解决此问题。
这里有一篇很好的博客文章:StaleElementException
答案 1 :(得分:0)
首先,我们必须确定您的gettext存在于哪个帧中,然后切换到特定的帧,然后查找该元素。
语法:
driver.switchTo().frame("frameName"); //name of the frame
driver.switchTo().frame(1); //index
示例:
driver.switchTo().frame(1);
driver.findElement(By.xpath("//p")).getText();
driver.switchTo().defaultContent();
注意:
driver.switchTo().defaultContent(); //Used default frame, I.E. If there are three frames in one page named as 1,2,3. If you want to switch from frame 2 to frame 3, In that case we are not able to switch directly to the frame 3, In this case what we have to do is
driver.switchTo().frame("2"); //frame 2
driver.switchTo().defaultContent();// main window - (Default page) while loading webpage
driver.switchTo().frame("3"); //frame 3
请找到以下路径:StaleElementException
http://www.seleniumhq.org/exceptions/stale_element_reference.jsp