微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

frameToBeAvailableAndSwitchToIt 之后的 Selenium StaleElementReferenceException

如何解决frameToBeAvailableAndSwitchToIt 之后的 Selenium StaleElementReferenceException

如果 Selenium 抛出 StaleElementReferenceException,通常是 (?) 因为 Selenium “拥有”的网页状态 (DOM) 由于外部干扰而改变,但是当我在 frametoBeAvailableAndSwitchToIt 之前添加 switch 时我开始得到它{1}} 语句。我的代码

driver.findElement(By.xpath(xpDownArrow)).click();
WebElement iframeElement = driver.findElement(By.xpath(xpIframe));
wait.until(ExpectedConditions.frametoBeAvailableAndSwitchToIt(By.xpath(xpIframe)));
driver.switchTo().frame(iframeElement);

最初我的代码只包含第 1、2 和 4 行,大部分时间都有效,但有 10-20% 的执行失败,因此我添加了第 2 行,但现在我每次都得到 StaleElementReferenceException代码执行。我不明白。为什么第 3 行会更改 DOM?这不是执行 switch 的推荐方式吗?

解决方法

代替那些较小的冗余步骤,您可以切换到所需的 <iframe> 诱导 WebDriverWait 使用 优化如下:

new WebDriverWait(driver,10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("xpIframe")));

参考

您可以在以下位置找到一些相关讨论:

,

第 3 行

wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath(xpIframe)));

您已经切换到 iframe。所以不需要第 4 行——它只是尝试切换到同一帧。尽量去掉(第2行也是多余的)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?