Bird
Raised Fist0
Selenium Javatesting~5 mins

PageFactory initialization in Selenium Java - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is PageFactory in Selenium?
PageFactory is a class in Selenium that helps initialize web elements defined in a Page Object Model class, making tests easier to read and maintain.
Click to reveal answer
beginner
How do you initialize web elements using PageFactory in Java?
You call <code>PageFactory.initElements(driver, this);</code> inside the constructor of your page class to initialize all @FindBy annotated elements.
Click to reveal answer
beginner
What is the purpose of the @FindBy annotation?
It tells Selenium how to locate a web element on the page, such as by id, name, xpath, or css.
Click to reveal answer
intermediate
Why is PageFactory initialization preferred over traditional element locating?
PageFactory initializes elements only when they are used, improving performance and making the code cleaner and easier to maintain.
Click to reveal answer
beginner
What happens if you forget to call PageFactory.initElements() in your page class?
The web elements will not be initialized, causing NullPointerException when you try to interact with them.
Click to reveal answer
Which method is used to initialize web elements with PageFactory in Selenium Java?
AWebDriverWait.until();
Bdriver.findElement();
Cdriver.get();
DPageFactory.initElements(driver, this);
What annotation is used to locate elements in PageFactory?
A@FindBy
B@Locate
C@Element
D@WebElement
What will happen if you try to use a web element without initializing PageFactory?
ANullPointerException will occur.
BThe element will be found automatically.
CThe test will pass without issues.
DThe element will be ignored.
PageFactory initialization improves test code by:
AMaking tests slower
BMaking code harder to read
CInitializing elements lazily and improving readability
DRemoving the need for locators
Which of the following is NOT a valid locator strategy with @FindBy?
Aname
Bcolor
Cxpath
Did
Explain how PageFactory initialization works in Selenium and why it is useful.
Think about how PageFactory connects your page class fields to actual web elements.
You got /4 concepts.
    Describe the steps to create a Page Object class using PageFactory in Selenium Java.
    Focus on annotations, constructor, and usage.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using PageFactory.initElements() in Selenium Java?
      easy
      A. To execute JavaScript on the page
      B. To start the WebDriver session
      C. To initialize all WebElements annotated with @FindBy in a Page Object
      D. To close the browser after test execution

      Solution

      1. Step 1: Understand the role of PageFactory

        PageFactory is used to initialize WebElements in Page Object Model classes.
      2. Step 2: Purpose of initElements method

        The initElements method scans the class for @FindBy annotations and initializes those elements.
      3. Final Answer:

        To initialize all WebElements annotated with @FindBy in a Page Object -> Option C
      4. Quick Check:

        PageFactory.initElements initializes elements [OK]
      Hint: Remember: initElements sets up @FindBy elements [OK]
      Common Mistakes:
      • Confusing initElements with WebDriver start or stop
      • Thinking initElements executes JavaScript
      • Assuming initElements closes the browser
      2. Which of the following is the correct way to initialize PageFactory elements inside a constructor?
      easy
      A. PageFactory.initElements(driver, this);
      B. PageFactory.initElements(this, driver);
      C. initElements(driver, this);
      D. PageFactory.startElements(driver, this);

      Solution

      1. Step 1: Recall the method signature

        The correct method call is PageFactory.initElements(WebDriver driver, Object page).
      2. Step 2: Match parameters in constructor

        Inside the constructor, driver is passed first, then this refers to the current Page Object instance.
      3. Final Answer:

        PageFactory.initElements(driver, this); -> Option A
      4. Quick Check:

        Correct parameter order is driver, then this [OK]
      Hint: Remember method signature: driver first, then page object [OK]
      Common Mistakes:
      • Swapping driver and this parameters
      • Calling non-existent methods like startElements
      • Omitting PageFactory class name
      3. Given the following code snippet, what will be the output when loginButton.isDisplayed() is called after PageFactory initialization?
      public class LoginPage {
        @FindBy(id = "loginBtn")
        private WebElement loginButton;
      
        public LoginPage(WebDriver driver) {
          PageFactory.initElements(driver, this);
        }
      }
      
      // In test method:
      LoginPage page = new LoginPage(driver);
      boolean visible = page.loginButton.isDisplayed();
      System.out.println(visible);
      medium
      A. true if the element with id 'loginBtn' is visible on the page
      B. Compilation error due to missing getter for loginButton
      C. NullPointerException because loginButton is not initialized
      D. false always because loginButton is private

      Solution

      1. Step 1: Check field visibility modifier

        The loginButton is declared private, so it cannot be accessed directly from outside the LoginPage class in the test method.
      2. Step 2: Identify the compilation issue

        page.loginButton.isDisplayed() causes a compilation error; private fields require public getter methods for external access. PageFactory initializes the field but does not change its visibility.
      3. Final Answer:

        Compilation error due to missing getter for loginButton -> Option B
      4. Quick Check:

        Private fields need public getters for access [OK]
      Hint: PageFactory initializes private fields but Java visibility rules still apply [OK]
      Common Mistakes:
      • Assuming direct access to private fields works after PageFactory init
      • Expecting runtime false or NullPointerException instead of compile error
      • Believing PageFactory overrides Java access modifiers
      4. Identify the error in the following PageFactory initialization code:
      public class HomePage {
        @FindBy(name = "searchBox")
        WebElement searchInput;
      
        public HomePage(WebDriver driver) {
          initElements(driver, this);
        }
      }
      medium
      A. Incorrect locator strategy in @FindBy annotation
      B. Constructor should not have parameters
      C. WebElement should be private
      D. Missing PageFactory class before initElements method call

      Solution

      1. Step 1: Check method call syntax

        The method initElements must be called with the class name PageFactory as PageFactory.initElements(...).
      2. Step 2: Verify other code parts

        The locator strategy 'name' is valid, WebElement can be package-private, and constructor can have parameters.
      3. Final Answer:

        Missing PageFactory class before initElements method call -> Option D
      4. Quick Check:

        Always prefix initElements with PageFactory [OK]
      Hint: Always call PageFactory.initElements, not just initElements [OK]
      Common Mistakes:
      • Calling initElements without PageFactory prefix
      • Thinking locator strategy 'name' is invalid
      • Assuming WebElement must be private
      • Believing constructors cannot have parameters
      5. You want to create a Page Object for a login page with username and password fields and a login button. Which of the following is the best practice for initializing elements using PageFactory?
      hard
      A. Declare WebElements with @FindBy, initialize them in constructor using PageFactory.initElements(driver, this), and keep elements private
      B. Declare WebElements public without @FindBy, initialize manually in each test method
      C. Use @FindBy annotations but do not call PageFactory.initElements anywhere
      D. Initialize WebElements as static variables without PageFactory

      Solution

      1. Step 1: Understand Page Object best practices

        WebElements should be private and annotated with @FindBy for clear locators and encapsulation.
      2. Step 2: Proper initialization

        PageFactory.initElements(driver, this) should be called in the constructor to initialize elements automatically.
      3. Final Answer:

        Declare WebElements with @FindBy, initialize them in constructor using PageFactory.initElements(driver, this), and keep elements private -> Option A
      4. Quick Check:

        Private elements + @FindBy + initElements in constructor = best practice [OK]
      Hint: Use @FindBy + private + initElements in constructor [OK]
      Common Mistakes:
      • Making WebElements public exposing internals
      • Skipping PageFactory.initElements call
      • Initializing elements manually in tests
      • Using static WebElements without context
      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