Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selenium WebDriver StaleElementReferenceException

I get this error when running my tests: org.openqa.selenium.StaleElementReferenceException: Element is no longer attached to the DOM

any idea on how to solve the above exception? this happen in my grid which has a ref Xpath expression which is dynamic

like image 958
Maalamaal Avatar asked Jan 30 '11 23:01

Maalamaal


People also ask

What is StaleElementReferenceException selenium?

What is StaleElementReferenceException in Selenium Webdriver. Stale means old, decayed, no longer fresh. Stale Element means an old element or no longer available element. Assume there is an element that is found on a web page referenced as a WebElement in WebDriver. If the DOM changes then the WebElement goes stale.

What is a StaleElementReferenceException?

A stale element reference exception is thrown in one of two cases, the first being more common than the second: The element has been deleted entirely. The element is no longer attached to the DOM.

What is stale element exception in selenium WebDriver?

The stale element reference error is a WebDriver error that occurs because the referenced web element is no longer attached to the DOM. Every DOM element is represented in WebDriver by a unique identifying reference, known as a web element.

How will you close add pop using selenium?

We can close the pop up window with Selenium. The getWindowHandles and getWindowHandle methods are used for the pop up window. To store all the window handles opened in a Set data structure, the getWindowHandles method is used. To store the window handle of the pop up in focus, the getWindowHandle method is used.


1 Answers

I ran across this same problem and could not find any solutions. Came up with a solution and posting it here, hope this helps someone with the same problem. I created a class to handle stale elements depending on their type, cssselector, id, etc and simply call it like I would any other page object.

public void StaleElementHandleByID (String elementID) {     int count = 0;     boolean clicked = false;     while (count < 4 && !clicked)     {         try          {             WebElement yourSlipperyElement= driver.findElement(By.id(elementID));             yourSlipperyElement.click();              clicked = true;         }          catch (StaleElementReferenceException e)         {             e.toString();             System.out.println("Trying to recover from a stale element :" + e.getMessage());             count = count+1;         }     } } 

I'd recommend only using this on elements you know cause problems for WebDriver.

like image 113
Armando Avatar answered Oct 30 '22 16:10

Armando