πŸ’‘ If you like this website, please share it with your friends and network! πŸš€
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 + Java
import 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;
}