Selenium WebDriver - 使用click()时的StaleElementReferenceException

时间:2014-02-06 15:01:58

标签: java selenium-webdriver

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

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

我得到这个例外: org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM 我知道我可以重试,但有谁知道为什么会发生这种情况以及如何阻止它?

2 个答案:

答案 0 :(得分: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();
         }  

希望它会对你有所帮助。 ;)

答案 1 :(得分:0)

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

返回一个WebElement对象。

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

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