A base page class helps keep your test code clean and organized by putting common web page actions in one place.
Base page class in Selenium Python
class BasePage: def __init__(self, driver): self.driver = driver def find_element(self, locator): return self.driver.find_element(*locator) def click(self, locator): element = self.find_element(locator) element.click() def type_text(self, locator, text): element = self.find_element(locator) element.clear() element.send_keys(text)
The driver is the browser control object from Selenium.
Locators are usually tuples like (By.ID, 'element_id').
from selenium.webdriver.common.by import By class BasePage: def __init__(self, driver): self.driver = driver def find_element(self, locator): return self.driver.find_element(*locator)
def click(self, locator):
element = self.find_element(locator)
element.click()def type_text(self, locator, text):
element = self.find_element(locator)
element.clear()
element.send_keys(text)This script opens a browser, navigates to example.com, and tries to type and click using the base page methods. It prints if the test passed or failed.
from selenium import webdriver from selenium.webdriver.common.by import By import time class BasePage: def __init__(self, driver): self.driver = driver def find_element(self, locator): return self.driver.find_element(*locator) def click(self, locator): element = self.find_element(locator) element.click() def type_text(self, locator, text): element = self.find_element(locator) element.clear() element.send_keys(text) # Example usage: if __name__ == '__main__': driver = webdriver.Chrome() driver.get('https://www.example.com') base_page = BasePage(driver) # Example locators (these won't work on example.com, just for demo) search_box = (By.NAME, 'q') search_button = (By.NAME, 'btnK') try: base_page.type_text(search_box, 'Selenium') base_page.click(search_button) print('Test passed: Typed text and clicked button') except Exception as e: print(f'Test failed: {e}') finally: time.sleep(2) driver.quit()
Always pass the Selenium driver to the base page class when creating it.
Use locator tuples like (By.ID, 'id_value') for better readability and maintainability.
Handle exceptions in your tests to know if an element was not found or an action failed.
A base page class groups common web page actions to avoid repeating code.
It makes tests easier to write, read, and update.
Use locator tuples and pass the driver to the base page class.
Practice
BasePage class in Selenium Python testing?Solution
Step 1: Understand the role of BasePage
The BasePage class is designed to hold common actions and locators shared by multiple page classes.Step 2: Compare with other options
Storing test data, browser settings, or generating reports are not responsibilities of BasePage.Final Answer:
To group common web page actions and locators for reuse -> Option AQuick Check:
BasePage groups common actions [OK]
- Confusing BasePage with test data storage
- Thinking BasePage manages browser setup
- Assuming BasePage creates reports
Solution
Step 1: Recall locator tuple syntax
Locator tuples use the format (By.<METHOD>, 'value'), e.g., (By.ID, 'submit').Step 2: Check each option
submit_button = (By.ID, 'submit') matches the tuple format. The other options use wrong data structures or invalid syntax.Final Answer:
submit_button = (By.ID, 'submit') -> Option AQuick Check:
Locator tuple = (By.METHOD, 'value') [OK]
- Using lists or dicts instead of tuples for locators
- Calling By.ID as a function
- Missing parentheses around locator tuple
page.get_title() return if the browser's current page title is "Welcome Page"?
class BasePage:
def __init__(self, driver):
self.driver = driver
def get_title(self):
return self.driver.title
page = BasePage(driver)Solution
Step 1: Understand get_title method
The method returnsself.driver.title, which is the current page title string.Step 2: Check given title
The browser's current page title is "Welcome Page", so the method returns that string.Final Answer:
"Welcome Page" -> Option DQuick Check:
get_title returns driver.title = "Welcome Page" [OK]
- Thinking it returns the driver object
- Assuming no return means None
- Confusing method with attribute
class BasePage:
def __init__(self, driver):
self.driver = driver
def click_element(locator):
element = self.driver.find_element(*locator)
element.click()Solution
Step 1: Check method parameters
Instance methods must have 'self' as the first parameter. Here, click_element lacks 'self'.Step 2: Understand impact
Without 'self', calling click_element will cause a TypeError because 'self.driver' is undefined.Final Answer:
Missing 'self' parameter in click_element method -> Option BQuick Check:
Instance methods need 'self' first [OK]
- Forgetting 'self' in instance methods
- Confusing find_element with find_elements
- Misunderstanding locator types
- Using method call without parentheses
is_element_visible that returns True if an element is visible and False if not, without raising exceptions. Which is the best way to implement it?Solution
Step 1: Understand element visibility check
Usingfind_elementraises NoSuchElementException if element not found, so we must handle it.Step 2: Use try-except for safe check
Try to find element and checkis_displayed(). If exception occurs, return False safely.Final Answer:
Use try-except to catch NoSuchElementException and return False if caught -> Option CQuick Check:
Try-except handles missing element safely [OK]
- Not handling exceptions causing test failure
- Assuming find_elements always returns visible elements
- Searching page_source is unreliable and slow
Ready to prove it?
Pass the test and this pattern moves unknown
