Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决org.openqa.selenium.StaleElementReferenceException:stale元素引用:元素未附加到页面文档_Java_Selenium Webdriver - Fatal编程技术网

Java 如何解决org.openqa.selenium.StaleElementReferenceException:stale元素引用:元素未附加到页面文档

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

如何解决陈旧元素异常我已经用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 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_元素。单击();