Bird
Raised Fist0
Selenium Pythontesting~5 mins

Page factory pattern in Selenium Python - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the Page Factory pattern in Selenium?
Page Factory is a design pattern in Selenium that helps initialize web elements easily using annotations, making tests cleaner and easier to maintain.
Click to reveal answer
beginner
How do you declare a web element using Page Factory in Python?
You define locators as class attributes using tuples with By, and use the @property decorator to lazily locate and return elements when first accessed.
Click to reveal answer
intermediate
Why is Page Factory pattern preferred over traditional element locating?
Because it reduces code duplication, improves readability, and initializes elements only when they are used, which can improve test performance.
Click to reveal answer
intermediate
What is the role of lazy initialization in Page Factory?
It initializes web elements lazily when accessed so they can be used directly without calling find_element repeatedly each time.
Click to reveal answer
beginner
Give a simple example of a Page Factory class in Selenium Python.
from selenium.webdriver.common.by import By

class LoginPage:
    username_loc = (By.ID, 'username')
    password_loc = (By.ID, 'password')
    login_button_loc = (By.ID, 'login')

    def __init__(self, driver):
        self.driver = driver

    @property
    def username(self):
        return self.driver.find_element(*self.username_loc)

    @property
    def password(self):
        return self.driver.find_element(*self.password_loc)

    @property
    def login_button(self):
        return self.driver.find_element(*self.login_button_loc)

    def login(self, user, pwd):
        self.username.send_keys(user)
        self.password.send_keys(pwd)
        self.login_button.click()
