首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium WebDriver StaleElementReferenceException

Selenium WebDriver StaleElementReferenceException
EN

Stack Overflow用户
提问于 2011-01-31 07:55:29
回答 11查看 43.3K关注 0票数 26

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

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

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2011-09-20 00:55:44

我遇到了同样的问题,但找不到任何解决方案。想出了一个解决方案并把它贴在这里,希望这对有同样问题的人有所帮助。我创建了一个类来根据类型、cssselector、id等来处理过时的元素,并简单地像调用其他页面对象一样调用它。

代码语言:javascript
复制
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带来问题的元素上使用它。

票数 33
EN

Stack Overflow用户

发布于 2011-03-01 00:29:11

我们通过做一些叫做WebdriverWrapper和WebElementWrapper的事情来解决这个问题。

这些包装器所做的就是处理内部的StaleElementException,然后使用定位器重新计算并获取新的WebElement对象。这样,您需要将处理异常的代码分散到代码库中,并将其本地化到一个类中。

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

票数 8
EN

Stack Overflow用户

发布于 2011-02-01 00:49:18

当您尝试使用页面上不再存在的WebElement的方法时,将引发该异常。如果您的网格正在动态加载数据,而您刷新了该网格,则对该网格上的元素的任何引用都将是“过时的”。仔细检查您尝试引用的元素是否在测试中的页面上,并且您可能需要重新实例化对象。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4846454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档