Chrome DevTools Protocol (CDP) bindings for Selenium WebDriver version 138
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Chrome 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
}