【问题标题】:Stale Element Reference Exception in Selenium web driver - Java?Selenium Web 驱动程序中的陈旧元素引用异常 - Java?
【发布时间】:2020-11-30 16:19:10
【问题描述】:

我在 Selenium 网络驱动程序中尝试了所有我知道的方法,但我无法解决 Stale Element Reference Exception。我在 Selenium 网络驱动程序中尝试过 implicit waitexplicit waitfluent wait

我的 HTML 看起来像下面的屏幕截图。我必须单击此列表中的所有 li 选项。

如果我使用foreachforIterator 循环这个,我可以点击第一个选项,但第二个选项会抛出一个Stale Element Reference Exception

我的硒代码是:

List<WebElement> chapterNames = driver.findElements(By.xpath("//*[@id='ctl00_PageContent_ddlreviewCat_DropDown']/child::div/ul/li"));
            //List<WebElement> chapterQues = driver.findElements(By.xpath("//*[@id='ctl00_PageContent_grdReviewDocDetailList_ctl00']/child::tbody/tr/td[1]"));
            WebElement ChapterNamedrpdwn = driver.findElement(By.id("ctl00_PageContent_ddlreviewCat_Input"));
            Thread.sleep(2000);
            for (int i = 0; i < chapterNames.size(); i++) {
                try {
                    wait=new WebDriverWait(driver,30);
                    ChapterNamedrpdwn.click();
                    wait.until(ExpectedConditions.refreshed(ExpectedConditions.visibilityOfAllElements(chapterNames)));
                    chapterNames.get(i).click();
                    System.out.println(chapterNames.get(i).getAttribute("innerHTML")+ " clicked..");
                    Thread.sleep(3000);
                }
                catch(Exception e) {
                    System.out.println(e.getMessage());
                }
            }

错误信息是:

过时的元素引用:元素未附加到页面文档 (会话信息:chrome=86.0.4240.198)
有关此错误的文档,请访问:
https://www.seleniumhq.org/exceptions/stale_element_reference.html

【问题讨论】:

  • StaleElementReferenceException 发生在元素被操作并且它的引用已被销毁并且您仍在尝试与 DOM 中引用不可用的元素进行交互时,所以您能检查一下您是 xpath。
  • 谢谢.. 还有其他方法可以解决这个问题吗?而不是每次刷新都获取每个元素。因为列表中有近 20 个选项,所以如何获取每次刷新的元素并再次循环它们。如果您对此问题有任何想法,请告诉我。

标签: java selenium selenium-webdriver testing automated-tests


【解决方案1】:

在您的代码中,您等待刷新 - 如果您的 DOM 发生更改,旧的引用将不再可用(您的驱动程序会告诉您这一点)。每次再次单击后,您都必须在下一次重新获取对 LI 的引用

【讨论】:

  • 谢谢.. 但是如果我以前运行代码而不刷新等待仍然会返回相同的错误。我认为如果我在列表中选择一个选项,页面已经刷新并且 DOM 元素再次重新创建,所以旧元素不会用于循环。有没有其他选择可以解决这个问题?而不是每次刷新都获取每个元素。因为列表中有近 20 个选项,所以如何获取每次刷新的元素并再次循环它们。
  • 这个异常意味着网页发生了一些变化,参考你通过web驱动获得的不再可用。您必须在任何刷新后重新获取它们。
猜你喜欢
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多