如果selenium抛出staleelementreferenceexception,则通常是(?),因为由于外部干扰,selenium“拥有”的网页(dom)的状态已更改,但我在添加 frameToBeAvailableAndSwitchToIt
在 switch
声明。我的代码:
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
?
2条答案
按热度按时间ovfsdjhp1#
而不是那些较小的冗余步骤,你可以切换到所需的
<iframe>
使用xpath以最佳方式诱导webdriverwait,如下所示:参考
您可以在以下内容中找到一些相关的讨论:
iframe下文档的处理方法
在SeleniumWebDriverJava中,不使用driver.switchto().frame(“framename”)就可以切换到框架中的元素吗?
2skhul332#
与3号线
你已经切换到iframe了。所以不需要第4行-它只是试图执行切换到同一帧。尝试删除它(第2行也是冗余的)