Bird
Raised Fist0
Selenium Pythontesting~20 mins

Test functions and classes in Selenium Python - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Selenium Test Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of a simple Selenium test function
What will be the test result when running this Selenium test function using pytest?
Selenium Python
from selenium import webdriver
from selenium.webdriver.common.by import By

def test_google_title():
    driver = webdriver.Chrome()
    driver.get('https://www.google.com')
    title = driver.title
    driver.quit()
    assert 'Google' in title
ATest fails because the URL is incorrect
BTest fails because driver.quit() is called before getting the title
CTest raises a NoSuchElementException
DTest passes because the page title contains 'Google'
Attempts:
2 left
💡 Hint
Think about what driver.title returns after loading the page.
❓ assertion
intermediate
1:30remaining
Correct assertion for checking element text
Which assertion correctly verifies that a web element's text is exactly 'Submit' in a Selenium test?
Selenium Python
element = driver.find_element(By.ID, 'submit-btn')
text = element.text
Aassert text is 'Submit'
Bassert 'Submit' in text
Cassert text == 'Submit'
Dassert text != 'Submit'
Attempts:
2 left
💡 Hint
Use the equality operator to check exact match.
🔧 Debug
advanced
2:30remaining
Identify the error in this Selenium test class
What error will occur when running this Selenium test class with pytest?
Selenium Python
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestLogin:
    def setup_method(self):
        self.driver = webdriver.Chrome()

    def teardown_method(self):
        self.driver.quit()

    def test_login(self):
        self.driver.get('https://example.com/login')
        username = self.driver.find_element(By.ID, 'username')
        password = self.driver.find_element(By.ID, 'password')
        username.send_keys('user')
        password.send_keys('pass')
        self.driver.find_element(By.ID, 'submit').click()
        assert 'Dashboard' in self.driver.title
ANoSuchElementException if elements are not found
BAttributeError because setup_method is not named correctly
CNo error, test runs and passes if page loads correctly
DTypeError due to missing self parameter in test_login
Attempts:
2 left
💡 Hint
Consider what happens if the page elements are missing or IDs are incorrect.
❓ framework
advanced
2:00remaining
Best practice for Selenium test class setup and teardown
Which code snippet correctly implements setup and teardown for a Selenium test class using pytest conventions?
A
class TestExample:
    def setUp(self):
        self.driver = webdriver.Chrome()
    def tearDown(self):
        self.driver.quit()
B
class TestExample:
    def setup_method(self):
        self.driver = webdriver.Chrome()
    def teardown_method(self):
        self.driver.quit()
C
class TestExample:
    def setup(self):
        self.driver = webdriver.Chrome()
    def teardown(self):
        self.driver.quit()
D
class TestExample:
    def before_all(self):
        self.driver = webdriver.Chrome()
    def after_all(self):
        self.driver.quit()
Attempts:
2 left
💡 Hint
Pytest uses setup_method and teardown_method for per-test setup/teardown.
🧠 Conceptual
expert
3:00remaining
Understanding test isolation in Selenium test classes
Why is it important to create a new WebDriver instance in the setup method before each test instead of reusing the same driver instance across multiple tests?
ATo ensure each test runs in a clean browser state, avoiding side effects from previous tests
BTo reduce the total test execution time by reusing browser sessions
CBecause WebDriver instances cannot be reused due to API limitations
DTo avoid memory leaks caused by closing the browser too often
Attempts:
2 left
💡 Hint
Think about how leftover data or state can affect test results.

Practice

(1/5)
1. What is the main purpose of using test functions and classes in Selenium Python testing?
easy
A. To organize tests clearly and run them easily
B. To make the code run faster
C. To avoid writing any assertions
D. To skip browser setup

Solution

  1. Step 1: Understand test organization

    Test functions and classes help group related tests logically.
  2. Step 2: Recognize ease of running tests

    Using classes and functions allows running tests easily with frameworks like unittest.
  3. Final Answer:

    To organize tests clearly and run them easily -> Option A
  4. Quick Check:

    Test organization = To organize tests clearly and run them easily [OK]
