Selenium StaleElementReferenceException after frameToBeAvail



如果Selenium抛出StaleElementReferenceException,通常是(?(,因为网页(DOM(Selenium的状态;拥有";由于外部干扰而发生了变化,但当我在switch语句之前添加frameToBeAvailableAndSwitchToIt时,我开始得到它。我的代码:

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的方式吗?

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

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

参考

你可以在中找到一些相关的讨论

  • 如何处理iframe下的#文档
  • 在SeleniumWebdriverJava中,是否可以在不使用driver.switchTo((.frame("frameName"(的情况下切换到框架中的元素

带第3行

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

您已经切换到iframe。所以不需要第4行——它只是试图切换到同一帧。尝试删除它(第2行也是多余的(

相关内容

  • 没有找到相关文章

最新更新