这是一段代码片段:
System.setProperty(Constants.WEBDRIVER_CHROME_DRIVER_PROP, Constants.WEBDRIVER_CHROME_DRIVER_PATH);
m_chromeWebdriver = new ChromeDriver();
m_chromeWebdriver.get("mysite.org");
WebElement arrowElement = m_chromeWebdriver.findElement(By.cssSelector(_ARROW_NEXT_DAY));
arrowElement.click();
WebElement elmMainTable = m_chromeWebdriver.findElement(By.className("table-main"));
List<WebElement> allRows = elmMainTable.findElements(By.tagName("tr"));
for (WebElement row : allRows) {
List<WebElement> cells = row.findElements(By.tagName("td"));
for (WebElement cell : cells) {
System.out.println(cell.getText());
}
}
m_chromeWebdriver.quit();
在最后一行,我得到一个
“陈旧元素引用:元素未附加到页面 文件“
异常。
为什么以及如何解决这个问题? 我使用Chromdriver 2.2.9。
由于
答案 0 :(得分:0)
嗯,因为这可能不是一个完美的解决方案 - 至少它对我有用......
我将所有相关代码放入这样的方法中:
private static void handleTable() {
for (int i = 1; i < 5; i++) {
try {
WebElement elmMainTable = m_chromeWebdriver.findElement(By.className("table-main"));
List<WebElement> allRows = elmMainTable.findElements(By.cssSelector(".table-main tr"));
for (WebElement row : allRows) {
List<WebElement> cells = row.findElements(By.tagName("td"));
for (WebElement cell : cells) {
System.out.print(cell.getText() + "\t");
}
System.out.println();
}
} catch (StaleElementReferenceException e) {
//e.printStackTrace();
handleTable();
}
return;
}
}
它有效!您可以将值5更改为您当然想要的值。
答案 1 :(得分:-1)
我了解到Selenium陈旧异常的主要原因是DOM中的元素更改。如果过时的异常是由您未处理的Web元素引起的,则可以在try-catch下面尝试并在JAVA中继续方法。
AbsenceService