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