</>

Technology

Scenario-Based

Difficulty

Advanced

Interview Question

How do you handle a test that requires database validation in Selenium?

Answer

Database Validation in Selenium Tests

UI validation alone is not enough for data integrity. Combine Selenium UI actions with JDBC database queries.

Setup — JDBC Dependencies

XML
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

DatabaseUtils Class

Java
public class DatabaseUtils {
    private static Connection connection;

    public static void connect(String url, String user, String pass) throws Exception {
        connection = DriverManager.getConnection(url, user, pass);
    }

    public static String getColumnValue(String query, String column) throws Exception {
        ResultSet rs = connection.createStatement().executeQuery(query);
        if (rs.next()) return rs.getString(column);
        return null;
    }

    public static int getRowCount(String query) throws Exception {
        ResultSet rs = connection.createStatement().executeQuery(query);
        rs.last();
        return rs.getRow();
    }

    public static void closeConnection() throws Exception {
        if (connection != null) connection.close();
    }
}

Test — UI Action + DB Validation

Java
@Test
public void verifyUserRegistrationSavedToDatabase() throws Exception {
    // UI: Submit registration form
    driver.findElement(By.id("firstName")).sendKeys("John");
    driver.findElement(By.id("lastName")).sendKeys("Doe");
    driver.findElement(By.id("email")).sendKeys("john.doe@automateqa.online");
    driver.findElement(By.id("registerBtn")).click();

    // Wait for confirmation
    new WebDriverWait(driver, Duration.ofSeconds(10))
        .until(ExpectedConditions.textToBePresentInElementLocated(
            By.cssSelector(".success-msg"), "Registration successful"));

    // DB: Verify data was actually saved correctly
    String email = DatabaseUtils.getColumnValue(
        "SELECT email FROM users WHERE email = ''john.doe@automateqa.online''",
        "email"
    );

    Assert.assertEquals(email, "john.doe@automateqa.online",
        "User email not found in database after registration");
}

Test — Order Submission

Java
@Test
public void verifyOrderCreatedInDatabase() throws Exception {
    // UI: Place order
    driver.findElement(By.id("checkoutBtn")).click();
    driver.findElement(By.id("confirmBtn")).click();

    String orderId = driver.findElement(By.cssSelector(".order-id")).getText();
    float uiTotal = Float.parseFloat(
        driver.findElement(By.cssSelector(".order-total")).getText().replace("$", ""));

    // DB: Cross-check order record
    String dbStatus = DatabaseUtils.getColumnValue(
        "SELECT status FROM orders WHERE order_id = ''" + orderId + "''", "status");
    String dbTotal = DatabaseUtils.getColumnValue(
        "SELECT total FROM orders WHERE order_id = ''" + orderId + "''", "total");

    Assert.assertEquals(dbStatus, "CONFIRMED", "Order status mismatch in DB");
    Assert.assertEquals(Float.parseFloat(dbTotal), uiTotal, 0.01f, "Order total mismatch");
}

Setup/Teardown

Java
@BeforeSuite
public void dbConnect() throws Exception {
    DatabaseUtils.connect(
        "jdbc:mysql://localhost:3306/testdb",
        System.getenv("DB_USER"),
        System.getenv("DB_PASS")
    );
}

@AfterSuite
public void dbDisconnect() throws Exception {
    DatabaseUtils.closeConnection();
}

@AfterMethod
public void cleanTestData() throws Exception {
    DatabaseUtils.executeUpdate(
        "DELETE FROM users WHERE email LIKE ''%@automateqa.online''"
    );
}

Follow AutomateQA

Related Topics