Taking a screenshot when a test fails helps you see what went wrong. It shows the exact page state at the failure moment.
Screenshot on failure in Selenium Python
try: # test steps assert condition except Exception as e: driver.save_screenshot('failure.png') raise e
Use driver.save_screenshot('filename.png') to save the current browser view.
Place screenshot code inside an exception block to capture failures only.
try: assert driver.title == 'Expected Title' except AssertionError: driver.save_screenshot('title_fail.png') raise
try: element = driver.find_element(By.ID, 'submit') element.click() except Exception: driver.save_screenshot('click_fail.png') raise
This test opens Google, searches for 'OpenAI', and checks the page title. If any step fails, it saves a screenshot named 'failure_screenshot.png' and prints a message.
from selenium import webdriver from selenium.webdriver.common.by import By import time def test_google_search(): driver = webdriver.Chrome() try: driver.get('https://www.google.com') time.sleep(1) # wait for page load assert 'Google' in driver.title search_box = driver.find_element(By.NAME, 'q') search_box.send_keys('OpenAI') search_box.submit() time.sleep(2) # wait for results assert 'OpenAI' in driver.title except Exception as e: driver.save_screenshot('failure_screenshot.png') print('Test failed, screenshot saved.') raise finally: driver.quit() if __name__ == '__main__': test_google_search()
Use meaningful screenshot file names with timestamps to avoid overwriting.
Make sure the folder where screenshots are saved exists or handle path creation.
Use explicit waits instead of sleep for more reliable tests.
Taking screenshots on failure helps find UI problems quickly.
Use try-except blocks to catch failures and save screenshots.
Review screenshots to understand what the user saw at failure time.
Practice
Solution
Step 1: Understand the role of screenshots in testing
Screenshots help testers see what the user saw when the test failed.Step 2: Identify the purpose of capturing screenshots on failure
They provide visual evidence to debug UI problems quickly.Final Answer:
To capture the current state of the web page for debugging -> Option AQuick Check:
Screenshot on failure = capture page state [OK]
- Thinking screenshots speed up tests
- Believing screenshots fix errors automatically
- Confusing screenshots with performance tools
Solution
Step 1: Recall Selenium Python screenshot method
The correct method to save a screenshot issave_screenshot().Step 2: Verify method names and syntax
Onlydriver.save_screenshot('error.png')matches Selenium's API.Final Answer:
driver.save_screenshot('error.png') -> Option AQuick Check:
Correct method name = save_screenshot [OK]
- Using camelCase instead of snake_case
- Using non-existent methods like capture or screenshotSave
- Missing parentheses or quotes
try:
driver.find_element(By.ID, 'submit').click()
except Exception as e:
driver.save_screenshot('fail.png')
print('Screenshot saved on failure')Solution
Step 1: Analyze try-except behavior on element not found
If element is missing, exception triggers except block.Step 2: Check actions in except block
Screenshot is saved and message printed: 'Screenshot saved on failure'.Final Answer:
Screenshot saved on failure -> Option DQuick Check:
Exception triggers screenshot and print [OK]
- Assuming test passes silently on failure
- Confusing syntax errors with runtime exceptions
- Ignoring the print statement inside except
try:
driver.find_element(By.NAME, 'login').click()
except:
driver.save_screenshot(failure.png)Solution
Step 1: Check save_screenshot argument syntax
Filename must be a string in quotes, but here it is unquoted.Step 2: Confirm exception handling and method name
Except syntax and method name are correct; only filename is wrong.Final Answer:
Missing quotes around filename in save_screenshot -> Option CQuick Check:
Filename must be a string in quotes [OK]
- Forgetting quotes around filename string
- Changing method name incorrectly
- Misusing except syntax
Solution
Step 1: Understand when to take screenshots
Screenshots should be taken only on failure, inside except block.Step 2: Use timestamp for unique filenames
Usingtime.time()in filename ensures unique screenshot names.Final Answer:
Use try-except around test steps, call driver.save_screenshot(f"fail_{time.time()}.png") in except -> Option BQuick Check:
Screenshot on failure with timestamp = try-except + formatted filename [OK]
- Taking screenshots before test steps always
- Saving screenshots outside exception handling
- Retrying tests without capturing failure screenshots
Ready to prove it?
Pass the test and this pattern moves unknown
