首页 >Java >java教程 >如何处理动态网页 Selenium 中的'过时元素引用”错误?

如何处理动态网页 Selenium 中的'过时元素引用”错误?

Barbara Streisand
Barbara Streisand原创
2024-11-06 00:24:02579浏览

How to Handle

错误处理:修复动态链接的“陈旧元素引用”

在动态 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&#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>

通过合并异常处理,我们重新初始化 try-catch 块中的元素引用,确保使用最新的引用互动。这有效地缓解了“过时元素引用”错误,并能够在动态网页中成功导航。

以上是如何处理动态网页 Selenium 中的'过时元素引用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn