Heim  >  Artikel  >  Java  >  Wie gehe ich mit „Stale Element Reference“-Fehlern in Selenium für dynamische Webseiten um?

Wie gehe ich mit „Stale Element Reference“-Fehlern in Selenium für dynamische Webseiten um?

Barbara Streisand
Barbara StreisandOriginal
2024-11-06 00:24:02448Durchsuche

How to Handle

Fehlerbehandlung: „Veraltete Elementreferenz“ für dynamische Links beheben

Webelemente können während des dynamischen Webs veraltet sein und sich vom Seitendokument lösen Seitenwechsel. Dies kann zu Fehlern aufgrund veralteter Elementreferenzen führen, wenn versucht wird, mit diesen Elementen zu interagieren. Ein besonderer Fall tritt auf, wenn durch Menüs oder Registerkarten navigiert wird, die neue Inhalte laden.

Im bereitgestellten Beispiel versucht Selenium, auf einen Link in einer Liste mit mehreren identischen Links zu klicken. Der Fehler „Veraltete Elementreferenz: Element ist nicht an das Seitendokument angehängt“ tritt auf, weil die Elementreferenz veraltet ist, nachdem sich die zugrunde liegende Seitenstruktur geändert hat.

Um dieses Problem zu beheben, können wir die Ausnahmebehandlung nutzen und neu initialisieren die Elementreferenz nach dem Neuladen des Seiteninhalts. Der folgende modifizierte Codeausschnitt demonstriert diesen Ansatz:

<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>

Durch die Integration der Ausnahmebehandlung initialisieren wir die Elementreferenz innerhalb des Try-Catch-Blocks neu und stellen so sicher, dass die aktuellste Referenz verwendet wird Interaktionen. Dadurch wird der Fehler „Verweis auf veraltete Elemente“ effektiv gemildert und eine erfolgreiche Navigation innerhalb der dynamischen Webseite ermöglicht.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit „Stale Element Reference“-Fehlern in Selenium für dynamische Webseiten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn