Bird
Raised Fist0
Selenium Pythontesting~20 mins

Fixtures for browser setup/teardown in Selenium Python - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Browser Fixture Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of pytest fixture with browser setup
What will be the output of the following pytest test when run?

Note: The fixture opens a browser, navigates to example.com, then closes the browser after the test.
Selenium Python
import pytest
from selenium import webdriver

@pytest.fixture
 def browser():
  driver = webdriver.Chrome()
  driver.get('https://example.com')
  yield driver
  driver.quit()

def test_title(browser):
  assert 'Example Domain' in browser.title
  print('Test Passed')
ATest Passed printed and test passes
BTest Passed printed but test fails with AssertionError
CNo output printed, test passes silently
DTest fails with WebDriverException due to missing driver
Attempts:
2 left
💡 Hint
The fixture yields the driver after opening the page, so the test can access the page title.
❓ assertion
intermediate
2:00remaining
Correct assertion to verify browser is closed after test
Given a pytest fixture that opens and closes a browser, which assertion correctly verifies the browser is closed after the test?
Selenium Python
import pytest
from selenium import webdriver

@pytest.fixture
 def browser():
  driver = webdriver.Chrome()
  yield driver
  driver.quit()

def test_browser_closed(browser):
  pass  # Which assertion below is correct here?
Aassert browser.current_url == ''
Bassert browser.session_id is None
Cassert browser.title == ''
Dassert browser is None
Attempts:
2 left
💡 Hint
When the browser is closed, the session_id becomes None.
🔧 Debug
advanced
2:00remaining
Identify the bug in fixture teardown
What is the bug in this pytest fixture for browser setup and teardown?
Selenium Python
import pytest
from selenium import webdriver

@pytest.fixture
 def browser():
  driver = webdriver.Chrome()
  driver.get('https://example.com')
  yield driver
  driver.close()  # Bug here

def test_example(browser):
  assert 'Example Domain' in browser.title
Adriver.close() closes only the current window, not the browser session, causing resource leaks
Bdriver.close() raises an exception because it is called after yield
Cdriver.close() should be replaced with driver.quit() to avoid syntax error
DNo bug, the fixture works correctly
Attempts:
2 left
💡 Hint
driver.close() and driver.quit() behave differently in Selenium.
❓ framework
advanced
2:00remaining
Best practice for browser fixture scope in pytest
Which pytest fixture scope is best to use for browser setup/teardown to speed up multiple UI tests without side effects?
Ascope='class' to open browser once per test class
Bscope='function' to open and close browser for each test function
Cscope='module' to open browser once per test module
Dscope='session' to open browser once per test session
Attempts:
2 left
💡 Hint
Consider test isolation and speed trade-offs.
🧠 Conceptual
expert
2:00remaining
Why use yield in pytest fixtures for browser setup?
Why is the yield statement preferred over return in pytest fixtures that setup and teardown a browser?
AYield returns the browser object faster than return
BReturn cannot be used in fixtures, only yield is allowed
CReturn causes the fixture to run multiple times, yield runs once
DYield allows running teardown code after the test finishes, return does not
Attempts:
2 left
💡 Hint
Think about how pytest manages setup and teardown with fixtures.

Practice

(1/5)
1. What is the main purpose of using a fixture for browser setup and teardown in Selenium tests?
easy
A. To avoid using assertions in tests
B. To write test cases faster without any setup
C. To automate opening and closing the browser before and after tests
D. To run tests only on one browser type

Solution

  1. Step 1: Understand fixture role

    Fixtures help prepare the environment before tests and clean up after tests.
  2. Step 2: Apply to browser context

    In Selenium, this means opening the browser before tests and closing it after.
  3. Final Answer:

    To automate opening and closing the browser before and after tests -> Option C
  4. Quick Check:

    Fixture = setup + teardown automation [OK]
Hint: Fixtures handle setup and cleanup automatically [OK]
Common Mistakes:
  • Thinking fixtures replace test cases
  • Believing fixtures remove need for assertions
  • Assuming fixtures limit browser types
