Chrome DevTools Protocol (CDP) client library for Chrome version 105, providing Java bindings for browser automation and debugging capabilities
npx @tessl/cli install tessl/maven-org-seleniumhq-selenium--selenium-devtools-v105@4.6.0Selenium DevTools v105 provides Java bindings for the Chrome DevTools Protocol (CDP) version 105, enabling programmatic interaction with Chrome browsers for advanced automation, debugging, and monitoring capabilities. This library offers both high-level wrapper classes and direct access to auto-generated CDP domain APIs, making it essential for advanced browser automation scenarios beyond standard WebDriver capabilities.
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-devtools-v105</artifactId>
<version>4.6.0</version>
</dependency>import org.openqa.selenium.devtools.v105.V105Domains;
import org.openqa.selenium.devtools.v105.V105CdpInfo;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.HasDevTools;// Initialize Chrome driver with DevTools
ChromeDriver driver = new ChromeDriver();
DevTools devTools = driver.getDevTools();
devTools.createSession();
// Access v105 domains
V105Domains domains = new V105Domains(devTools);
// Enable network domain for monitoring
devTools.send(org.openqa.selenium.devtools.v105.network.Network.enable());
// Set up authentication handling using network domain
domains.network().authRequiredEvent().addListener(authRequired -> {
if (domains.network().getUriFrom(authRequired).contains("secure.example.com")) {
devTools.send(domains.network().continueWithAuth(authRequired,
new UsernameAndPassword("user", "pass")));
}
});
// Listen for console events
domains.events().consoleEvent().addListener(consoleEvent -> {
org.openqa.selenium.devtools.events.ConsoleEvent event =
domains.events().toConsoleEvent(consoleEvent);
System.out.println("Console: " + event.getMessages());
});
// Add JavaScript binding for communication
devTools.send(domains.javascript().doAddJsBinding("javaCallback"));
domains.javascript().bindingCalledEvent().addListener(bindingCalled -> {
String payload = domains.javascript().extractPayload(bindingCalled);
System.out.println("JavaScript called: " + payload);
});
// Use direct CDP for JavaScript evaluation
devTools.send(org.openqa.selenium.devtools.v105.runtime.Runtime.evaluate("return document.title"));
// Clean up
devTools.send(org.openqa.selenium.devtools.v105.network.Network.disable());
domains.javascript().disable();
driver.quit();Selenium DevTools v105 is built around several key components:
Advanced network interception capabilities including request/response modification, authentication handling, and traffic monitoring. Essential for testing scenarios requiring network manipulation.
public class V105Network extends Network<AuthRequired, RequestPaused> {
public V105Network(DevTools devTools);
// Key network operations (inherited from Network base class)
protected Command<Void> setUserAgentOverride(UserAgent userAgent);
protected Command<Void> enableNetworkCaching();
protected Command<Void> disableNetworkCaching();
}Runtime event handling for console messages, JavaScript exceptions, and other browser events. Provides unified access to Chrome's runtime events with proper type conversion.
public class V105Events extends Events<ConsoleAPICalled, ExceptionThrown> {
public V105Events(DevTools devtools);
// Event subscription methods (inherited from Events base class)
protected Event<ConsoleAPICalled> consoleEvent();
protected Event<ExceptionThrown> exceptionThrownEvent();
// Event conversion methods
protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event);
protected JavascriptException toJsException(ExceptionThrown event);
}JavaScript evaluation capabilities with support for bindings, script injection, and runtime interaction. Enables advanced JavaScript automation beyond standard WebDriver execute_script.
public class V105Javascript extends Javascript<ScriptIdentifier, BindingCalled> {
public V105Javascript(DevTools devtools);
// JavaScript operations (inherited from Javascript base class)
public void disable();
public ScriptId pin(String exposeScriptAs, String script);
// Protected methods for binding management
protected Command<Void> doAddJsBinding(String scriptName);
protected Command<Void> doRemoveJsBinding(String scriptName);
// Event handling
protected Event<BindingCalled> bindingCalledEvent();
protected String extractPayload(BindingCalled event);
}Access to browser logs including console logs, network logs, and other browser-generated log messages. Provides structured access to Chrome's logging system.
public class V105Log implements org.openqa.selenium.devtools.idealized.log.Log {
public V105Log();
public Command<Void> enable();
public Command<Void> clear();
public Event<org.openqa.selenium.devtools.idealized.log.model.LogEntry> entryAdded();
}Target management for handling browser tabs, web workers, iframes, and other browsing contexts. Essential for multi-context automation scenarios.
public class V105Target implements org.openqa.selenium.devtools.idealized.target.Target {
public V105Target();
public Command<List<org.openqa.selenium.devtools.idealized.target.model.TargetInfo>> getTargets();
public Command<org.openqa.selenium.devtools.idealized.target.model.SessionID> attachToTarget(
org.openqa.selenium.devtools.idealized.target.model.TargetID targetId);
public Command<Void> detachFromTarget(
Optional<org.openqa.selenium.devtools.idealized.target.model.SessionID> sessionId,
Optional<org.openqa.selenium.devtools.idealized.target.model.TargetID> targetId);
public Command<Void> setAutoAttach();
public Event<org.openqa.selenium.devtools.idealized.target.model.TargetID> detached();
}Direct access to all generated Chrome DevTools Protocol domains for advanced use cases requiring protocol-level control. Includes 41+ domains with full type-safe Java bindings.
// Runtime domain for JavaScript execution
import org.openqa.selenium.devtools.v105.runtime.Runtime;
// Network domain for network control
import org.openqa.selenium.devtools.v105.network.Network;
// Page domain for page lifecycle
import org.openqa.selenium.devtools.v105.page.Page;// Main domains container
public class V105Domains implements Domains {
public V105Domains(DevTools devtools);
Events<?, ?> events();
Javascript<?, ?> javascript();
Network<?, ?> network();
Target target();
Log log();
}
// CDP version info
public class V105CdpInfo extends CdpInfo {
public V105CdpInfo();
}// User agent configuration
public static class UserAgent {
String userAgent();
String acceptLanguage();
String platform();
}
// Authentication types
public class AuthRequired {
AuthChallenge getAuthChallenge();
RequestId getRequestId();
}
public class RequestPaused {
RequestId getRequestId();
Request getRequest();
Optional<Integer> getResponseStatusCode();
}// Console event data
public class ConsoleEvent {
String getType();
Instant getTimestamp();
List<Object> getMessages();
}
// JavaScript exception data
public class JavascriptException extends RuntimeException {
JavascriptException(String message);
StackTraceElement[] getStackTrace();
}// Script identifier for injected scripts
public class ScriptIdentifier {
String toString();
}
// Binding call event data
public class BindingCalled {
String getPayload();
String getName();
}// Target information
public class TargetInfo {
TargetID getTargetId();
String getType();
String getTitle();
String getUrl();
Boolean getAttached();
Optional<TargetID> getOpenerId();
}
// Target and session identifiers
public class TargetID {
TargetID(String id);
String toString();
}
public class SessionID {
SessionID(String id);
String toString();
}// Log entry data
public class LogEntry {
String getSource();
Level getLevel();
long getTimestamp();
String getText();
}