Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengendalikan Ralat "Rujukan Elemen Lapuk" dalam Selenium untuk Halaman Web Dinamik?

Bagaimana untuk Mengendalikan Ralat "Rujukan Elemen Lapuk" dalam Selenium untuk Halaman Web Dinamik?

Barbara Streisand
Barbara Streisandasal
2024-11-06 00:24:02450semak imbas

How to Handle

Pengendalian Ralat: Membetulkan "Rujukan Elemen Lapuk" untuk Pautan Dinamik

Elemen web boleh menjadi basi dan tercabut daripada dokumen halaman semasa web dinamik perubahan halaman. Ini boleh membawa kepada ralat "rujukan unsur lapuk" apabila cuba berinteraksi dengan elemen ini. Satu kes tertentu timbul apabila menavigasi melalui menu atau tab yang memuatkan kandungan baharu.

Dalam contoh yang diberikan, Selenium cuba mengklik pautan dalam senarai berbilang pautan yang serupa. Ralat "rujukan elemen basi: elemen tidak dilampirkan pada dokumen halaman" berlaku kerana rujukan elemen menjadi lapuk selepas struktur halaman asas berubah.

Untuk menyelesaikan isu ini, kami boleh memanfaatkan pengendalian pengecualian dan memulakan semula rujukan elemen selepas kandungan halaman dimuat semula. Coretan kod yang diubah suai berikut menunjukkan pendekatan ini:

<code class="java">public static void main(String[] args) throws InterruptedException {
    WebDriver driver = new ChromeDriver();
    driver.navigate().to("url......");
    driver.findElement(By.id("Login1_txtEmailID")).sendKeys("[email&#160;protected]");
    driver.findElement(By.id("Login1_txtPassword")).sendKeys("Testing1*");
    driver.findElement(By.id("Login1_btnLogin")).click();

    List<WebElement> LeftNavLinks = driver.findElements(By.xpath("//*[@id='sliding-navigation']//a"));
    Thread.sleep(1000);
    String ben = "Benefit Status";

    for (WebElement e : LeftNavLinks) {
        String linkText = e.getText();
        System.out.print(i + " " + linkText + "\n");

        if (linkText.equals(ben)) {
            String BenefitStatLi = "//*[@id='sliding-navigation']/li[%s]/a";
            System.out.print(i + " " + linkText + "\n");

            try {
                driver.findElement(By.xpath(String.format(BenefitStatLi, i))).click();
                driver.findElement(By.xpath("//* [@id='divContentHolder']/div[1]/a[1]")).click();
            } catch (org.openqa.selenium.StaleElementReferenceException ex) {
                driver.findElement(By.xpath(String.format(BenefitStatLi, i))).click();
                driver.findElement(By.xpath("//* [@id='divContentHolder']/div[1]/a[1]")).click();
            }
        }
        i++;
    }
}</code>

Dengan memasukkan pengendalian pengecualian, kami memulakan semula rujukan elemen dalam blok cuba-tangkap, memastikan bahawa rujukan yang paling terkini digunakan untuk interaksi. Ini secara berkesan mengurangkan ralat "rujukan unsur lapuk" dan membolehkan navigasi yang berjaya dalam halaman web dinamik.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Ralat "Rujukan Elemen Lapuk" dalam Selenium untuk Halaman Web Dinamik?. 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