java - 如何解决 org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attach to the page document
问题描述
如何解决陈旧元素异常我已经尝试过使用 web driver wait 并尝试 n catch 但仍然得到相同的结果。它也正在单击我试图在表格中单击的按钮并导航到下一页。
这是相同的代码:
for(int cnum=1;cnum<=1;cnum++)
{
System.out.println("SOURCE_TABLE_ID-> " + columns.get(1).getText() + "\t ||" +"\t SOURCE_TABLE_NAME-> "+ columns.get(2).getText());
String beforexpath = "//*[@id='root']//table/tbody/tr[";
String afterxpath = "]/td[3]";
for (int i=1;i<=rnum;i++)
{
String SourceTableName= driver.findElement(By.xpath(beforexpath+i+afterxpath)).getText();
if(SourceTableName.contains("bank_data"))
{
WebElement sourcetable_element =new WebDriverWait(driver, 70).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='root']//table/tbody/tr["+i+"]/td[5]/div[@class='glyphicon glyphicon-plus']")));
sourcetable_element.click();
break;
}
else
{
System.out.println("does not starts with B so not clicking");
}
解决方案
首先让我们弄清楚 WebElement 是什么。
WebElement 是对 DOM 中特定元素的引用。
当您与之交互的元素被销毁然后重新创建时,会引发 StaleElementReferenceException,从而导致您的 WebElement(对 DOM 中特定元素的引用)变得陈旧(即它不再引用任何内容,因为它引用的元素已被破坏) .
如今,大多数复杂的网页都会在用户与其交互时动态移动,这需要销毁和重新创建 DOM 中的元素,从而导致 StaleElementReference 错误。请记住,重新创建的元素可能看起来与被销毁的元素相同,因此在实际上原始元素已被销毁然后重新创建时,页面可能看起来相同。
修复 StaleElementReferenceException 的唯一方法是重置对 DOM 中元素的引用,这是通过再次搜索元素来完成的。因此,一旦您的 WebElement 变得陈旧,您需要再次执行driver.findElement()
以再次在 DOM 中找到该元素,这将重置引用。
推荐阅读
- c# - 如何在通过 dotnet CLI 安装 NuGet 包时运行命令
- function - COMSOL 中作为边界条件的输入函数
- monogame - MGCB 编辑器在我启动时崩溃
- python - 有没有什么快速的方法来转换数据框中的所有值 - python
- firebase - Flutter:流不从子集合中检索数据
- eclipse - Buildship:不支持的类文件主要版本 60
- r - 根据数据框创建计数矩阵
- java - Spring Data JPA从主键作为外键的多个一对多关系
- reactjs - 如何在 POST 后使用 fetch in react 获取 ID 并将其显示在警报框中
- docker - AzerothCore docker installation stucks at connected