Selenium Java Chrome:陈旧例外

时间:2017-05-04 15:55:24

标签: java selenium selenium-chromedriver

这是一段代码片段:

    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。

由于

2 个答案:

答案 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