</>

Technology

Selenium

Difficulty

Advanced

Interview Question

What is Chrome DevTools Protocol (CDP) and how do you use it in Selenium 4?

Answer

Chrome DevTools Protocol (CDP) in Selenium 4

CDP allows Selenium tests to communicate directly with Chrome''s DevTools, enabling capabilities impossible with standard WebDriver commands.

Setup

Java
ChromeDriver driver = new ChromeDriver();
DevTools devTools = driver.getDevTools();
devTools.createSession();

1. Mock Network Conditions (Throttling)

Java
devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));

devTools.send(Network.emulateNetworkConditions(
    false,          // offline
    100,            // latency (ms)
    500 * 1024,     // downloadThroughput (bytes/sec = 500KB/s)
    200 * 1024,     // uploadThroughput
    Optional.of(ConnectionType.CELLULAR3G)
));
driver.get("https://automateqa.online");

2. Block Specific URLs / Requests

Java
devTools.send(Network.setBlockedURLs(List.of("*.png", "*.jpg", "analytics.js")));
driver.get("https://example.com"); // loads without images/analytics

3. Capture Console Logs

Java
devTools.addListener(Log.entryAdded(), entry -> {
    System.out.println("[" + entry.getLevel() + "] " + entry.getText());
});
driver.get("https://example.com");

4. Capture Network Requests/Responses

Java
devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));

devTools.addListener(Network.responseReceived(), response -> {
    System.out.println("URL: " + response.getResponse().getUrl());
    System.out.println("Status: " + response.getResponse().getStatus());
});

5. Override Geolocation

Java
devTools.send(Emulation.setGeolocationOverride(
    Optional.of(51.5074),  // London latitude
    Optional.of(-0.1278),  // London longitude
    Optional.of(1)         // accuracy
));
driver.get("https://maps.google.com");

6. Emulate Device (Mobile)

Java
Map<String, Object> deviceMetrics = new HashMap<>();
deviceMetrics.put("width",  375);
deviceMetrics.put("height", 812);
deviceMetrics.put("mobile", true);
deviceMetrics.put("deviceScaleFactor", 3);

driver.executeCdpCommand("Emulation.setDeviceMetricsOverride", deviceMetrics);

7. Set Authentication Headers

Java
devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));

String credentials = Base64.getEncoder().encodeToString("admin:password".getBytes());
devTools.send(Network.setExtraHTTPHeaders(
    new Headers(Map.of("Authorization", "Basic " + credentials))
));

8. Get Performance Metrics

Java
devTools.send(Performance.enable(Optional.empty()));
List<Metric> metrics = devTools.send(Performance.getMetrics());
metrics.forEach(m -> System.out.println(m.getName() + ": " + m.getValue()));

Follow AutomateQA

Related Topics