首页  >  文章  >  Java  >  如何解决 Selenium WebDriver 中的陈旧元素引用异常?

如何解决 Selenium WebDriver 中的陈旧元素引用异常?

DDD
DDD原创
2024-11-17 20:13:021000浏览

How to Resolve the Stale Element Reference Exception in Selenium WebDriver?

Selenium WebDriver 中的陈旧元素引用异常:故障排除和解决方案

当先前获取的 WebElement 引用无效时,会发生 Selenium WebDriver 的陈旧元素引用异常由于底层 DOM 的变化。当动态更新或删除元素,导致现有引用过时时,就会出现此问题。

异常原因

异常可能发生在以下情况:

  • DOM 是动态操作的,例如使用替换元素JavaScript。
  • AJAX 请求更新页面,导致元素删除或重新创建。
  • 浏览器引擎本身会对 DOM 进行更改以优化性能。

示例代码和异常详细信息

提供的代码片段在元素识别期间遇到异常,因为对话框打开和关闭时 DOM 发生变化:

WebElement textElement = driver.findElement(By.name("createForm:dateInput_input"));

错误跟踪显示以下消息:

org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document

解决方案:刷新 WebElement 引用

要解决此问题,您需要在任何可能使其无效的 DOM 更改后刷新 WebElement 引用。常用的解决方案包括:

  • 使用 ExpectedConditions 显式等待元素再次可见:
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("createForm:dateInput_input")));
  • 使用 JavaScript 执行器直接定位元素:
WebElement textElement = (WebElement) ((JavascriptExecutor) driver)
    .executeScript("return document.querySelector('input[name=\"createForm:dateInput_input\"]')");
  • 刷新使用 driver.navigate().refresh() 访问页面并再次定位该元素。

其他提示

  • 避免跨多个使用 WebElement 引用行动。在每个操作后刷新引用。
  • 在测试执行期间定期检查陈旧元素异常,并包括恢复机制。
  • 使用 WebDriver 的内置机制来处理动态 DOM 更改,例如 ExpectedConditions 和 WebDriverWait上课。

以上是如何解决 Selenium WebDriver 中的陈旧元素引用异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn