硒陈旧元素参考例外

时间:2017-11-14 11:49:35

标签: java selenium

每次都有StaleElementReferenceException例外。
这是一种方法,请帮助。

private void selectAndClickRow(String elementName, boolean doubleClick) {
    try {
        String elementXpath = "//tr//td//div[contains(text(),'" + elementName + "')]";
        new WebDriverWait(Init.getWebDriver(), Init.getTimeOutInSeconds()).until(ExpectedConditions.visibilityOf(Init.getDriverExtensions().waitUntilElementAppearsInDom(By.xpath(elementXpath))));
        WebElement row = table.findElements(By.xpath(elementXpath)).get(0);
        row.click();
        if (doubleClick) {
            row.click();
        }
        Init.getDriverExtensions().waitUntilElementAppearsInDom(By.xpath("//tr//td[contains(@class,'selected')]//div[contains(text(),'" + elementName + "')]"));
    } catch (StaleElementReferenceException e) {
        freeze(1);
        selectAndClickRow(elementName, doubleClick);
    }
    waitToLoad();
}

public WebElement waitUntilElementAppearsInDom(By by) {
    Wait wait = new WebDriverWait(Init.getWebDriver(), (long)Init.getTimeOutInSeconds());
    wait.until(ExpectedConditions.presenceOfElementLocated(by));
    return Init.getWebDriver().findElement(by);
}

我已经添加了元素研究并等待一秒钟。它没有帮助。

1 个答案:

答案 0 :(得分:3)

我想,你试图双击一个元素。您可以使用下面给出的操作类,而不是在元素上单击两次。

private void selectAndClickRow(String elementName, boolean doubleClick) {
    try {
        String elementXpath = "//tr//td//div[contains(text(),'" + elementName + "')]";
        new WebDriverWait(Init.getWebDriver(), Init.getTimeOutInSeconds()).until(ExpectedConditions.visibilityOf(Init.getDriverExtensions().waitUntilElementAppearsInDom(By.xpath(elementXpath))));
        WebElement row = table.findElements(By.xpath(elementXpath)).get(0);
        new Actions(driver).doubleClick(row).perform();
    } catch (StaleElementReferenceException e) {
        //freeze(1);
        //selectAndClickRow(elementName, doubleClick);
    }
    waitToLoad();
}