错误处理:修复动态链接的“陈旧元素引用”
在动态 Web 期间,Web 元素可能会变得陈旧并与页面文档分离页面更改。当尝试与这些元素交互时,这可能会导致“过时元素引用”错误。当浏览加载新内容的菜单或选项卡时,会出现一种特殊情况。
在提供的示例中,Selenium 尝试单击多个相同链接列表中的链接。出现错误“过时的元素引用:元素未附加到页面文档”是因为底层页面结构更改后元素引用变得过时。
要解决此问题,我们可以利用异常处理并重新初始化页面内容重新加载后的元素引用。以下修改后的代码片段演示了这种方法:
<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>
通过合并异常处理,我们重新初始化 try-catch 块中的元素引用,确保使用最新的引用互动。这有效地缓解了“过时元素引用”错误,并能够在动态网页中成功导航。
以上是如何处理动态网页 Selenium 中的“过时元素引用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!