Back to All Scenarios
Scenario 82 of 100
API + Selenium
Advanced
Finding Mismatched Rows Between Massive UI Tables and API Datasets
πScenario Overview
Finding Mismatched Rows Between Massive UI Tables and API Datasets
Key Takeaways & Cheat Sheet
- βFetch all database rows using fast JSON API collections
- βExtract UI table text records using Javascript Executor queries
- βMap both datasets using unique identifiers (like user IDs)
- βIdentify missing records using list differences to isolate errors
Short Direct Answer
When a UI table is missing rows compared to the API (e.g. 1000 rows in API, 998 in UI), nested loops will slow tests down. To find mismatches quickly, query the API dataset, extract the UI rows as a list using a single JavaScript command, map both lists by a unique key (like ID), and compare the collections to isolate the missing rows.
β οΈ Senior Warning (Red Flag)
Never query element locators in nested loops to find missing rows. Doing so creates massive network overhead, slowing down your test execution dramatically.
π‘ STAR Deep Dive Explanation & Pro Tip
Using set operations (like removeAll) is highly optimized, resolving data mismatches on large datasets in milliseconds.
SeleniumAutomation.java
Selenium 4 + Javaimport io.restassured.RestAssured;
import java.util.*;
public void findMissingRows() {
// 1. Fetch user ID list from API
List<String> apiUserIds = RestAssured.get("https://api.careerraah.com/users/ids").jsonPath().getList("id");
// 2. Extract UI user IDs using JavaScript Executor in a single query
String jsQuery = "return Array.from(document.querySelectorAll('table#users-tbl tr[data-id]'))"
+ ".map(tr => tr.getAttribute('data-id')).join(',');";
String uiIdString = (String) ((JavascriptExecutor) driver).executeScript(jsQuery);
List<String> uiUserIds = Arrays.asList(uiIdString.split(","));
// 3. Find missing elements by set difference
Set<String> missingInUi = new HashSet<>(apiUserIds);
missingInUi.removeAll(uiUserIds);
System.out.println("Missing User IDs in UI: " + missingInUi);
assert missingInUi.isEmpty() : "UI table is missing rows: " + missingInUi;
}