我正在使用selenium 3.9.1和java自动测试web应用程序。例如,web应用具有基于按下按钮的一些动态内容。每当单击此按钮时,页面都会刷新。一个java脚本在按钮点击时运行,我想它会更新DOM。此时,当我尝试访问该按钮(在页面上可见)时,我得到一个staleElementReferenceException。
一旦更改,Selenium会自动重新加载DOM吗?我对selenium还是个新手。我对此进行了研究,并尝试使用driver.navigate().Refresh()刷新页面,看看这是否能解决问题。这并不能解决问题。
我们将非常感谢您提出的任何建议。
发布于 2018-03-21 07:10:45
由于页面已刷新,因此您拥有的按钮引用是对旧页面上不再存在的按钮的引用。
我要说的是,你需要在刷新的页面上获得一个新的按钮引用(例如,调用FindElementById)。
发布于 2018-03-21 07:15:01
如果刷新了页面,则DOM中的所有项现在都已过时。这意味着在按下按钮之前找到的所有项目都必须重新找到。任何使用这些项的尝试都很可能会被处理为过时的元素异常。
然而,如果点击按钮会影响页面上的项目,而不必要求new服务器给你一个新页面,你就可以与旧项目进行交互。
发布于 2018-03-21 12:20:58
你可以这样做:
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块中再次尝试,并且肯定会找到该元素并单击它。如果您遵循这种方法,您的测试将会通过。
https://stackoverflow.com/questions/49395461
复制相似问题