Selenium WebDriver StaleElementReferenceException

Maa*_*aal 25 java testing selenium webdriver

运行我的测试时出现此错误:org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM

关于如何解决上述异常的任何想法?这发生在我的网格中,它有一个动态的ref Xpath表达式

Arm*_*ndo 30

我遇到了同样的问题,找不到任何解决方案.想出一个解决方案并将其发布在这里,希望这可以帮助有同样问题的人.我创建了一个类来处理陈旧元素,具体取决于它们的类型,cssselector,id等,并简单地调用它,就像我任何其他页面对象一样.

public void StaleElementHandleByID (String elementID){
int count = 0;
boolean clicked = false;
while (count < 4 || !clicked){
    try {
       WebElement yourSlipperyElement= driver.findElement(By.id(elementID));
       yourSlipperyElement.click(); 
       clicked = true;
     } catch (StaleElementReferenceException e){
       e.toString();
       System.out.println("Trying to recover from a stale element :" + e.getMessage());
       count = count+1;
     }     
}
Run Code Online (Sandbox Code Playgroud)

我建议只在你知道导致WebDriver出现问题的元素上使用它.

  • 我昨天遇到过这个,因为我遇到了类似的问题.将相关代码包装在try/catch块中,只是重试它对我有用.但我很惊讶没有人指出上述代码中的缺陷.它只会重复一次,因为即使执行了catch块,也会执行`count = count + 4`行.我认为这个想法可能是在`yourSlipperyElement.click();`之后在try块中包含那一行.这样,只有在不抛出Exception时才会执行它. (2认同)

小智 8

我们通过做一些名为WebdriverWrapper和WebElementWrapper的事来解决这个问题.

这些包装器所做的是处理其中的StaleElementException,然后使用定位器重新计算并获取新的WebElement对象.这样,您需要在代码库中传播处理异常的代码,并将其本地化为一个类.

我将很快调查这几个类的开源,如果你有兴趣,我会在这里添加一个链接.