How to Use Page Object Model in Selenium with Java (Beginner Guide)
The Page Object Model (POM) is a popular design pattern in Selenium WebDriver that helps make test code more readable, maintainable, and reusable. In POM, each web page in your application is represented by a separate class file.
🧠 Why Use Page Object Model?
- Code Reusability: Write the page structure once and reuse it in multiple test cases.
- Maintenance: If UI changes, only the page class needs to be updated.
- Readability: Tests are clean and easy to understand.
📁 Typical Project Structure
src ├── main │ └── java │ └── pages │ └── LoginPage.java │ └── DashboardPage.java │ └── utils │ └── BaseTest.java ├── test │ └── java │ └── tests │ └── LoginTest.java
📝 Example Code
🔹 LoginPage.java
public class LoginPage { WebDriver driver; @FindBy(id = "username") WebElement txtUsername; @FindBy(id = "password") WebElement txtPassword; @FindBy(id = "loginBtn") WebElement btnLogin; public LoginPage(WebDriver driver) { this.driver = driver; PageFactory.initElements(driver, this); } public void login(String username, String password) { txtUsername.sendKeys(username); txtPassword.sendKeys(password); btnLogin.click(); } }
🔹 LoginTest.java
public class LoginTest extends BaseTest { @Test public void testValidLogin() { LoginPage login = new LoginPage(driver); login.login("admin", "admin123"); Assert.assertEquals(driver.getTitle(), "Dashboard"); } }
🧰 Tools and Annotations Used
@FindBy
– Used to locate web elements.PageFactory.initElements()
– Initializes all elements.BaseTest
– A reusable class to open/close the browser.
💡 Best Practices
- Use meaningful method names like
enterUsername()
,clickLogin()
. - Keep tests and page classes separate.
- Use PageFactory for cleaner element initialization.
📷 Bonus: Screenshot on Failure (Optional)
Implement a TestNG listener to capture a screenshot when a test fails. This helps in debugging.
📂 Explore the Full POM Framework on GitHub
If you'd like to see the complete implementation of the Page Object Model in a real-world Selenium project, you can visit my GitHub repository linked below.
🔗 GitHub Repository: DemoBlaze Selenium POM Framework
Feel free to ⭐️ the repository and fork it to practice!
📚 Summary
Page Object Model is essential for writing scalable and maintainable Selenium test cases. It separates logic (test) from UI structure (pages), making automation robust.
Happy Testing! 😊
Comments
Post a Comment