frameToBeAvailable和switchToIt之后的元素引用异常

5n0oy7gb  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(396)

如果selenium抛出staleelementreferenceexception,则通常是(?),因为由于外部干扰,selenium“拥有”的网页(dom)的状态已更改,但我在添加 frameToBeAvailableAndSwitchToItswitch 声明。我的代码:

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 ?

ovfsdjhp

ovfsdjhp1#

而不是那些较小的冗余步骤,你可以切换到所需的 <iframe> 使用xpath以最佳方式诱导webdriverwait,如下所示:

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

参考

您可以在以下内容中找到一些相关的讨论:
iframe下文档的处理方法
在SeleniumWebDriverJava中,不使用driver.switchto().frame(“framename”)就可以切换到框架中的元素吗?

2skhul33

2skhul332#

与3号线

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

你已经切换到iframe了。所以不需要第4行-它只是试图执行切换到同一帧。尝试删除它(第2行也是冗余的)

相关问题