2. Which of the following is the correct way to define a pytest fixture for browser setup and teardown using yield?
easy
A. def browser(): driver = webdriver.Chrome() yield driver driver.quit()
B. def browser(): driver = webdriver.Chrome() driver.quit() yield driver
C. def browser(): yield webdriver.Chrome() driver.quit()
D. def browser(): driver = webdriver.Chrome() driver.close() yield driver

Solution

  1. Step 1: Understand yield usage in fixtures

    Yield separates setup (before yield) and teardown (after yield).
  2. Step 2: Check correct order

    Setup: create driver; yield it; teardown: quit driver.
  3. Final Answer:

    def browser(): driver = webdriver.Chrome() yield driver driver.quit() -> Option A
  4. Quick Check:

    Setup before yield, teardown after yield [OK]
Hint: Setup before yield, teardown after yield in fixture [OK]
Common Mistakes:
  • Calling quit before yield
  • Using driver.close() instead of driver.quit() for teardown
  • Yielding before creating driver
3. Given this fixture and test code, what will be printed when the test runs?
import pytest
from selenium import webdriver

@pytest.fixture
def browser():
    driver = webdriver.Chrome()
    print('Setup browser')
    yield driver
    print('Teardown browser')
    driver.quit()

def test_example(browser):
    print('Running test')
medium
A. Running test only
B. Running test\nSetup browser\nTeardown browser
C. Setup browser\nTeardown browser\nRunning test
D. Setup browser\nRunning test\nTeardown browser

Solution

  1. Step 1: Trace fixture execution order

    Fixture runs setup code before yield, then test runs, then fixture runs teardown after yield.
  2. Step 2: Match print statements order

    Prints 'Setup browser', then 'Running test', then 'Teardown browser'.
  3. Final Answer:

    Setup browser\nRunning test\nTeardown browser -> Option D
  4. Quick Check:

    Setup -> Test -> Teardown order [OK]
Hint: Fixture setup prints before test, teardown prints after [OK]
Common Mistakes:
  • Assuming teardown runs before test
  • Ignoring yield separates setup and teardown
  • Thinking prints run all before test
4. What is wrong with this fixture code for browser setup and teardown?
@pytest.fixture
def browser():
    driver = webdriver.Chrome()
    driver.quit()
    yield driver
medium
A. Missing import statement for webdriver
B. Calling driver.quit() before yield closes browser too early
C. Yield should be inside a try-except block
D. Fixture should return driver instead of yield

Solution

  1. Step 1: Analyze order of operations

    driver.quit() is called before yield, so browser closes before test uses it.
  2. Step 2: Understand yield role

    Yield should come before teardown to keep browser open during test.
  3. Final Answer:

    Calling driver.quit() before yield closes browser too early -> Option B
  4. Quick Check:

    Teardown must be after yield [OK]
Hint: Teardown code must be after yield in fixture [OK]
Common Mistakes:
  • Calling quit before yield
  • Confusing yield with return
  • Ignoring fixture import requirements
5. You want to run multiple tests using the same browser instance to save time. How should you modify the fixture to achieve this?
hard
A. Change fixture scope to 'module' so browser opens once per module
B. Add driver.quit() before yield to close browser early
C. Remove yield and return driver directly
D. Create a new fixture for each test to isolate browser

Solution

  1. Step 1: Understand fixture scopes

    Default scope is 'function' which runs fixture per test; 'module' runs once per file.
  2. Step 2: Apply scope to reuse browser

    Setting scope='module' opens browser once for all tests in module, saving time.
  3. Final Answer:

    Change fixture scope to 'module' so browser opens once per module -> Option A
  4. Quick Check:

    Fixture scope controls reuse [OK]
Hint: Use scope='module' to share browser across tests [OK]
Common Mistakes:
  • Closing browser before tests run
  • Removing yield breaks setup/teardown
  • Creating new fixture per test wastes time
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