This test opens a webpage, tries to click a button that may become stale, and handles the StaleElementReferenceException by retrying the element lookup and click. It verifies that the button click succeeds without error.
Test Code - Selenium
Selenium Python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import StaleElementReferenceException
import time
def test_click_button_with_stale_handling():
driver = webdriver.Chrome()
driver.get('https://example.com/dynamic-button')
max_attempts = 3
attempts = 0while attempts < max_attempts:
try:
button = driver.find_element(By.ID, 'dynamic-btn')
button.click()
break# successexcept StaleElementReferenceException:
attempts += 1
time.sleep(1) # wait before retryelse:
assertFalse, 'Button remained stale after retries'# Verify some result after click
message = driver.find_element(By.ID, 'result-msg').text
assert message == 'Button clicked!', f'Unexpected message: {message}'
driver.quit()
Execution Trace - 8 Steps
Step
Action
System State
Assertion
Result
1
Test starts and opens Chrome browser
Browser window opened, ready to navigate
—
PASS
2
Navigates to 'https://example.com/dynamic-button'
Page with dynamic button loaded
—
PASS
3
Finds button element with ID 'dynamic-btn'
Button element located in DOM
—
PASS
4
Clicks the button
Button click triggers page update
—
FAIL
5
Catches StaleElementReferenceException, retries find and click
Button element refreshed in DOM
—
PASS
6
Clicks the refreshed button successfully
Button click triggers page update
—
PASS
7
Finds element with ID 'result-msg' and reads text
Result message displayed: 'Button clicked!'
Assert message text equals 'Button clicked!'
PASS
8
Test ends and browser closes
Browser closed
—
PASS
Failure Scenario
Failing Condition: Button element remains stale after 3 retries
Execution Trace Quiz - 3 Questions
Test your understanding
What exception does the test handle when the button becomes stale?
ATimeoutException
BNoSuchElementException
CStaleElementReferenceException
DElementNotInteractableException
Key Result
When elements on a page update dynamically, they can become stale. Handling StaleElementReferenceException by retrying element lookup and action helps make tests more reliable.
Practice
(1/5)
1.
What does StaleElementReferenceException mean in Selenium testing?
easy
A. The browser failed to open the webpage.
B. The element locator syntax is incorrect.
C. The element you found is no longer attached to the page DOM.
D. The test script has a syntax error.
Solution
Step 1: Understand what stale means in Selenium context
Stale means the element reference is outdated because the page changed after finding it.
Step 2: Match the meaning to the options
The element you found is no longer attached to the page DOM. correctly describes the element no longer attached to the DOM, which causes the exception.
Final Answer:
The element you found is no longer attached to the page DOM. -> Option C
Quick Check:
StaleElementReferenceException = element detached [OK]
Hint: Stale means element changed or removed from page [OK]
Common Mistakes:
Confusing stale with locator errors
Thinking it's a browser or syntax error
Assuming stale means element not found
2.
Which of the following is the correct way to catch StaleElementReferenceException in Python Selenium?
try:
element = driver.find_element(By.ID, 'submit')
element.click()
except _____:
element = driver.find_element(By.ID, 'submit')
element.click()
easy
A. StaleElementReferenceException
B. NoSuchElementException
C. TimeoutException
D. ElementNotInteractableException
Solution
Step 1: Identify the exception to catch for stale elements
The exception raised when an element is no longer attached is StaleElementReferenceException.
Step 2: Match the exception name in the except block
Only StaleElementReferenceException matches the exact exception to handle stale element references.
Final Answer:
StaleElementReferenceException -> Option A
Quick Check:
Catch stale element with StaleElementReferenceException [OK]
Hint: Catch exactly StaleElementReferenceException to retry [OK]
Common Mistakes:
Using wrong exception names
Catching unrelated exceptions
Not retrying after catching
3.
What will happen when this code runs if the element becomes stale after the first find?
A. The except block is skipped and nothing happens.
B. The button is clicked twice, then 'Clicked successfully' prints.
C. The code throws an error and stops before printing.
D. The button is clicked once, then 'Clicked successfully' prints.
Solution
Step 1: Understand the try-except flow with stale element
If the element is stale on first click, exception triggers except block to find and click again.
Step 2: Confirm the final print statement executes
After successful click in except, the print statement runs, confirming success.
Final Answer:
The button is clicked twice, then 'Clicked successfully' prints. -> Option B
Quick Check:
Retry click on stale element then print success [OK]
Hint: Retry click after stale exception to succeed [OK]
Common Mistakes:
Assuming code stops on exception
Thinking except block clicks twice
Ignoring the print statement
4.
Identify the error in this code snippet that tries to handle StaleElementReferenceException:
element = driver.find_element(By.ID, 'link')
try:
element.click()
except StaleElementReferenceException:
element.click()
medium
A. The except block retries click without finding the element again.
B. The try block should be inside the except block.
C. The exception name is misspelled.
D. The element locator is incorrect.
Solution
Step 1: Check how stale element is handled in except block
The except block retries click on the same old element without refinding it.
Step 2: Explain why this causes error
Since the element is stale, retrying click without finding again will raise the exception again.
Final Answer:
The except block retries click without finding the element again. -> Option A
Quick Check:
Must refind element before retrying click [OK]
Hint: Always find element again after stale exception [OK]
Common Mistakes:
Retrying action on stale element without refinding
Misplacing try-except blocks
Misspelling exception names
5.
You want to click a button that may reload the page, causing StaleElementReferenceException. Which approach best handles this?
def click_button():
for _ in range(3):
try:
btn = driver.find_element(By.ID, 'reload-btn')
btn.click()
break
except StaleElementReferenceException:
# What should go here?
pass
hard
A. Use a different locator that never becomes stale.
B. Raise the exception immediately to fail fast.
C. Ignore the exception and continue without clicking.
D. Add a short wait (e.g., time.sleep) before retrying to let page reload.
Solution
Step 1: Understand retry loop for stale element
The loop retries finding and clicking the button up to 3 times if stale exception occurs.
Step 2: Explain why adding a short wait helps
Waiting briefly allows the page to reload and stabilize, so the element can be found fresh on retry.
Final Answer:
Add a short wait (e.g., time.sleep) before retrying to let page reload. -> Option D
Quick Check:
Wait before retrying stale element to succeed [OK]
Hint: Wait briefly before retrying stale element actions [OK]
Common Mistakes:
Failing immediately without retry
Ignoring stale exception silently
Assuming locator never becomes stale
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.