Testleaf

Mastering Page Object Model (POM) in Selenium: A Practical Guide with Real Examples

Mastering Page Object Model (POM) in Selenium

Introduction

What’s the best way to build scalable and maintainable Selenium tests?

If your test scripts are hard to manage or break with every UI update, it’s time to implement a proven design pattern—Page Object Model (POM).

In today’s Agile + DevOps-driven world, test automation isn’t optional. And for Selenium automation frameworks, POM brings modularity, maintainability, and reusability to the forefront.

In this in-depth guide, you’ll learn:

Let’s refactor your test code the smart way.

What is Page Object Model (POM)? 

The Page Object Model (POM) is a design pattern used in Selenium test automation to create a clear and structured separation between test scripts and web page-specific elements and behaviors. It suggests that for every page in the application under test, you create a corresponding Java class (or class in any other supported language). This class acts as a representation of the UI page and contains all the WebElements and methods that simulate user actions on that page. 

This approach means that any changes to the UI — such as changing a button ID or a label — require updates in only one place, not across dozens of test scripts. POM serves as a single source of truth for each page’s elements and functionality, promoting clean architecture and robust automation. 

Recommended for You: infosys interview questions for automation testing

Why Use Page Object Model in Selenium?

1. Enhancing Maintainability

With POM, each page’s elements are centralized in one class. So, when the locator changes, you update it in a single place, and the change automatically reflects across all your test cases. This leads to cleaner, more resilient code that adapts to applications changing quickly. 

2. Improving Reusability

POM encourages the creation of modular code, where each method performs a single task. These methods can then be reused across multiple test scenarios. This avoids duplication and makes the codebase leaner and more maintainable. 

3. Scaling with the Application

As your application grows, POM scales effortlessly. Each new page simply becomes a new page for class. The modular structure makes it easy to integrate new features without disrupting existing ones. 

Selenium training in chennai

4. Boosting Readability

Test scripts using POM are easy to read and follow. Since the actual interaction logic is abstracted into the page classes, the test cases focus only on what to validate. This makes test scripts highly descriptive and readable, even for non-technical stakeholders. 

5. Enabling Better Team Collaboration

POM promotes a clear division of responsibilities. Developers can update UI locators or structure within the page classes, while test engineers can focus on writing or updating test scenarios. This reduces friction and improves team efficiency. 

Other Useful Guides: Top 10 Service-Based IT Companies in Chennai

How Page Object Model Works: Folder & Class Structure

Imagine a banking application with three primary pages: Login Page, Dashboard Page, and Transfer Funds Page. In POM, each of these pages will be represented by a separate Java class. These classes will contain all the element locators and actions specific to their respective pages. 

Structure: 

com.bank.pages 

   ├── LoginPage.java 

   ├── DashboardPage.java 

   └── TransferFundsPage.java 

com.bank.tests 

   └── LoginTest.java 

Real-Time Example: Login Page Implementation 

LoginPage.java 

public class LoginPage { 

    WebDriver driver; 

 

    By usernameField = By.id(“username”); 

    By passwordField = By.id(“password”); 

    By loginButton = By.id(“loginBtn”); 

 

    public LoginPage(WebDriver driver) { 

        this.driver = driver; 

    } 

 

    public void enterUsername(String username) { 

        driver.findElement(usernameField).sendKeys(username); 

    } 

 

    public void enterPassword(String password) { 

        driver.findElement(passwordField).sendKeys(password); 

    } 

 

    public void clickLogin() { 

        driver.findElement(loginButton).click(); 

    } 

 

    public void loginToApplication(String user, String pass) { 

        enterUsername(user); 

        enterPassword(pass); 

        clickLogin(); 

    } 

} 

LoginTest.java 

public class LoginTest extends BaseTest { 

 

    @Test 

    public void validateLoginFunctionality() { 

        LoginPage loginPage = new LoginPage(driver); 

        loginPage.loginToApplication(“admin”, “admin123”); 

 

        Assert.assertTrue(driver.getTitle().contains(“Dashboard”)); 

    } 

} 

Teaching

PageFactory in Selenium: A Smarter Way to Define Elements

Selenium provides a helper class called PageFactory. This enables the use of @FindBy annotations to locate and initialize elements. 

public class LoginPage {

    WebDriver driver;

    @FindBy(id = “username”)

    WebElement usernameField;

    @FindBy(id = “password”)

    WebElement passwordField;

    @FindBy(id = “loginBtn”)

    WebElement loginButton;

    public LoginPage(WebDriver driver) {

        this.driver = driver;

        PageFactory.initElements(driver, this);

    }

    public void loginToApplication(String user, String pass) {

        usernameField.sendKeys(user);

        passwordField.sendKeys(pass);

        loginButton.click();

    }

}

Best Practices for Implementing POM 

  • Use One Class per Page: Helps modularize the code and isolate page-specific behaviors. 
  • Separate Test Logic from Page Logic: Keep verifications and assertions in the test layer. 
  • Use Descriptive Method Names: Improves clarity and makes tests self-documenting. 
  • Centralize Driver Handling: Use base classes to manage driver lifecycle. 
  • Avoid Static Fields: Prevent issues in multi-threaded environments. 
  • Implement Smart Waits: Use WebDriverWait instead of Thread.sleep for synchronization. 

Best Practices for Implementing POM

Common Pitfalls to Avoid 

  • Writing assertions inside page classes 
  • Duplicating element locators in multiple classes 
  • Hardcoding test data within page classes 
  • Ignoring proper wait mechanisms 
  • Using static WebDriver instances 

Online Classes

POM in a Real-Time Automation Framework 

Most enterprise automation frameworks combine POM with other components: 

  • Maven/Gradle: Build management 
  • ExtentReports/Allure: Test reporting 
  • Data-driven sources: Excel, CSV, or database integration 
  • CI/CD tools: Jenkins, GitHub Actions, Azure DevOps for continuous delivery 

Such integrations ensure reliable, scalable, and maintainable test automation that aligns with the software development lifecycle. 

 

When Should You Implement POM? 

POM should be implemented as soon as your application has multiple pages or when test scripts begin to grow. The earlier you adopt it, the easier it is to scale your test suite and reduce technical debt in the long run. 

 

Conclusion 

The Page Object Model is more than just a pattern — it’s a foundation for scalable, maintainable, and clean automation code. It brings structure, reusability, and professionalism to your Selenium test suites. If you’re still writing locators and interactions directly in your test scripts, now is the perfect time to refactor and evolve your test architecture. 

If you’re still writing test logic directly in your scripts, now is the time to evolve.

At Testleaf, we teach Selenium the right way—using real-world frameworks, patterns like POM, and enterprise tools. Whether you’re starting out or scaling up, our Playwright and Selenium automation testing courses help you become job-ready and confident in test automation.

 

We Also Provide Training In:
Author’s Bio:

As CEO of TestLeaf, I’m dedicated to transforming software testing by empowering individuals with real-world skills and advanced technology. With 24+ years in software engineering, I lead our mission to shape local talent into global software professionals. Join us in redefining the future of test engineering and making a lasting impact in the tech world.

Babu Manickam

CEO – Testleaf

                                                                         LinkedIn Logo

 

Accelerate Your Salary with Expert-Level Selenium Training

X