0
0
Selenium Javatesting~7 mins

Page class design in Selenium Java

Choose your learning style9 modes available
Introduction

Page class design helps organize web page elements and actions in one place. It makes tests easier to read and maintain.

When automating web tests to keep code clean and reusable.
When multiple tests interact with the same web page.
When you want to separate test logic from page details.
When you want to reduce duplicate code for locating elements.
When you want to improve test readability and maintenance.
Syntax
Selenium Java
public class PageName {
    private WebDriver driver;

    // Constructor
    public PageName(WebDriver driver) {
        this.driver = driver;
    }

    // Locators
    private By elementLocator = By.id("elementId");

    // Actions
    public void clickElement() {
        driver.findElement(elementLocator).click();
    }

    public String getElementText() {
        return driver.findElement(elementLocator).getText();
    }
}

The class holds locators and methods for one page.

The WebDriver is passed in the constructor to interact with the browser.

Examples
This page class models a login page with fields and a button.
Selenium Java
public class LoginPage {
    private WebDriver driver;
    private By usernameField = By.name("username");
    private By passwordField = By.name("password");
    private By loginButton = By.cssSelector("button[type='submit']");

    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();
    }
}
This page class models a home page with a welcome message element.
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 opens a browser, goes to the login page, enters credentials, clicks login, and prints the page title.

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 String getPageTitle() {
        return driver.getTitle();
    }
}

class TestLogin {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
        WebDriver driver = new ChromeDriver();
        driver.get("https://example.com/login");

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

        String title = loginPage.getPageTitle();
        System.out.println("Page title after login: " + title);

        driver.quit();
    }
}
OutputSuccess
Important Notes

Use clear and meaningful names for locators and methods.

Keep page classes focused on one page only.

Pass WebDriver from test to page class to avoid creating multiple drivers.

Summary

Page class design organizes web page elements and actions in one place.

It improves test code readability and reuse.

Each page class should have locators and methods for that page only.