What if you could fix one place and save hours of test updates?
Why Test class consuming page objects in Selenium Java? - Purpose & Use Cases
Imagine testing a website by writing all the code to find buttons, fields, and links directly inside your test methods. Every time the page changes, you must hunt through your tests to fix locators.
This manual way is slow and confusing. Tests become long and messy. If the page layout changes, many tests break and need fixing. It's easy to make mistakes and hard to understand what each test does.
Using page objects means creating separate classes that represent pages. These classes hold all locators and actions. Tests then just call these clean methods. When the page changes, only the page object class needs updating.
driver.findElement(By.id("loginBtn")).click(); String title = driver.getTitle(); assertEquals("Welcome", title);
LoginPage login = new LoginPage(driver);
login.clickLoginButton();
assertEquals("Welcome", login.getTitle());This approach makes tests easier to read, maintain, and update, saving time and reducing errors.
When a website changes its login button ID, you update it once in the LoginPage class, and all tests using it continue working without changes.
Manual test code mixes page details and test logic, causing confusion.
Page objects separate page details from tests, making maintenance simpler.
Tests become cleaner, faster to fix, and more reliable.
Practice
Solution
Step 1: Understand roles of test class and page objects
Page objects encapsulate web element locators and actions. Test classes use these to perform tests.Step 2: Identify test class responsibility
Test classes call page object methods to execute test steps and verify results with assertions.Final Answer:
To perform test steps and assertions using methods from page objects -> Option DQuick Check:
Test class runs tests using page objects [OK]
- Trying to locate elements directly in test class
- Mixing page object code with test logic
- Using test class only for driver setup
Solution
Step 1: Recall page object constructor usage
Page objects usually require WebDriver passed to constructor for element initialization.Step 2: Check each option for correct syntax
LoginPage login = new LoginPage(driver); correctly uses 'new' with driver argument. Others miss driver or use invalid syntax.Final Answer:
LoginPage login = new LoginPage(driver); -> Option AQuick Check:
Use 'new' with driver parameter [OK]
- Forgetting to pass driver to constructor
- Using constructor without 'new' keyword
- Trying to get page object from driver directly
LoginPage login = new LoginPage(driver);
boolean result = login.login("wrongUser", "wrongPass");
System.out.println(result ? "Login Successful" : "Login Failed");Assuming
login() returns true on success and false on failure.Solution
Step 1: Understand login method behavior
login() returns true if credentials are correct, false otherwise.Step 2: Analyze given credentials and output
Credentials are wrong, so login() returns false, printing "Login Failed".Final Answer:
Login Failed -> Option AQuick Check:
False login returns "Login Failed" [OK]
- Assuming login returns exception on failure
- Confusing true/false return values
- Ignoring ternary operator logic
public class LoginTest {
WebDriver driver;
LoginPage loginPage;
@Before
public void setup() {
driver = new ChromeDriver();
loginPage = new LoginPage();
}
@Test
public void testLogin() {
loginPage.login("user", "pass");
}
}Solution
Step 1: Check page object instantiation
LoginPage requires driver in constructor, but called without arguments here.Step 2: Confirm driver initialization
Driver is initialized correctly before page object creation, so no issue there.Final Answer:
LoginPage constructor is called without passing driver -> Option CQuick Check:
Page object needs driver in constructor [OK]
- Forgetting driver parameter in page object constructor
- Assuming driver auto-initializes in page object
- Ignoring missing assertions (not error here)
HomePage and ProfilePage. You want to test the flow: login, navigate to profile, update info, and verify success message. Which approach best follows the test class consuming page objects pattern?Solution
Step 1: Understand separation of concerns
Page objects encapsulate page details; test class uses them to perform test steps and assertions.Step 2: Evaluate options for best practice
Instantiate both page objects with driver, call login on HomePage, then call updateProfile on ProfilePage, finally assert success message from ProfilePage correctly uses separate page objects and test class calls their methods in sequence.Final Answer:
Instantiate both page objects with driver, call login on HomePage, then call updateProfile on ProfilePage, finally assert success message from ProfilePage -> Option BQuick Check:
Test class calls page objects methods in flow [OK]
- Putting all locators and actions in test class
- Combining unrelated page objects into one
- Using driver directly instead of page objects
Ready to prove it?
Pass the test and this pattern moves unknown
