如何解决过时的元素异常我已经尝试过使用Web驱动程序等待并尝试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");
}
答案 0 :(得分:2)
首先让我们弄清楚WebElement是什么。
WebElement是对DOM中特定元素的引用。
与您交互的元素被销毁然后重新创建时,将导致StaleElementReferenceException异常,从而导致WebElement(对DOM中特定元素的引用)变得陈旧(即,它不再引用任何内容,因为它引用的元素具有被摧毁)。
如今,大多数复杂的网页都会随着用户与之交互而动态地移动事物,这需要销毁并重新创建DOM中的元素,从而导致StaleElementReference错误。请记住,重新创建的元素可能看起来与被破坏的元素相同,因此,实际上在原始元素被破坏然后重新创建的页面上,页面看起来可能相同。
解决StaleElementReferenceException的唯一方法是重置对DOM中元素的引用,这是通过再次搜索元素来完成的。因此,一旦您的WebElement过时,您需要执行另一个driver.findElement()
来再次在DOM中查找元素,这将重置引用。