有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Selenium WebDriver StaleElementReferenceException在使用click()时出现异常

有时当我执行这样的代码时:

webDriver.findElement(By.xpath("//*[@class='classname']")).click();

我得到一个例外: 组织。openqa。硒。StaleElementReferenceException:元素不再附加到DOM 我知道我可以重试,但有人知道为什么会发生这种情况,以及我如何防止它吗


共 (2) 个答案

  1. # 1 楼答案

    webDriver.findElement(By.xpath("//*[@class='classname']"))
    

    返回一个WebElement对象

    WebElement对象始终引用HTML DOM树(在web浏览器内存中)中的节点

    当DOM树中的节点不再存在时,会出现此异常。WebElement对象仍然存在,因为它位于JVM内存中。这是一种“断链”。您可以在WebElement上调用方法,但它们将失败

  2. # 2 楼答案

    我也有同样的问题

    我的解决办法是:

    webDriver.clickOnStableElement(By.xpath("//*[@class='classname']"));
    ...
            public void clickOnStableElement(final By locator) {
                WebElement e = new WebDriverWait(driver, 10).until(new ExpectedCondition<WebElement>(){
                    public WebElement apply(WebDriver d) {
                       try {
                           return d.findElement(locator);
                       } catch (StaleElementReferenceException ex) {
                           return null;
                       }
                   }
                });
                e.click();
             }  
    

    希望它能帮助你