Introduction
Page Object Model (POM) helps keep test code clean and easy to update by separating page details from test steps.
Page Object Model (POM) helps keep test code clean and easy to update by separating page details from test steps.
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.
LoginPage login = new LoginPage(driver); login.enterUsername("user1"); login.enterPassword("pass123"); login.clickLogin();
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(); } }
This test uses POM to keep page details inside LoginPage class. The test code is simple and easy to read.
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(); } }
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.
POM separates page details from test logic.
This makes tests easier to maintain and update.
It saves time when the website changes.
loginPage.getTitle() if the page title is "Welcome Page"?
public class LoginPage {
WebDriver driver;
public LoginPage(WebDriver driver) {
this.driver = driver;
}
public String getTitle() {
return driver.getTitle();
}
}public void clickLogin() {
WebElement loginBtn = driver.findElement(By.id);
loginBtn.click();
}Pass the test and this pattern moves unknown