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
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.
In Ruby,
$default_implicit_wait_timeout = 10 #seconds
def element_stale?(element)
stale = nil # scope a boolean to return the staleness
# set implicit wait to zero so the method does not slow your script
$driver.manage.timeouts.implicit_wait = 0
begin ## 'begin' is Ruby's try
element.click
stale = false
rescue Selenium::WebDriver::Error::StaleElementReferenceError
stale = true
end
# reset the implicit wait timeout to its previous value
$driver.manage.timeouts.implicit_wait = $default_implicit_wait_timeout
return stale
end
The code above is a Ruby translation of the stalenessOf method provided by ExpectedConditions. Similar code could be written in Python or any other language Selenium supports, and then called from a WebDriverWait block to wait until the element becomes stale.