Selenium WebDriver StaleElementReferenceException

2022-09-01 16:59:23

我在运行测试时收到此错误:org.openqa.selenium.StaleElementReferenceException:Element不再附加到DOM

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


答案 1

我遇到了同样的问题,找不到任何解决方案。想出一个解决方案并发布在这里,希望这有助于有同样问题的人。我创建了一个类来处理过时的元素,具体取决于它们的类型,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;
        }
    }
}

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


答案 2

我们通过执行称为WebdriverWrapper和WebElementWrapper的东西来解决此问题。

这些包装器的作用是处理其中的 StaleElementException,然后使用定位器重新评估并获取新的 WebElement 对象。这样,您需要将处理异常的代码分散到整个代码库中,并将其本地化为一个类。

我很快就会研究这几个课程的开源,如果你们感兴趣,我会在这里添加一个链接。