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

硒与StaleElementReferenceException
EN

Stack Overflow用户
提问于 2018-03-21 06:54:56
回答 4查看 126关注 0票数 0

我正在使用selenium 3.9.1和java自动测试web应用程序。例如,web应用具有基于按下按钮的一些动态内容。每当单击此按钮时,页面都会刷新。一个java脚本在按钮点击时运行,我想它会更新DOM。此时,当我尝试访问该按钮(在页面上可见)时,我得到一个staleElementReferenceException。

一旦更改,Selenium会自动重新加载DOM吗?我对selenium还是个新手。我对此进行了研究,并尝试使用driver.navigate().Refresh()刷新页面,看看这是否能解决问题。这并不能解决问题。

我们将非常感谢您提出的任何建议。

EN

回答 4

Stack Overflow用户

发布于 2018-03-21 07:10:45

由于页面已刷新,因此您拥有的按钮引用是对旧页面上不再存在的按钮的引用。

我要说的是,你需要在刷新的页面上获得一个新的按钮引用(例如,调用FindElementById)。

票数 1
EN

Stack Overflow用户

发布于 2018-03-21 07:15:01

如果刷新了页面,则DOM中的所有项现在都已过时。这意味着在按下按钮之前找到的所有项目都必须重新找到。任何使用这些项的尝试都很可能会被处理为过时的元素异常。

然而,如果点击按钮会影响页面上的项目,而不必要求new服务器给你一个新页面,你就可以与旧项目进行交互。

票数 1
EN

Stack Overflow用户

发布于 2018-03-21 12:20:58

你可以这样做:

代码语言:javascript
复制
public void SaveAndAgainClick() throws Exception{
        try{
            clicksaveButton(); //method to click save button
            WebElement someValue = driver.findElement(By.xpath("(//input[@name='someValue'])[1]"));
            someValue.click();
        }catch (StaleElementException e){
            WebElement someValue = driver.findElement(By.xpath("(//input[@name='someValue'])[1]");
            someValue.click();
        }       
    }

如果findElement在查找(//input[@name='someValue'])[1]时获得了staleElementError,那么它将在catch块中再次尝试,并且肯定会找到该元素并单击它。如果您遵循这种方法,您的测试将会通过。

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

https://stackoverflow.com/questions/49395461

复制
相关文章

相似问题

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