Selenium 4 and Chrome DevTools Protocol (CDP)


Selenium 4 introduces powerful features, and one of the notable enhancements is the integration with the Chrome DevTools Protocol (CDP). CDP provides a programmatic way to interact with the Chrome browser's developer tools, allowing developers and testers to control browser behavior, capture network requests, log console messages, and much more. In this comprehensive guide, we will explore the capabilities of Selenium 4 with CDP.

What is Chrome Dev Tool?

Developer Tools, found in all modern browsers, serve as a crucial resource for developers, offering tools for analysis and debugging. Specifically tailored for Chrome and Chromium-based browsers, the Chrome Developer Tool (DevTools) can be accessed through keyboard shortcuts (CTRL + SHIFT + I or F12) or the user interface within the Chrome Browser.

To unveil the Chrome developer tool, simply navigate to the hamburger menu in the top right corner, select "More tools," and then click on "Developer Tools."

Features of Chrome DevTools

  • Inspect Element / Elements Tab: Provides a DOM tree representation, aiding in creating XPath, CSS Selectors, etc.

  • Toggle Device: Allows verification of responsiveness on different devices, with options to set custom screen dimensions.

  • Performance Tab: Analyzes webpage performance metrics, offering insights into loading, rendering, painting, etc.

  • Console: Displays errors and console logs related to the webpage, providing an interactive console for querying DOM elements.

  • Network Tab: Essential for tracking all request and response sequences, including assets, scripts, and API calls.

  • Memory Tab: Offers information on how the page utilizes memory, enabling the analysis of memory leaks.

  • Application Tab: Provides details on sessions, cookies, manifest files, service worker information, etc.

  • Security Tab: Offers information on HTTPS certificate data, connection-related details, and other security information.

  • Lighthouse: Captures website performance metrics, accessibility compliance, best practices, and SEO-related information.

Chrome DevTools Protocol (CDP)

Chrome DevTools Protocol (CDP) allows developers to instrument, inspect, debug, and profile Chrome and Chromium-based browsers programmatically. CDP provides a set of APIs, and Selenium 4 introduces support for these protocols. The CDP methods are categorized into domains such as Browser, Debugger, DOM, etc. Selenium 4 provides access to these Chrome DevTools Protocols, offering the ability to intercept network requests, access console logs, and more.

Selenium 4 Methods for CDP Interaction

  1. send(): This method, available in the org.openqa.selenium.devtools package, serves as a wrapper to the Chrome DevTools Protocol. Selenium utilizes this wrapper to make calls to Chrome DevTools Protocol commands. It is recommended for stability and future compatibility.

  2. executeCdpCommand(): Available directly from ChromiumDriver, this method allows direct calls to Chrome DevTools Protocol without using Selenium wrappers. It requires more manual work for sending parameters and is considered less stable.

Chrome Device Emulation Chrome DevTools

Example 1: Chrome Device Emulation using send() method

// Example 1: Chrome Device Emulation using send() method

import org.junit.Test;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v94.emulation.Emulation;

public class EmulateDevice {

   public void emulateDeviceWithSend() throws InterruptedException {
      System.setProperty("", "path/to/chromedriver");

      // Create driver instance
      ChromeDriver driver = new ChromeDriver();

      // Create devTool instance
      DevTools devTool = driver.getDevTools();       

      // Create a session for Chrome DevTools Protocol

      // Change the screen size (Emulation)
         500,  // width
         600,  // height
         50,   // deviceScaleFactor
         true  // mobile

      // Navigate to the website:

Example 2: Chrome Device Emulation using executeCdpCommand() method

// Example 2: Chrome Device Emulation using executeCdpCommand() method 

import org.junit.Test;

import java.util.HashMap;

public class EmulateDeviceWithExecuteCdpCommand {

    public void emulateDeviceWithExecuteCdpCommand() throws InterruptedException {
        System.setProperty("", "path/to/chromedriver");

        // Create driver instance
        ChromeDriver driver = new ChromeDriver(); 

        // Using executeCdpCommand() for device emulation
        HashMap<String, Object> deviceMetrics = new HashMap<>();
        deviceMetrics.put("width", 500);
        deviceMetrics.put("height", 600);
        deviceMetrics.put("deviceScaleFactor", 50);
        deviceMetrics.put("mobile", true);

        HashMap<String, Object> parameters = new HashMap<>();
        parameters.put("deviceMetricsOverride", deviceMetrics);

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

        // Navigate to the website

        // Sleep for demonstration purposes

        // Close the browser


Selenium 4's integration with Chrome DevTools Protocol opens up new possibilities for developers and testers. By leveraging CDP, you can programmatically control the Chrome browser, capture network requests, log console messages, emulate devices, and access browser information. As CDP evolves, Selenium 4 provides a stable and convenient wrapper with the send() method for interacting with Chrome DevTools Protocol, ensuring a seamless experience for automation testing.