Why evidence collection supports debugging in Selenium Python - Automation Benefits in Action
import unittest import os from datetime import datetime from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class LoginPage: def __init__(self, driver): self.driver = driver self.username_input = (By.ID, 'username') self.password_input = (By.ID, 'password') self.login_button = (By.ID, 'login-btn') self.error_message = (By.ID, 'error-msg') def enter_username(self, username): self.driver.find_element(*self.username_input).clear() self.driver.find_element(*self.username_input).send_keys(username) def enter_password(self, password): self.driver.find_element(*self.password_input).clear() self.driver.find_element(*self.password_input).send_keys(password) def click_login(self): self.driver.find_element(*self.login_button).click() def get_error_message_text(self): return self.driver.find_element(*self.error_message).text class TestLogin(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.get('https://example.com/login') self.wait = WebDriverWait(self.driver, 10) self.login_page = LoginPage(self.driver) if not os.path.exists('evidence'): os.makedirs('evidence') def tearDown(self): self.driver.quit() def save_evidence(self, name_prefix): timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') screenshot_path = f'evidence/{name_prefix}_screenshot_{timestamp}.png' page_source_path = f'evidence/{name_prefix}_page_source_{timestamp}.html' self.driver.save_screenshot(screenshot_path) with open(page_source_path, 'w', encoding='utf-8') as f: f.write(self.driver.page_source) def test_invalid_login_shows_error(self): self.login_page.enter_username('wronguser') self.login_page.enter_password('wrongpass') self.login_page.click_login() try: error_element = self.wait.until(EC.visibility_of_element_located(self.login_page.error_message)) error_text = error_element.text self.assertEqual(error_text, 'Invalid credentials') except Exception as e: self.save_evidence('invalid_login_failure') raise e if __name__ == '__main__': unittest.main()
This test script automates the manual test case to verify the error message on invalid login.
LoginPage class: Encapsulates element locators and actions for the login page, following the Page Object Model for maintainability.
TestLogin class: Sets up the browser, navigates to the login page, and runs the test.
The test enters wrong credentials, clicks login, and waits explicitly for the error message to appear.
If the error message is not found or text does not match, the test catches the exception, saves a screenshot and page source with a timestamped filename in an 'evidence' folder, then re-raises the exception to fail the test.
This evidence collection helps debugging by preserving the exact page state when the failure happened.
Now add data-driven testing with 3 different invalid username/password combinations
Practice
Solution
Step 1: Understand the role of evidence collection
Evidence like screenshots and logs capture the state and actions during tests, providing clues about failures.Step 2: Connect evidence to debugging efficiency
Having this information helps developers quickly identify where and why a problem happened, speeding up fixes.Final Answer:
It helps quickly find and fix problems by showing what happened during tests. -> Option BQuick Check:
Evidence collection = faster debugging [OK]
- Thinking evidence slows tests
- Believing evidence replaces test cases
- Assuming evidence fixes errors automatically
Solution
Step 1: Recall Selenium Python screenshot method
The correct method to save a screenshot issave_screenshoton the driver object.Step 2: Verify method names
Other options liketake_screenshot,capture, orscreenshot_saveare not valid Selenium methods.Final Answer:
driver.save_screenshot('image.png') -> Option DQuick Check:
Correct method = save_screenshot [OK]
- Using incorrect method names
- Confusing screenshot with capture
- Misspelling method names
logs = driver.get_log('browser')
print(len(logs))What does the output represent?
Solution
Step 1: Understand driver.get_log('browser')
This command fetches browser console logs collected during the test run.Step 2: Interpret len(logs)
Counting the logs withlen(logs)gives how many log entries were captured.Final Answer:
The number of browser log entries collected during the test. -> Option CQuick Check:
len(logs) = count of browser logs [OK]
- Confusing logs with database rows
- Thinking logs count screenshots
- Assuming logs fix errors
driver.screenshot('test.png')But it raises an error. What is the problem?
Solution
Step 1: Check the method name used
The methodscreenshotdoes not exist; the correct method issave_screenshot.Step 2: Confirm file extension and usage
PNG is a valid format and screenshots can be saved during tests; no missing arguments needed here.Final Answer:
The method name is incorrect; it should be save_screenshot. -> Option AQuick Check:
Correct method = save_screenshot [OK]
- Using wrong method name
- Thinking .png is invalid
- Assuming screenshots not allowed in DB tests
Solution
Step 1: Understand conditional evidence collection
Collecting evidence only on failure saves storage and focuses debugging efforts.Step 2: Use try-except to detect failures
A try-except block can catch exceptions during tests and trigger evidence saving only when errors occur.Step 3: Evaluate other options
Always saving wastes resources, skipping evidence loses info, and manual DB checks are slow and error-prone.Final Answer:
Use a try-except block to catch errors and save screenshots and logs only on failure. -> Option AQuick Check:
Try-except for conditional evidence = best practice [OK]
- Saving evidence always wastes resources
- Skipping evidence loses debugging info
- Relying on manual DB checks is slow
Ready to prove it?
Pass the test and this pattern moves unknown
