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''"
);
}
