Bird
Raised Fist0
Selenium Javatesting~15 mins

Hybrid framework architecture in Selenium Java - Build an Automation Script

Choose your learning style10 modes available
Automate login functionality using Hybrid Framework
Preconditions (3)
Step 1: Open browser and navigate to the login page URL
Step 2: Enter username 'testuser' in the username input field
Step 3: Enter password 'Test@1234' in the password input field
Step 4: Click the login button
Step 5: Wait for the dashboard page to load
Step 6: Verify that the dashboard page URL contains '/dashboard'
Step 7: Verify that the welcome message 'Welcome, testuser!' is displayed
✅ Expected Result: User is successfully logged in and dashboard page is displayed with correct welcome message
Automation Requirements - Selenium WebDriver with TestNG using Hybrid Framework
Assertions Needed:
Verify current URL contains '/dashboard'
Verify welcome message text equals 'Welcome, testuser!'
Best Practices:
Use Page Object Model for page interactions
Use TestNG annotations for test setup and teardown
Use explicit waits to handle dynamic page elements
Separate test data from test scripts
Use logging for test steps
Automated Solution
Selenium Java
package tests;

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 pages.LoginPage;
import pages.DashboardPage;
import java.time.Duration;

public class LoginTest {
    private WebDriver driver;
    private WebDriverWait wait;
    private LoginPage loginPage;
    private DashboardPage dashboardPage;

    @BeforeClass
    public void setUp() {
        // Set path to chromedriver executable if needed
        driver = new ChromeDriver();
        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
        driver.manage().window().maximize();
        loginPage = new LoginPage(driver, wait);
        dashboardPage = new DashboardPage(driver, wait);
    }

    @Test
    public void testValidLogin() {
        driver.get("https://example.com/login");

        loginPage.enterUsername("testuser");
        loginPage.enterPassword("Test@1234");
        loginPage.clickLoginButton();

        // Wait for dashboard page URL
        wait.until(ExpectedConditions.urlContains("/dashboard"));

        String currentUrl = driver.getCurrentUrl();
        Assert.assertTrue(currentUrl.contains("/dashboard"), "URL does not contain /dashboard");

        String welcomeText = dashboardPage.getWelcomeMessage();
        Assert.assertEquals(welcomeText, "Welcome, testuser!", "Welcome message mismatch");
    }

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

// File: pages/LoginPage.java
package pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;

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

    private By usernameField = By.id("username");
    private By passwordField = By.id("password");
    private By loginButton = By.id("loginBtn");

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

    public void enterUsername(String username) {
        wait.until(ExpectedConditions.visibilityOfElementLocated(usernameField)).clear();
        driver.findElement(usernameField).sendKeys(username);
    }

    public void enterPassword(String password) {
        wait.until(ExpectedConditions.visibilityOfElementLocated(passwordField)).clear();
        driver.findElement(passwordField).sendKeys(password);
    }

    public void clickLoginButton() {
        wait.until(ExpectedConditions.elementToBeClickable(loginButton)).click();
    }
}

// File: pages/DashboardPage.java
package pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;

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

    private By welcomeMessage = By.id("welcomeMsg");

    public DashboardPage(WebDriver driver, WebDriverWait wait) {
        this.driver = driver;
        this.wait = wait;
    }

    public String getWelcomeMessage() {
        return wait.until(ExpectedConditions.visibilityOfElementLocated(welcomeMessage)).getText();
    }
}

This test uses Selenium WebDriver with TestNG in a hybrid framework style.

Setup: The @BeforeClass method initializes the ChromeDriver, WebDriverWait, and page objects.

Page Objects: LoginPage and DashboardPage classes encapsulate element locators and actions, following the Page Object Model pattern.

Test: The test navigates to the login page, enters username and password, clicks login, waits for the dashboard URL, and asserts the URL and welcome message.

Teardown: The @AfterClass method closes the browser.

Explicit waits ensure elements are ready before interaction, improving reliability. Separating page logic from test logic makes maintenance easier.

Common Mistakes - 4 Pitfalls
Using Thread.sleep() instead of explicit waits
Hardcoding locators inside test methods
Not closing the browser after tests
Mixing test logic and UI interaction code
Bonus Challenge

Now add data-driven testing with 3 different sets of login credentials (valid and invalid) using TestNG data provider.

Show Hint

Practice

(1/5)
1. What is the main advantage of using a Hybrid framework in Selenium Java testing?
easy
A. It combines keyword-driven and data-driven approaches for better flexibility.
B. It only uses data-driven testing for faster execution.
C. It requires no coding knowledge to create tests.
D. It runs tests only on a single browser.

