Why test frameworks structure execution in Selenium Python - Automation Benefits in Action
import unittest 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 TestLogin(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.maximize_window() self.wait = WebDriverWait(self.driver, 10) def test_login_success(self): driver = self.driver driver.get('https://example.com/login') email_input = self.wait.until(EC.visibility_of_element_located((By.ID, 'email'))) email_input.send_keys('user@example.com') password_input = driver.find_element(By.ID, 'password') password_input.send_keys('Password123') login_button = driver.find_element(By.ID, 'loginBtn') login_button.click() # Wait for dashboard URL self.wait.until(EC.url_to_be('https://example.com/dashboard')) self.assertEqual(driver.current_url, 'https://example.com/dashboard') # Verify welcome message welcome_msg = self.wait.until(EC.visibility_of_element_located((By.ID, 'welcomeMsg'))) self.assertIn('Welcome, user!', welcome_msg.text) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
This test script uses the unittest framework to structure the test execution clearly. The setUp method opens the browser and prepares the wait object. The test method test_login_success performs the login steps exactly as described in the manual test case.
Explicit waits ensure the script waits for elements to appear or the URL to change before proceeding. This avoids timing issues.
Assertions check that the URL is correct and the welcome message is displayed, confirming successful login.
The tearDown method closes the browser after the test, keeping tests isolated and clean.
This structure helps keep tests organized, easy to read, and reliable, which is why test frameworks structure execution this way.
Now add data-driven testing with 3 different sets of login credentials (valid and invalid) to verify login behavior.
Practice
Solution
Step 1: Understand setup and teardown roles
Setup prepares the environment before a test, and teardown cleans up after it.Step 2: Recognize automation benefits
Automating these steps ensures tests run reliably and independently without manual work.Final Answer:
To prepare and clean the test environment automatically for each test -> Option AQuick Check:
Setup and teardown automate environment prep = D [OK]
- Thinking setup slows tests
- Believing tests run without code
- Confusing skipping tests with setup
Solution
Step 1: Recall pytest setup naming conventions
Pytest uses setup_method(self, method) for setup before each test method.Step 2: Check other options for correctness
Options A and D have wrong names or casing; B is unittest style, not pytest.Final Answer:
def setup_method(self, method): -> Option BQuick Check:
Pytest setup method = setup_method [OK]
- Using unittest setup names in pytest
- Wrong method name casing
- Missing method parameter 'method'
import pytest
class TestExample:
def setup_method(self):
print('Setup')
def teardown_method(self):
print('Teardown')
def test_one(self):
print('Test One')
assert True
def test_two(self):
print('Test Two')
assert True
Solution
Step 1: Understand pytest setup/teardown per test
setup_method runs before each test, teardown_method after each test.Step 2: Trace print statements in order
For test_one: Setup, Test One, Teardown; for test_two: Setup, Test Two, Teardown.Final Answer:
Setup\nTest One\nTeardown\nSetup\nTest Two\nTeardown -> Option AQuick Check:
Setup and teardown run before/after each test = A [OK]
- Assuming setup runs once for all tests
- Missing teardown prints
- Thinking tests run without setup/teardown
class TestSample:
def setup(self):
print('Setup running')
def test_check(self):
assert True
Solution
Step 1: Identify pytest setup method naming
Pytest expects setup_method(self) for setup before each test method.Step 2: Check method name correctness
Using 'setup' alone is not recognized by pytest, so setup is not called.Final Answer:
Method name should be setup_method, not setup -> Option CQuick Check:
Pytest setup method must be setup_method [OK]
- Using unittest setup name in pytest
- Forgetting 'self' parameter
- Wrong test method naming
Solution
Step 1: Understand test isolation importance
Each test should run independently to avoid interference from others.Step 2: Recognize setup/teardown role in isolation
Setup prepares a clean state; teardown cleans resources so tests don't affect each other.Final Answer:
It ensures each test starts fresh and cleans up, preventing side effects -> Option DQuick Check:
Setup/teardown keep tests isolated and clean = A [OK]
- Thinking tests share browser state for speed
- Believing tests run randomly by setup
- Assuming failing tests are skipped automatically
Ready to prove it?
Pass the test and this pattern moves unknown
