Chrome DevTools Protocol (CDP) bindings for Selenium WebDriver version 138
npx @tessl/cli install tessl/maven-org-seleniumhq-selenium--selenium-devtools-v138@4.35.0Chrome DevTools Protocol (CDP) bindings for Selenium WebDriver version 138, enabling low-level browser interaction and automation beyond standard WebDriver capabilities. This package provides Java bindings that allow developers to interact with Chrome/Chromium browsers through the DevTools interface for advanced debugging, monitoring, and automation scenarios.
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-devtools-v138</artifactId>
<version>4.35.0</version>
</dependency>import org.openqa.selenium.devtools.v138.*;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.chrome.ChromeDriver;For specific domains:
import org.openqa.selenium.devtools.v138.v138Domains;
import org.openqa.selenium.devtools.v138.v138Events;
import org.openqa.selenium.devtools.v138.v138Javascript;
import org.openqa.selenium.devtools.v138.v138Network;
import org.openqa.selenium.devtools.v138.v138Log;
import org.openqa.selenium.devtools.v138.v138Target;For public API usage:
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;
import org.openqa.selenium.Credentials;import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v138.v138Domains;
// Create Chrome driver and get DevTools
ChromeDriver driver = new ChromeDriver();
DevTools devTools = driver.getDevTools();
// Create and use v138 domains
devTools.createSession();
v138Domains domains = new v138Domains(devTools);
// Enable console logging
devTools.send(domains.log().enable());
// Listen for console events (using Events domain)
domains.events().addConsoleListener(console ->
System.out.println("Console " + console.getType() + ": " +
console.getArgs().get(0)));
// Navigate to a page
driver.get("https://example.com");
// Clean up
devTools.close();
driver.quit();The v138 package implements Chrome DevTools Protocol version 138 through a layered architecture:
v138CdpInfo provides automatic version discovery via Java ServiceLoaderv138Domains serves as the main entry point, providing access to all CDP domainsv138Network, v138Javascript, etc.) wrap generated CDP classesorg.openqa.selenium.devtools.idealized.*Main entry point providing access to all Chrome DevTools Protocol domains. Essential for initializing and coordinating CDP functionality.
public class v138Domains implements Domains {
public v138Domains(DevTools devtools);
public Events<?, ?> events();
public Javascript<?, ?> javascript();
public Network<?, ?> network();
public Target target();
public Log log();
}Runtime events handling and console monitoring capabilities. Enables capturing JavaScript exceptions, console messages, and runtime diagnostics.
public class v138Events extends Events<ConsoleAPICalled, ExceptionThrown> {
public v138Events(DevTools devtools);
protected Event<ConsoleAPICalled> consoleEvent();
protected Event<ExceptionThrown> exceptionThrownEvent();
protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event);
protected JavascriptException toJsException(ExceptionThrown event);
}JavaScript execution environment management and bidirectional communication setup. Provides script injection, binding management, and page-level script control.
public class v138Javascript extends Javascript<ScriptIdentifier, BindingCalled> {
public v138Javascript(DevTools devtools);
protected Command<ScriptIdentifier> addScriptToEvaluateOnNewDocument(String script);
protected Command<Void> removeScriptToEvaluateOnNewDocument(ScriptIdentifier id);
protected Command<Void> doAddJsBinding(String scriptName);
protected Command<Void> doRemoveJsBinding(String scriptName);
}Network traffic monitoring, request/response interception, and authentication handling. Essential for API testing, performance monitoring, and request modification.
public class v138Network extends Network<AuthRequired, RequestPaused> {
public v138Network(DevTools devTools);
protected Command<Void> setUserAgentOverride(UserAgent userAgent);
protected Command<Void> enableNetworkCaching();
protected Command<Void> disableNetworkCaching();
protected Event<AuthRequired> authRequiredEvent();
protected Event<RequestPaused> requestPausedEvent();
public Either<HttpRequest, HttpResponse> createSeMessages(RequestPaused pausedReq);
}Console log management and event streaming. Provides access to browser console output with level filtering and timestamp conversion.
public class v138Log implements org.openqa.selenium.devtools.idealized.log.Log {
public Command<Void> enable();
public Command<Void> clear();
public Event<LogEntry> entryAdded();
}Browser target (tab/window) management and session control. Enables working with multiple browser contexts and coordinating cross-target operations.
public class v138Target implements org.openqa.selenium.devtools.idealized.target.Target {
public Command<List<TargetInfo>> getTargets();
public Command<SessionID> attachToTarget(TargetID targetId);
public Command<Void> detachFromTarget(Optional<SessionID> sessionId, Optional<TargetID> targetId);
public Command<Void> setAutoAttach();
public Event<TargetID> detached();
}Service registration for automatic CDP version discovery. Handles integration with Selenium's version selection mechanism.
@AutoService(CdpInfo.class)
public class v138CdpInfo extends CdpInfo {
public v138CdpInfo();
}// Core DevTools integration
interface Domains {
Events<?, ?> events();
Javascript<?, ?> javascript();
Network<?, ?> network();
Target target();
Log log();
}
// Command pattern for CDP operations
interface Command<T> {
String getMethod();
Map<String, Object> getParams();
}
// Event streaming for CDP notifications
interface Event<T> {
String getMethod();
Function<JsonInput, T> map();
}
// Network interception types
class UserAgent {
String userAgent();
String acceptLanguage();
String platform();
}
// Target management types
class TargetInfo {
TargetID getTargetId();
String getType();
String getTitle();
String getUrl();
Boolean getAttached();
Optional<TargetID> getOpenerId();
}
class SessionID {
String toString();
}
class TargetID {
String toString();
}
// Console and logging types
class ConsoleEvent {
String getType();
Instant getTimestamp();
List<Object> getArgs();
}
class LogEntry {
String getSource();
org.openqa.selenium.logging.LogEntry getEntry();
}
// Functional interfaces for API methods
@FunctionalInterface
interface Consumer<T> {
void accept(T t);
}
@FunctionalInterface
interface Predicate<T> {
boolean test(T t);
}
@FunctionalInterface
interface Supplier<T> {
T get();
}
@FunctionalInterface
interface Filter {
boolean test(HttpRequest request);
}
// Authentication types
class Credentials {
Credentials(String username, String password);
String getUsername();
String getPassword();
}
// Script management types
class ScriptId {
String toString(); // Unique identifier for pinned scripts
}