We use pytest with Selenium to write and run browser tests easily. It helps check if websites work correctly.
pytest with Selenium setup in Selenium Python
Introduction
Syntax
Selenium Python
import pytest from selenium import webdriver @pytest.fixture def browser(): driver = webdriver.Chrome() yield driver driver.quit() def test_example(browser): browser.get('https://example.com') assert 'Example Domain' in browser.title
Use @pytest.fixture to set up and clean the browser before and after tests.
The yield keyword pauses the fixture to run the test, then continues to close the browser.
Examples
Selenium Python
import pytest from selenium import webdriver @pytest.fixture def browser(): driver = webdriver.Firefox() yield driver driver.quit()
Selenium Python
def test_google_title(browser): browser.get('https://google.com') assert 'Google' in browser.title
Sample Program
This test opens example.com and checks if the page title contains 'Example Domain'. The browser opens, runs the test, then closes.
Selenium Python
import pytest from selenium import webdriver @pytest.fixture def browser(): driver = webdriver.Chrome() yield driver driver.quit() def test_example_domain_title(browser): browser.get('https://example.com') assert 'Example Domain' in browser.title
Important Notes
Make sure you have the correct WebDriver installed (like chromedriver for Chrome).
Keep your WebDriver version compatible with your browser version.
Use pytest command in terminal to run tests.
Summary
pytest with Selenium helps automate browser tests easily.
Use fixtures to open and close browsers cleanly.
Write simple tests to check website titles or elements.
Practice
1. What is the main purpose of using
pytest fixtures in Selenium tests?easy
Solution
Step 1: Understand pytest fixtures role
Fixtures in pytest are used to prepare the test environment and clean up after tests, such as opening and closing browsers.Step 2: Match fixture purpose with Selenium tests
In Selenium tests, fixtures typically launch the browser before a test and close it after, ensuring clean test runs.Final Answer:
To set up and tear down the browser before and after tests -> Option AQuick Check:
Fixtures manage setup/cleanup = A [OK]
Hint: Fixtures handle setup and cleanup in tests [OK]
Common Mistakes:
- Confusing fixtures with assertions
- Thinking fixtures locate elements
- Assuming fixtures generate reports
2. Which of the following is the correct way to define a pytest fixture that opens a Chrome browser using Selenium?
easy
Solution
Step 1: Identify correct pytest fixture decorator
The correct decorator to define a fixture is@pytest.fixture.Step 2: Check function structure for setup and teardown
The function creates a driver, yields it for test use, then quits the driver after the test.Final Answer:
@pytest.fixture\ndef browser():\n driver = webdriver.Chrome()\n yield driver\n driver.quit() -> Option BQuick Check:
Use @pytest.fixture for fixtures = A [OK]
Hint: Always use @pytest.fixture decorator for fixtures [OK]
Common Mistakes:
- Missing @pytest.fixture decorator
- Using wrong decorator like @pytest.test
- Forgetting to quit the driver
3. Given the following pytest test code, what will be the output when running the test?
import pytest
from selenium import webdriver
@pytest.fixture
def browser():
driver = webdriver.Chrome()
yield driver
driver.quit()
def test_google_title(browser):
browser.get('https://www.google.com')
assert 'Google' in browser.titlemedium
Solution
Step 1: Analyze fixture and test function
The fixture opens Chrome, yields the driver, and quits after test. The test navigates to Google and asserts title contains 'Google'.Step 2: Understand expected behavior
Since Google page title contains 'Google', the assertion passes and test completes successfully.Final Answer:
Test passes if the browser opens Google and title contains 'Google' -> Option AQuick Check:
Title contains 'Google' means pass = B [OK]
Hint: Check page title contains expected text for pass [OK]
Common Mistakes:
- Assuming title is empty before page load
- Thinking driver.quit() runs before test
- Missing import statements
4. Identify the error in this pytest Selenium setup code:
import pytest
from selenium import webdriver
@pytest.fixture
def browser():
driver = webdriver.Chrome()
return driver
driver.quit()
def test_example(browser):
browser.get('https://example.com')
assert 'Example' in browser.titlemedium
Solution
Step 1: Check fixture function flow
The fixture returns driver before calling driver.quit(), so quit() never runs.Step 2: Understand impact on test
Without quitting, browser stays open, causing resource leaks and flaky tests.Final Answer:
driver.quit() is never called because it is after return -> Option CQuick Check:
Code after return is ignored = D [OK]
Hint: Put cleanup code after yield, not after return [OK]
Common Mistakes:
- Placing driver.quit() after return
- Confusing @pytest.test with @pytest.fixture
- Ignoring proper assertion syntax
5. You want to run a Selenium test with pytest that opens Firefox, navigates to a page, and checks a button is clickable. Which pytest fixture setup is best practice to ensure browser opens and closes properly?
hard
Solution
Step 1: Review proper fixture structure for setup and teardown
Best practice is to create driver, yield it for test use, then quit after test finishes.Step 2: Evaluate each option
@pytest.fixture def browser(): driver = webdriver.Firefox() yield driver driver.quit() correctly uses yield and calls quit after test. def browser(): driver = webdriver.Firefox() return driver driver.quit() quits after return (never runs). @pytest.fixture def browser(): driver = webdriver.Firefox() driver.quit() yield driver quits before yield (browser closed too early). @pytest.fixture def browser(): driver = webdriver.Firefox() yield driver never quits browser.Final Answer:
@pytest.fixture\ndef browser():\n driver = webdriver.Firefox()\n yield driver\n driver.quit() -> Option DQuick Check:
Yield before quit ensures proper cleanup = C [OK]
Hint: Yield driver, then quit after test for clean browser [OK]
Common Mistakes:
- Calling quit before yield
- Not quitting browser at all
- Using return instead of yield in fixture
Recommended
Ready to prove it?
Pass the test and this pattern moves unknown
10 questions ~5 mineasy hard
