0
0
Selenium Javatesting~15 mins

Multi-page navigation flow in Selenium Java - Build an Automation Script

Choose your learning style9 modes available
Verify multi-page navigation from Home to Profile page
Preconditions (3)
Step 1: Navigate to the Home page URL
Step 2: Click on the 'Login' button identified by id 'loginBtn'
Step 3: On the Login page, enter 'testuser@example.com' in the email field with id 'emailInput'
Step 4: Enter 'TestPass123' in the password field with id 'passwordInput'
Step 5: Click the 'Submit' button with id 'submitLogin'
Step 6: Wait for the Dashboard page to load and verify URL contains '/dashboard'
Step 7: Click on the 'Profile' link with id 'profileLink'
Step 8: Wait for the Profile page to load and verify URL contains '/profile'
✅ Expected Result: User successfully logs in, navigates to Dashboard, then navigates to Profile page with correct URLs and page elements loaded
Automation Requirements - Selenium WebDriver with Java and TestNG
Assertions Needed:
Verify current URL contains '/dashboard' after login
Verify current URL contains '/profile' after clicking Profile link
Best Practices:
Use explicit waits to wait for elements and page loads
Use By.id locators for element identification
Use TestNG assertions for validation
Organize code with setup and teardown methods
Close browser after test execution
Automated Solution
Selenium Java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.time.Duration;

public class MultiPageNavigationTest {
    private WebDriver driver;
    private WebDriverWait wait;

    @BeforeClass
    public void setUp() {
        // Assuming chromedriver is in system PATH
        driver = new ChromeDriver();
        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
        driver.manage().window().maximize();
    }

    @Test
    public void testMultiPageNavigationFlow() {
        // Step 1: Navigate to Home page
        driver.get("https://example.com/home");

        // Step 2: Click Login button
        WebElement loginBtn = wait.until(ExpectedConditions.elementToBeClickable(By.id("loginBtn")));
        loginBtn.click();

        // Step 3: Enter email
        WebElement emailInput = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("emailInput")));
        emailInput.sendKeys("testuser@example.com");

        // Step 4: Enter password
        WebElement passwordInput = driver.findElement(By.id("passwordInput"));
        passwordInput.sendKeys("TestPass123");

        // Step 5: Click Submit button
        WebElement submitLogin = driver.findElement(By.id("submitLogin"));
        submitLogin.click();

        // Step 6: Wait for Dashboard page and verify URL
        wait.until(ExpectedConditions.urlContains("/dashboard"));
        String currentUrl = driver.getCurrentUrl();
        Assert.assertTrue(currentUrl.contains("/dashboard"), "URL should contain '/dashboard' after login");

        // Step 7: Click Profile link
        WebElement profileLink = wait.until(ExpectedConditions.elementToBeClickable(By.id("profileLink")));
        profileLink.click();

        // Step 8: Wait for Profile page and verify URL
        wait.until(ExpectedConditions.urlContains("/profile"));
        currentUrl = driver.getCurrentUrl();
        Assert.assertTrue(currentUrl.contains("/profile"), "URL should contain '/profile' after clicking profile link");
    }

    @AfterClass
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}

This test uses Selenium WebDriver with Java and TestNG to automate the multi-page navigation flow.

Setup: The @BeforeClass method initializes the ChromeDriver and WebDriverWait with a 10-second timeout. The browser window is maximized for better visibility.

Test Steps: The test method testMultiPageNavigationFlow follows the manual test steps exactly:

  • Navigate to the Home page URL.
  • Click the Login button using an explicit wait to ensure it is clickable.
  • Wait for the email input to be visible, then enter the email.
  • Enter the password.
  • Click the Submit button.
  • Wait until the URL contains '/dashboard' to confirm login success, then assert this condition.
  • Click the Profile link after waiting for it to be clickable.
  • Wait until the URL contains '/profile' and assert this condition.

Teardown: The @AfterClass method closes the browser to clean up after the test.

This structure uses explicit waits to avoid timing issues and uses TestNG assertions to verify navigation success. Locators use By.id for reliability and clarity.

Common Mistakes - 4 Pitfalls
Using Thread.sleep() instead of explicit waits
Using brittle XPath locators instead of stable IDs
Not verifying the URL after navigation
Not closing the browser after test
Bonus Challenge

Now add data-driven testing with 3 different user credentials to verify login and navigation for each user.

Show Hint