Click to reveal answer
What does the Page Factory pattern help with in Selenium?
AWriting SQL queries
BManaging browser cookies
CCreating database connections
DInitializing web elements efficiently
Which is used to lazily initialize elements in Page Factory (Python)?
A@property
Bstart_elements
Cload_elements
Dcreate_elements
In Page Factory, when are web elements initialized?
AOnly when they are used
BAt the start of the test suite
CAfter the test finishes
DBefore the browser opens
Which of these is NOT a benefit of using Page Factory?
AAutomatic element initialization
BFaster test execution by skipping element checks
CImproved code readability
DReduced code duplication
What is the main purpose of locators in Page Factory?
ATo generate reports
BTo store test data
CTo find web elements on the page
DTo manage browser sessions
Explain the Page Factory pattern and how it improves Selenium test code.
Think about how you find elements in Selenium and how Page Factory changes that.
You got /3 concepts.
    Describe how you would implement a login page using the Page Factory pattern in Selenium Python.
    Imagine the steps a user takes to log in and how to automate them.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using the Page Factory pattern in Selenium with Python?
      easy
      A. To generate test reports automatically
      B. To execute tests faster by parallel processing
      C. To group web elements in a class for easier access and maintenance
      D. To handle browser pop-ups and alerts

      Solution

      1. Step 1: Understand the role of Page Factory

        Page Factory helps organize web elements by grouping them in a class, making tests easier to read and maintain.
      2. Step 2: Compare with other options

        Options B, C, and D describe different Selenium features unrelated to Page Factory's main purpose.
      3. Final Answer:

        To group web elements in a class for easier access and maintenance -> Option C
      4. Quick Check:

        Page Factory = Group elements for easy access [OK]
      Hint: Page Factory groups elements in classes for neat tests [OK]
      Common Mistakes:
      • Confusing Page Factory with test execution speed
      • Thinking it generates reports
      • Assuming it handles browser alerts
      2. Which of the following is the correct way to declare a web element using Page Factory in Selenium Python?
      easy
      A. element = driver.find_element(By.ID, 'username')
      B. username = (By.ID, 'username')
      C. username = self.driver.find_element_by_id('username')
      D. username = self.driver.find_element(By.ID, 'username')

      Solution

      1. Step 1: Identify Page Factory syntax in Python

        Page Factory uses class attributes with locator tuples like (By.ID, 'username') to declare elements before initializing them.
      2. Step 2: Check each option

        username = (By.ID, 'username') shows the correct locator tuple usage, which is standard in Page Factory.
      3. Final Answer:

        username = (By.ID, 'username') -> Option B
      4. Quick Check:

        Page Factory uses locator tuples (By.xx, 'value') [OK]
      Hint: Declare Page Factory elements as (By.xx, 'value') tuples [OK]
      Common Mistakes:
      • Using direct driver.find_element calls instead of Page Factory declarations
      • Missing the locator tuple syntax
      • Assigning elements directly without initialization
      3. Given the following code snippet using Page Factory in Selenium Python, what will be the output of print(page.login_button.is_displayed()) if the button is visible on the page?
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.page_factory import PageFactory
      
      class LoginPage:
          def __init__(self, driver):
              self.driver = driver
              PageFactory.init_elements(driver, self)
      
          login_button = (By.ID, 'loginBtn')
      
      page = LoginPage(driver)
      print(page.login_button.is_displayed())
      medium
      A. True
      B. False
      C. AttributeError
      D. None

      Solution

      1. Step 1: Understand Page Factory element initialization

        PageFactory.init_elements initializes elements so login_button refers to the actual web element.
      2. Step 2: Check the method call

        If the button is visible, is_displayed() returns True, so printing it outputs True.
      3. Final Answer:

        True -> Option A
      4. Quick Check:

        Visible element's is_displayed() = True [OK]
      Hint: is_displayed() returns True if element is visible [OK]
      Common Mistakes:
      • Expecting None because locator needs initialization
      • Confusing AttributeError due to wrong initialization
      • Assuming is_displayed() returns string
      4. Identify the error in the following Page Factory code snippet and choose the correct fix:
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.page_factory import PageFactory
      
      class HomePage:
          def __init__(self, driver):
              self.driver = driver
              PageFactory.init_elements(self, self.driver)
      
          submit_button = (By.XPATH, "//button[@id='submit']")
      
      page = HomePage(driver)
      page.submit_button.click()
      medium
      A. Initialize elements with PageFactory.init_elements(driver, self)
      B. Replace @FindBy with @find_by (lowercase)
      C. Import FindBy from correct module and use it as decorator
      D. Import and use find_element instead of PageFactory

      Solution

      1. Step 1: Check PageFactory.init_elements arguments

        The code uses PageFactory.init_elements(self, self.driver) but arguments must be driver first, then self.
      2. Step 2: Confirm correct usage

        Using PageFactory.init_elements(driver, self) fixes the error and allows proper element initialization.
      3. Final Answer:

        Initialize elements with PageFactory.init_elements(driver, self) -> Option A
      4. Quick Check:

        init_elements(driver, self) order [OK]
      Hint: PageFactory.init_elements(driver, self) - driver first [OK]
      Common Mistakes:
      • Wrong argument order for PageFactory.init_elements
      • Using wrong decorator name case
      • Incorrect PageFactory.init_elements parameters
      5. You want to create a Page Factory class for a login page with username, password fields, and a login button. Which approach correctly applies the Page Factory pattern to initialize and use these elements in Selenium Python?
      hard
      A. Write all element locators inside test functions without any class or decorator
      B. Use driver.find_element calls inside each test method without class grouping
      C. Create global variables for elements outside any class and access them directly
      D. Declare elements with @FindBy decorators, initialize with PageFactory.init_elements, then use element methods

      Solution

      1. Step 1: Understand Page Factory best practice

        Page Factory groups elements in a class using locator tuples and initializes them with PageFactory.init_elements.
      2. Step 2: Compare with other options

        Options B, C, and D do not use Page Factory pattern and lead to less maintainable code.
      3. Final Answer:

        Declare elements with @FindBy decorators, initialize with PageFactory.init_elements, then use element methods -> Option D
      4. Quick Check:

        Page Factory = locators + init_elements + class grouping [OK]
      Hint: Use locators and init_elements to organize page elements [OK]
      Common Mistakes:
      • Skipping class and locators for elements
      • Using driver calls directly in tests
      • Not initializing elements with PageFactory
      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