Bird
Raised Fist0
Selenium Pythontesting~15 mins

Why evidence collection supports debugging in Selenium Python - Automation Benefits in Action

Choose your learning style10 modes available
Collect evidence during test failure for debugging
Preconditions (3)
Step 1: Open the web application login page
Step 2: Enter 'wronguser' in the username field
Step 3: Enter 'wrongpass' in the password field
Step 4: Click the login button
Step 5: Verify that the error message 'Invalid credentials' is displayed
Step 6: If the error message is not displayed, take a screenshot and save the page source
✅ Expected Result: The error message 'Invalid credentials' is displayed. If not, evidence (screenshot and page source) is collected for debugging.
Automation Requirements - Selenium with Python unittest
Assertions Needed:
Verify error message text is exactly 'Invalid credentials'
Verify screenshot and page source are saved when assertion fails
Best Practices:
Use explicit waits to wait for elements
Use try-except blocks to capture failures and collect evidence
Save evidence files with timestamped filenames
Use Page Object Model for element locators
Automated Solution
Selenium Python
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.

Common Mistakes - 4 Pitfalls
Using time.sleep() instead of explicit waits
Not catching exceptions to save evidence on failure
Hardcoding file names for screenshots
Locating elements directly in test methods instead of Page Object
Bonus Challenge

Now add data-driven testing with 3 different invalid username/password combinations

Show Hint

Practice

(1/5)
1. Why is collecting evidence like screenshots and logs important when debugging database tests in Selenium Python?
easy
A. It automatically fixes errors in the database.
B. It helps quickly find and fix problems by showing what happened during tests.
C. It replaces the need to write test cases.
D. It slows down the test execution and should be avoided.

Solution

  1. Step 1: Understand the role of evidence collection

    Evidence like screenshots and logs capture the state and actions during tests, providing clues about failures.
  2. Step 2: Connect evidence to debugging efficiency

    Having this information helps developers quickly identify where and why a problem happened, speeding up fixes.
  3. Final Answer:

    It helps quickly find and fix problems by showing what happened during tests. -> Option B
  4. Quick Check:

    Evidence collection = faster debugging [OK]
Hint: Remember: evidence shows what happened to fix issues fast [OK]
Common Mistakes:
  • Thinking evidence slows tests
  • Believing evidence replaces test cases
  • Assuming evidence fixes errors automatically
2. Which of the following is the correct way to save a screenshot in Selenium Python during a database test?
easy
A. driver.capture('image.png')
B. driver.take_screenshot('image.png')
C. driver.screenshot_save('image.png')
D. driver.save_screenshot('image.png')

Solution

  1. Step 1: Recall Selenium Python screenshot method

    The correct method to save a screenshot is save_screenshot on the driver object.
  2. Step 2: Verify method names

    Other options like take_screenshot, capture, or screenshot_save are not valid Selenium methods.
  3. Final Answer:

    driver.save_screenshot('image.png') -> Option D
  4. Quick Check:

    Correct method = save_screenshot [OK]
Hint: Use driver.save_screenshot() to capture images [OK]
Common Mistakes:
  • Using incorrect method names
  • Confusing screenshot with capture
  • Misspelling method names
3. Given this Selenium Python code snippet during a database test:
logs = driver.get_log('browser')
print(len(logs))

What does the output represent?
medium
A. The number of database rows returned by the query.
B. The number of screenshots taken.
C. The number of browser log entries collected during the test.
D. The number of errors fixed automatically.

Solution

  1. Step 1: Understand driver.get_log('browser')

    This command fetches browser console logs collected during the test run.
  2. Step 2: Interpret len(logs)

    Counting the logs with len(logs) gives how many log entries were captured.
  3. Final Answer:

    The number of browser log entries collected during the test. -> Option C
  4. Quick Check:

    len(logs) = count of browser logs [OK]
Hint: get_log('browser') returns browser console logs list [OK]
Common Mistakes:
  • Confusing logs with database rows
  • Thinking logs count screenshots
  • Assuming logs fix errors
4. You wrote this code to save a screenshot during a database test:
driver.screenshot('test.png')

But it raises an error. What is the problem?
medium
A. The method name is incorrect; it should be save_screenshot.
B. The file extension .png is not supported.
C. Screenshots cannot be saved during database tests.
D. The driver object is missing a required argument.

Solution

  1. Step 1: Check the method name used

    The method screenshot does not exist; the correct method is save_screenshot.
  2. Step 2: Confirm file extension and usage

    PNG is a valid format and screenshots can be saved during tests; no missing arguments needed here.
  3. Final Answer:

    The method name is incorrect; it should be save_screenshot. -> Option A
  4. Quick Check:

    Correct method = save_screenshot [OK]
Hint: Use save_screenshot, not screenshot, to save images [OK]
Common Mistakes:
  • Using wrong method name
  • Thinking .png is invalid
  • Assuming screenshots not allowed in DB tests
5. In a Selenium Python test for a database-driven web app, you want to collect evidence only when a test fails. Which approach best supports this?
hard
A. Use a try-except block to catch errors and save screenshots and logs only on failure.
B. Always save screenshots and logs regardless of test result to save time.
C. Skip evidence collection to speed up tests and rely on console messages.
D. Manually check the database after tests instead of collecting evidence.

Solution

  1. Step 1: Understand conditional evidence collection

    Collecting evidence only on failure saves storage and focuses debugging efforts.
  2. 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.
  3. Step 3: Evaluate other options

    Always saving wastes resources, skipping evidence loses info, and manual DB checks are slow and error-prone.
  4. Final Answer:

    Use a try-except block to catch errors and save screenshots and logs only on failure. -> Option A
  5. Quick Check:

    Try-except for conditional evidence = best practice [OK]
Hint: Save evidence only on failure using try-except [OK]
Common Mistakes:
  • Saving evidence always wastes resources
  • Skipping evidence loses debugging info
  • Relying on manual DB checks is slow
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard