Java 如何解决org.openqa.selenium.StaleElementReferenceException:stale元素引用:元素未附加到页面文档
如何解决陈旧元素异常我已经用web驱动程序wait and try n catch尝试过了,但仍然得到了相同的结果。它也在单击我试图在表中单击的按钮,并导航到下一页 这是相同的代码:Java 如何解决org.openqa.selenium.StaleElementReferenceException:stale元素引用:元素未附加到页面文档,java,selenium-webdriver,Java,Selenium Webdriver,如何解决陈旧元素异常我已经用web驱动程序wait and try n catch尝试过了,但仍然得到了相同的结果。它也在单击我试图在表中单击的按钮,并导航到下一页 这是相同的代码: for(int cnum=1;cnum<=1;cnum++) { System.out.println("SOURCE_TABLE_ID-> " + columns.get(1).getText() + "\t ||" +"\t SOU
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");
}
for(int cnum=1;cnum
WebElement是对DOM中特定元素的引用
当您与之交互的元素被销毁,然后重新创建时,会引发StaleElementReferenceException,导致您的WebElement(对DOM中特定元素的引用)变得陈旧(即,它不再引用任何内容,因为它引用的元素已被销毁)
现在大多数复杂的网页都会在用户与之交互时动态移动,这需要销毁和重新创建DOM中的元素,从而导致StaleElementReference错误。请记住,重新创建的元素可能与销毁的元素看起来完全相同,因此从视觉上看,页面可能与实际上,原始元素已被破坏,然后重新创建
修复StaleElementReferenceException的唯一方法是重置对DOM中某个元素的引用,这是通过再次搜索该元素来完成的。因此,一旦WebElement变得过时,您需要执行另一个驱动程序。findElement()
再次在DOM中查找元素,这将重置引用。首先,让我们明确WebElement是什么
WebElement是对DOM中特定元素的引用
当您与之交互的元素被销毁,然后重新创建时,会引发StaleElementReferenceException,导致您的WebElement(对DOM中特定元素的引用)变得陈旧(即,它不再引用任何内容,因为它引用的元素已被销毁)
现在大多数复杂的网页都会在用户与之交互时动态移动,这需要销毁和重新创建DOM中的元素,从而导致StaleElementReference错误。请记住,重新创建的元素可能与销毁的元素看起来完全相同,因此从视觉上看,页面可能与实际上,原始元素已被破坏,然后重新创建
修复StaleElementReferenceException的唯一方法是重置对DOM中某个元素的引用,这是通过再次搜索该元素来完成的。因此,一旦WebElement变得过时,您需要执行另一个驱动程序。findElement()
再次在DOM中查找元素,该元素将重置引用。我尝试了相同的方法,但仍然不起作用。哪行代码引发了错误,能否将整个堆栈跟踪添加到问题中?实际上,在表中发生了什么?我正在尝试单击加号按钮,该按钮是动态的,有了此代码,就发生了我仍然想知道哪行代码在抛出错误,我仍然想看到完整的堆栈跟踪来帮助:)这是代码-WebElement sourcetable_element=new WebDriverWait(driver,50)。直到(ExpectedConditions.presenceOfElementLocated(By.xpath(“/*[@id='root'))//table/tbody/tr[“+i+”]/td[5]/div[@class='glyphicon glyphicon plus']);sourcetable_元素。单击();我也尝试过同样的方法,但仍然不起作用哪一行代码引发了错误,你能把整个堆栈跟踪添加到你的问题中吗?事实上,表中发生了什么?我正在尝试单击一个加号按钮,它是动态的,并且使用此代码,它也在发生,但同时抛出了一个异常。我仍然想知道哪一行代码抛出了错误,我仍然希望看到完整的堆栈跟踪来帮助:)这是代码-WebElement sourcetable_element=new WebDriverWait(driver,50)。直到(ExpectedConditions.PresenceOfementLocated(By.xpath()//*[@id='root']//table/tbody/tr[“+i+”]/td[5]/div[@class='glyphicon glyphicon plus']);sourcetable_元素。单击();