Using selenium 2, is there a way to test if an element is stale?
Suppose I initiate a transition from one page to another (A -> B). I then select element X and test it. Suppose element X exists on both A and B.
Intermittently, X is selected from A before the page transition happens and not tested until after going to B, raising a StaleElementReferenceException. It's easy to check for this condition:
try:
visit_B()
element = driver.find_element_by_id('X') # Whoops, we're still on A
element.click()
except StaleElementReferenceException:
element = driver.find_element_by_id('X') # Now we're on B
element.click()
But I'd rather do:
element = driver.find_element_by_id('X') # Get the elment on A
visit_B()
WebDriverWait(element, 2).until(lambda element: is_stale(element))
element = driver.find_element_by_id('X') # Get element on B
I don't know what language you are using there but the basic idea you need in order to solve this is:
boolean found = false
set implicit wait to 5 seconds
loop while not found
try
element.click()
found = true
catch StaleElementReferenceException
print message
found = false
wait a few seconds
end loop
set implicit wait back to default
NOTE: Of course, most people don't do it this way. Most of the time people use the ExpectedConditions class but, in cases where the exceptions need to be handled better this method ( I state above) might work better.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With