首頁 >Java >java教程 >如何解決 Selenium WebDriver 中的陳舊元素引用異常?

如何解決 Selenium WebDriver 中的陳舊元素引用異常?

DDD
DDD原創
2024-11-17 20:13:021092瀏覽

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