0
0
Selenium Javatesting~7 mins

Test class consuming page objects in Selenium Java

Choose your learning style9 modes available
Introduction

We use test classes with page objects to keep tests simple and easy to read. It helps separate the test steps from the details of the web page.

When you want to test a website and keep your code organized.
When multiple tests use the same web page elements.
When you want to make your tests easier to update if the web page changes.
When you want to write clear and reusable test steps.
When working in a team to keep test code clean and understandable.
Syntax
Selenium Java
public class TestClassName {
    WebDriver driver;
    PageObjectClass page;

    @BeforeEach
    public void setup() {
        driver = new ChromeDriver();
        page = new PageObjectClass(driver);
    }

    @Test
    public void testMethod() {
        page.open();
        page.performAction();
        Assertions.assertTrue(page.isResultDisplayed());
    }

    @AfterEach
    public void teardown() {
        driver.quit();
    }
}

The test class creates and uses the page object to interact with the web page.

Use setup and teardown methods to open and close the browser for each test.

Examples
This test class uses the LoginPage page object to test a valid login scenario.
Selenium Java
public class LoginTest {
    WebDriver driver;
    LoginPage loginPage;

    @BeforeEach
    public void setup() {
        driver = new ChromeDriver();
        loginPage = new LoginPage(driver);
    }

    @Test
    public void validLoginTest() {
        loginPage.open();
        loginPage.enterUsername("user1");
        loginPage.enterPassword("pass123");
        loginPage.clickLogin();
        Assertions.assertTrue(loginPage.isLoginSuccessful());
    }

    @AfterEach
    public void teardown() {
        driver.quit();
    }
}
This test class uses the SearchPage page object to test searching for an item.
Selenium Java
public class SearchTest {
    WebDriver driver;
    SearchPage searchPage;

    @BeforeEach
    public void setup() {
        driver = new ChromeDriver();
        searchPage = new SearchPage(driver);
    }

    @Test
    public void searchItemTest() {
        searchPage.open();
        searchPage.enterSearchTerm("laptop");
        searchPage.clickSearchButton();
        Assertions.assertTrue(searchPage.isResultsDisplayed());
    }

    @AfterEach
    public void teardown() {
        driver.quit();
    }
}
Sample Program

This test class uses the LoginPage page object to test a login. It opens the login page, enters username and password, clicks login, and checks if login was successful by looking for a welcome message.

Selenium Java
import org.junit.jupiter.api.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.By;

public class LoginTest {
    WebDriver driver;
    LoginPage loginPage;

    @BeforeEach
    public void setup() {
        driver = new ChromeDriver();
        loginPage = new LoginPage(driver);
    }

    @Test
    public void validLoginTest() {
        loginPage.open();
        loginPage.enterUsername("user1");
        loginPage.enterPassword("pass123");
        loginPage.clickLogin();
        Assertions.assertTrue(loginPage.isLoginSuccessful());
    }

    @AfterEach
    public void teardown() {
        driver.quit();
    }
}

// Page Object Class
class LoginPage {
    WebDriver driver;

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

    public void open() {
        driver.get("https://example.com/login");
    }

    public void enterUsername(String username) {
        driver.findElement(By.id("username")).sendKeys(username);
    }

    public void enterPassword(String password) {
        driver.findElement(By.id("password")).sendKeys(password);
    }

    public void clickLogin() {
        driver.findElement(By.id("loginButton")).click();
    }

    public boolean isLoginSuccessful() {
        return driver.findElements(By.id("welcomeMessage")).size() > 0;
    }
}
OutputSuccess
Important Notes

Always keep page objects focused on page actions and locators only.

Test classes should focus on test logic and assertions.

Use meaningful method names in page objects for clarity.

Summary

Test classes use page objects to keep tests clean and easy to read.

Page objects handle web page details; test classes handle test steps and checks.

This separation makes tests easier to maintain and understand.