0
0
Selenium Javatesting~5 mins

Why POM creates maintainable test code in Selenium Java

Choose your learning style9 modes available
Introduction

Page Object Model (POM) helps keep test code clean and easy to update by separating page details from test steps.

When you want to test a website with many pages.
When the website design changes often.
When multiple testers work on the same project.
When you want to avoid repeating code for the same page.
When you want faster test maintenance and fewer errors.
Syntax
Selenium Java
public class LoginPage {
    private WebDriver driver;
    private By usernameField = By.id("username");
    private By passwordField = By.id("password");
    private 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();
    }
}

POM uses classes to represent pages.

Locators and actions are inside page classes, not test code.

Examples
Test code calls page methods to perform actions.
Selenium Java
LoginPage login = new LoginPage(driver);
login.enterUsername("user1");
login.enterPassword("pass123");
login.clickLogin();
Another page class example with a method to get text.
Selenium Java
public class HomePage {
    private WebDriver driver;
    private By welcomeMessage = By.id("welcomeMsg");

    public HomePage(WebDriver driver) {
        this.driver = driver;
    }

    public String getWelcomeText() {
        return driver.findElement(welcomeMessage).getText();
    }
}
Sample Program

This test uses POM to keep page details inside LoginPage class. The test code is simple and easy to read.

Selenium Java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class LoginPage {
    private WebDriver driver;
    private By usernameField = By.id("username");
    private By passwordField = By.id("password");
    private 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 class LoginTest {
    public static void main(String[] args) {
        WebDriver driver = new ChromeDriver();
        driver.get("https://example.com/login");

        LoginPage loginPage = new LoginPage(driver);
        loginPage.enterUsername("testuser");
        loginPage.enterPassword("testpass");
        loginPage.clickLogin();

        // Assume after login, URL changes to /home
        String currentUrl = driver.getCurrentUrl();
        if (currentUrl.contains("/home")) {
            System.out.println("Test Passed: Login successful.");
        } else {
            System.out.println("Test Failed: Login unsuccessful.");
        }

        driver.quit();
    }
}
OutputSuccess
Important Notes

Changing a locator in POM means updating only one place.

Tests become shorter and clearer by using page methods.

POM helps teams avoid duplicated code and mistakes.

Summary

POM separates page details from test logic.

This makes tests easier to maintain and update.

It saves time when the website changes.