Hint: Tests group checks for clarity and easy running [OK]
Common Mistakes:
  • Thinking tests speed up code execution
  • Believing assertions are optional
  • Ignoring setup and teardown roles
2. Which of the following is the correct way to define a test method inside a unittest.TestCase class in Selenium Python?
easy
A. def test_example(self):
B. def example_test():
C. def TestExample(self):
D. def _test_example(self):

Solution

  1. Step 1: Recall unittest naming conventions

    Test methods must start with 'test' and accept 'self' as first parameter.
  2. Step 2: Check method definitions

    Only 'def test_example(self):' follows correct naming and signature.
  3. Final Answer:

    def test_example(self): -> Option A
  4. Quick Check:

    Method name starts with 'test' and has 'self' [OK]
Hint: Test methods start with 'test' and include self [OK]
Common Mistakes:
  • Omitting 'self' parameter
  • Not starting method name with 'test'
  • Using uppercase 'Test' prefix
3. What will be the output when running this test code snippet?
import unittest

class MyTest(unittest.TestCase):
    def test_pass(self):
        self.assertEqual(2 + 2, 4)

    def test_fail(self):
        self.assertTrue(False)

if __name__ == '__main__':
    unittest.main(exit=False)
medium
A. Both tests pass
B. One test passes, one test fails
C. Both tests fail
D. Syntax error occurs

Solution

  1. Step 1: Analyze test_pass method

    assertEqual(2 + 2, 4) is True, so test_pass passes.
  2. Step 2: Analyze test_fail method

    assertTrue(False) fails, so test_fail fails.
  3. Final Answer:

    One test passes, one test fails -> Option B
  4. Quick Check:

    One True, one False assertion = One test passes, one test fails [OK]
Hint: Check each assertion's truth to predict pass/fail [OK]
Common Mistakes:
  • Assuming all tests pass
  • Ignoring assertTrue(False) fails
  • Expecting syntax errors
4. Identify the error in this Selenium Python unittest code:
import unittest
from selenium import webdriver

class TestLogin(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()

    def test_login(self):
        self.driver.get('http://example.com')
        self.assertIn('Example', self.driver.title)

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
medium
A. webdriver.Chrome() requires path argument
B. Missing call to super() in setUp and tearDown
C. No error; code is correct
D. assertIn should be assertEquals

Solution

  1. Step 1: Review setup and teardown methods

    setUp creates driver; tearDown quits it properly.
  2. Step 2: Check assertion and webdriver usage

    assertIn checks substring in title correctly; webdriver.Chrome() works if driver is in PATH.
  3. Final Answer:

    No error; code is correct -> Option C
  4. Quick Check:

    Standard unittest setup and teardown used [OK]
Hint: Check if setup/teardown and assertions follow unittest rules [OK]
Common Mistakes:
  • Assuming webdriver.Chrome() always needs path
  • Confusing assertIn with assertEquals
  • Forgetting to quit driver in tearDown
5. You want to run multiple Selenium tests that share the same browser setup and cleanup. Which unittest structure best achieves this?
hard
A. Call unittest.main() inside each test method
B. Write separate test functions without any setup or teardown
C. Create a new webdriver instance inside each test method
D. Use a TestCase class with setUpClass and tearDownClass class methods

Solution

  1. Step 1: Understand shared setup/cleanup needs

    setUpClass and tearDownClass run once for all tests in a class, ideal for shared browser setup.
  2. Step 2: Evaluate other options

    Separate functions lack shared setup; new webdriver per test is inefficient; unittest.main() runs all tests, not per method.
  3. Final Answer:

    Use a TestCase class with setUpClass and tearDownClass class methods -> Option D
  4. Quick Check:

    Shared setup/cleanup = setUpClass/tearDownClass [OK]
Hint: Use setUpClass/tearDownClass for shared browser setup [OK]
Common Mistakes:
  • Creating driver in each test wastes resources
  • Calling unittest.main() multiple times causes errors
  • Skipping setup causes flaky tests
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