Rumah  >  Artikel  >  Java  >  Bagaimana untuk Menyelesaikan Pengecualian Rujukan Elemen Stale dalam Selenium WebDriver?

Bagaimana untuk Menyelesaikan Pengecualian Rujukan Elemen Stale dalam Selenium WebDriver?

DDD
DDDasal
2024-11-17 20:13:021000semak imbas

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

Pengecualian Rujukan Elemen Lapuk dalam Selenium WebDriver: Penyelesaian Masalah dan Penyelesaian

Pengecualian Rujukan Elemen Lapuk Selenium WebDriver berlaku apabila rujukan yang diperoleh sebelumnya dalam WebvalidElement Element disebabkan oleh perubahan dalam DOM asas. Isu ini timbul apabila elemen dikemas kini atau dialih keluar secara dinamik, menjadikan rujukan sedia ada menjadi usang.

Punca Pengecualian

Pengecualian boleh berlaku apabila:

  • DOM dimanipulasi secara dinamik, seperti menggantikan elemen menggunakan JavaScript.
  • Permintaan AJAX mengemas kini halaman, yang membawa kepada penyingkiran elemen atau rekreasi.
  • Enjin penyemak imbas sendiri membuat perubahan pada DOM untuk pengoptimuman prestasi.

Kod Contoh dan Butiran Pengecualian

Coretan kod yang disediakan mengalami pengecualian semasa pengecaman elemen kerana DOM berubah apabila kotak dialog dibuka dan ditutup:

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

Surih ralat memaparkan mesej berikut:

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

Penyelesaian: Muat semula Rujukan WebElement

Untuk menyelesaikan masalah isu, anda perlu memuat semula rujukan WebElement selepas sebarang perubahan DOM yang boleh membatalkannya. Penyelesaian yang biasa digunakan termasuk:

  • Tunggu secara eksplisit sehingga elemen kelihatan semula menggunakan ExpectedConditions:
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("createForm:dateInput_input")));
  • Gunakan pelaksana JavaScript untuk mencari elemen secara langsung:
WebElement textElement = (WebElement) ((JavascriptExecutor) driver)
    .executeScript("return document.querySelector('input[name=\"createForm:dateInput_input\"]')");
  • Muat semula halaman menggunakan driver.navigate().refresh() dan cari elemen sekali lagi.

Petua Tambahan

  • Elakkan menggunakan rujukan WebElement merentas berbilang tindakan. Muat semula rujukan selepas setiap tindakan.
  • Semak secara kerap untuk pengecualian elemen lapuk semasa pelaksanaan ujian dan sertakan mekanisme pemulihan.
  • Gunakan mekanisme terbina dalam WebDriver untuk mengendalikan perubahan DOM dinamik, seperti ExpectedConditions dan WebDriverWait kelas.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Pengecualian Rujukan Elemen Stale dalam Selenium WebDriver?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn