0
0
Selenium Javatesting~5 mins

Base page class pattern in Selenium Java

Choose your learning style9 modes available
Introduction

The base page class pattern helps keep your test code clean and easy to maintain by putting common web page actions in one place.

When you have many web pages with similar actions like clicking or typing.
When you want to avoid repeating the same code in multiple test files.
When you want to make your tests easier to update if the website changes.
When you want to organize your Selenium tests better for teamwork.
When you want to write clear and simple test scripts that focus on test logic.
Syntax
Selenium Java
public class BasePage {
    protected WebDriver driver;

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

    public void click(By locator) {
        driver.findElement(locator).click();
    }

    public void type(By locator, String text) {
        driver.findElement(locator).sendKeys(text);
    }

    public String getText(By locator) {
        return driver.findElement(locator).getText();
    }
}

The BasePage class holds common methods like click, type, and getText.

Each page class will extend BasePage to reuse these methods.

Examples
This LoginPage class uses BasePage methods to perform login steps.
Selenium Java
public class LoginPage extends BasePage {
    private By usernameField = By.id("username");
    private By passwordField = By.id("password");
    private By loginButton = By.id("loginBtn");

    public LoginPage(WebDriver driver) {
        super(driver);
    }

    public void login(String user, String pass) {
        type(usernameField, user);
        type(passwordField, pass);
        click(loginButton);
    }
}
HomePage class reuses getText method from BasePage to get welcome message.
Selenium Java
public class HomePage extends BasePage {
    private By welcomeMessage = By.id("welcomeMsg");

    public HomePage(WebDriver driver) {
        super(driver);
    }

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

This test opens a browser, goes to login page, uses LoginPage class to login, then checks if login succeeded by URL.

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

public class BasePage {
    protected WebDriver driver;

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

    public void click(By locator) {
        driver.findElement(locator).click();
    }

    public void type(By locator, String text) {
        driver.findElement(locator).sendKeys(text);
    }

    public String getText(By locator) {
        return driver.findElement(locator).getText();
    }
}

class LoginPage extends BasePage {
    private By usernameField = By.id("username");
    private By passwordField = By.id("password");
    private By loginButton = By.id("loginBtn");

    public LoginPage(WebDriver driver) {
        super(driver);
    }

    public void login(String user, String pass) {
        type(usernameField, user);
        type(passwordField, pass);
        click(loginButton);
    }
}

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.login("user1", "pass123");

        // Assume after login, URL changes to /home
        if (driver.getCurrentUrl().contains("/home")) {
            System.out.println("Login test passed");
        } else {
            System.out.println("Login test failed");
        }

        driver.quit();
    }
}
OutputSuccess
Important Notes

Always keep locators private in page classes to protect them from outside changes.

Use clear method names in page classes to describe user actions.

Remember to close the browser after tests to free resources.

Summary

Base page class groups common web actions to avoid code repetition.

Page classes extend base page to reuse methods and keep tests clean.

This pattern makes tests easier to read, write, and maintain.