Skip to content Skip to sidebar Skip to footer

Selenium Python Onclick() Gives Staleelementreferenceexception

The developer changed the code to use an onclick() DOM element instead of an url. So Now I need to reload page all the time to prevent it from getting stale. How can I do this with

Solution 1:

I dont think you have to reload the entire page if you encounter StaleElementReferenceException but I may be wrong too. It happens When the element is no longer attached to the DOM, search for the element again to reference the element

The below code may not clear your issue, but should help you start implementing a better solution

driver.get(alarmurl)
elems = driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]")
for el in elems:
    try:
      el.click()
    except StaleElementReferenceException:
       # find the element again and click

Solution 2:

You can fix your code as below:

driver.get(alarmurl)
# get initial events number
elems_count = len(driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]"))

# execute click() for each eventfor _ inrange(elems_count):
    driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]")[0].click()

P.S. You also might need to wait until events number decreased by 1 after each click in case events removes too slow... or apply another approach:

driver.get(alarmurl)
# getinitial events number
elems_count = len(driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]"))

# execute click() foreach event. Starting from the lastonefor index inrange(elems_count):
    driver.find_elements_by_xpath("//a[contains(text(), '(Force)')]")[elems_count - index -1].click()

Post a Comment for "Selenium Python Onclick() Gives Staleelementreferenceexception"