【发布时间】:2020-11-30 16:19:10
【问题描述】:
我在 Selenium 网络驱动程序中尝试了所有我知道的方法,但我无法解决 Stale Element Reference Exception。我在 Selenium 网络驱动程序中尝试过 implicit wait、explicit wait 和 fluent wait。
我的 HTML 看起来像下面的屏幕截图。我必须单击此列表中的所有 li 选项。
如果我使用foreach、for 或Iterator 循环这个,我可以点击第一个选项,但第二个选项会抛出一个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