Nicolazz92
Nicolazz92

Reputation: 138

Selenium Stale Element Reference Exception

Everytime got StaleElementReferenceException exception.
Here is a method, pls help.

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);
}

I already added an element research and waiting for a second. It doesn't help.

Upvotes: 0

Views: 190

Answers (1)

Murthi
Murthi

Reputation: 5347

I guess, you are trying to double click on a element. You can use actions class as given below instead of clicking twice on a element.

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();
}

Upvotes: 3

Related Questions