Solution

  1. Step 1: Understand Hybrid framework components

    A Hybrid framework mixes keyword-driven and data-driven testing methods to leverage benefits of both.
  2. Step 2: Identify the advantage

    This combination allows flexible test design and easier maintenance, improving test reuse and scalability.
  3. Final Answer:

    It combines keyword-driven and data-driven approaches for better flexibility. -> Option A
  4. Quick Check:

    Hybrid framework = combines keyword + data-driven [OK]
Hint: Hybrid = mix keyword + data-driven testing [OK]
Common Mistakes:
  • Thinking hybrid uses only one testing approach
  • Assuming hybrid requires no coding
  • Believing hybrid limits browser support
2. Which of the following is the correct way to organize test data in a Hybrid framework?
easy
A. Write test data directly in the Selenium WebDriver code.
B. Hardcode test data inside test scripts.
C. Store test data in external files like Excel or CSV.
D. Use random values generated during test execution.

Solution

  1. Step 1: Recall data-driven testing principle

    Data-driven testing stores test data externally to separate it from test logic.
  2. Step 2: Apply to Hybrid framework

    Hybrid framework uses external files like Excel or CSV to manage test data for easy updates and reuse.
  3. Final Answer:

    Store test data in external files like Excel or CSV. -> Option C
  4. Quick Check:

    Test data external = Excel/CSV [OK]
Hint: Keep test data outside scripts for easy updates [OK]
Common Mistakes:
  • Hardcoding data inside scripts reduces flexibility
  • Mixing test data with Selenium code causes maintenance issues
  • Using random data breaks test repeatability
3. Given the following snippet in a Hybrid framework:
String keyword = "click";
if (keyword.equals("click")) {
    driver.findElement(By.id("submitBtn")).click();
} else if (keyword.equals("input")) {
    driver.findElement(By.id("nameField")).sendKeys("John");
}

What will happen when this code runs?
medium
A. A runtime error will occur due to invalid locator.
B. The name field will receive the text "John".
C. No action will be performed.
D. The submit button will be clicked.

Solution

  1. Step 1: Check the keyword value

    The variable keyword is set to "click".
  2. Step 2: Follow the if condition

    Since keyword.equals("click") is true, the code clicks the element with id "submitBtn".
  3. Final Answer:

    The submit button will be clicked. -> Option D
  4. Quick Check:

    Keyword = "click" triggers click action [OK]
Hint: Match keyword to action to predict behavior [OK]
Common Mistakes:
  • Confusing keyword values and actions
  • Assuming input action runs when keyword is "click"
  • Thinking locator is invalid without checking
4. In a Hybrid framework, the following code throws a NoSuchElementException. What is the likely cause?
driver.findElement(By.name("username")).sendKeys("admin");
medium
A. The sendKeys method is used incorrectly.
B. The locator By.name("username") does not match any element on the page.
C. The driver is not initialized before this line.
D. The element is disabled and cannot receive input.

Solution

  1. Step 1: Understand NoSuchElementException meaning

    This exception means Selenium cannot find the element using the given locator.
  2. Step 2: Analyze the locator usage

    If By.name("username") does not match any element on the current page, the exception occurs.
  3. Final Answer:

    The locator By.name("username") does not match any element on the page. -> Option B
  4. Quick Check:

    NoSuchElementException = locator not found [OK]
Hint: Check locator correctness when element not found error occurs [OK]
Common Mistakes:
  • Blaming sendKeys syntax for element not found
  • Ignoring driver initialization issues
  • Assuming element disabled causes NoSuchElementException
5. You want to design a Hybrid framework that reads test steps from an Excel file and executes them using Selenium Java. Which approach best supports this design?
hard
A. Use a keyword-driven engine to interpret actions and a data-driven module to read test data from Excel.
B. Write all test steps directly in Java code without external files.
C. Use only data-driven testing by reading test data but hardcode actions in scripts.
D. Use random test data generation without keywords or external files.

Solution

  1. Step 1: Understand Hybrid framework design goals

    Hybrid framework combines keyword-driven (for actions) and data-driven (for test data) approaches.
  2. Step 2: Match design to Excel usage

    Reading test steps (keywords) and data from Excel fits keyword-driven engine plus data-driven module.
  3. Final Answer:

    Use a keyword-driven engine to interpret actions and a data-driven module to read test data from Excel. -> Option A
  4. Quick Check:

    Hybrid = keyword engine + data-driven Excel [OK]
Hint: Combine keyword engine with Excel data for Hybrid framework [OK]
Common Mistakes:
  • Hardcoding all test steps reduces flexibility
  • Ignoring keyword-driven part in Hybrid design
  • Using random data breaks test consistency
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard