Java bindings for Chrome DevTools Protocol version 101, enabling browser automation and debugging capabilities through CDP integration
npx @tessl/cli install tessl/maven-org-seleniumhq-selenium--selenium-devtools-v101@4.3.0Selenium DevTools v101 provides Java language bindings for Chrome DevTools Protocol (CDP) version 101, enabling developers to interact with Chrome browser's debugging and automation APIs through Selenium WebDriver. This library offers comprehensive access to browser development tools including network monitoring, performance profiling, runtime evaluation, and advanced debugging capabilities.
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-devtools-v101</artifactId>
<version>4.3.0</version>
</dependency>import org.openqa.selenium.devtools.v101.V101CdpInfo;
import org.openqa.selenium.devtools.v101.V101Domains;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.idealized.Domains;import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v101.V101CdpInfo;
import org.openqa.selenium.devtools.idealized.Domains;
// Create Chrome driver and get DevTools
ChromeDriver driver = new ChromeDriver();
DevTools devTools = driver.getDevTools();
devTools.createSession();
// Get CDP v101 implementation
V101CdpInfo cdpInfo = new V101CdpInfo();
Domains domains = cdpInfo.getDomains(devTools);
// Listen to console events
domains.events().addConsoleListener(event -> {
System.out.println("Console " + event.getType() + ": " + event.getMessages());
});
// Set up network interception
domains.network().interceptTrafficWith(request -> {
// Modify or monitor network requests
return next -> next.execute(request);
});
// Add JavaScript bindings
domains.javascript().addJsBinding("myCustomFunction");
domains.javascript().addBindingCalledListener(payload -> {
System.out.println("JS binding called with: " + payload);
});Selenium DevTools v101 is built around several key components:
Main entry point for accessing Chrome DevTools Protocol version 101 functionality and managing domain access.
public class V101CdpInfo extends CdpInfo {
public V101CdpInfo();
public int getMajorVersion(); // Returns 101
public Domains getDomains(DevTools devTools);
}
public class V101Domains implements Domains {
public V101Domains(DevTools devtools);
public Events<?, ?> events();
public Javascript<?, ?> javascript();
public Network<?, ?> network();
public Target target();
public Log log();
public void disableAll();
}Entry Point and Domain Management
Real-time monitoring of browser console output and JavaScript runtime exceptions for debugging and monitoring purposes.
public class V101Events extends Events<ConsoleAPICalled, ExceptionThrown> {
public V101Events(DevTools devtools);
public void addConsoleListener(Consumer<ConsoleEvent> listener);
public void addJavascriptExceptionListener(Consumer<JavascriptException> listener);
public void disable();
}Console Events and JavaScript Exceptions
JavaScript execution control including custom bindings between browser JavaScript and Java code, and script injection capabilities.
public class V101Javascript extends Javascript<ScriptIdentifier, BindingCalled> {
public V101Javascript(DevTools devtools);
public ScriptId pin(String exposeScriptAs, String script);
public void addBindingCalledListener(Consumer<String> listener);
public void addJsBinding(String scriptName);
public void removeJsBinding(String scriptName);
public void disable();
}JavaScript Bindings and Script Evaluation
Comprehensive network traffic control including request/response interception, authentication handling, and user agent manipulation.
public class V101Network extends Network<AuthRequired, RequestPaused> {
public V101Network(DevTools devTools);
public void setUserAgent(String userAgent);
public void setUserAgent(UserAgent userAgent);
public void addAuthHandler(Predicate<URI> whenThisMatches, Supplier<Credentials> useTheseCredentials);
public void interceptTrafficWith(Filter filter);
public void prepareToInterceptTraffic();
public void resetNetworkFilter();
public void disable();
}Network Interception and Authentication
Browser target and session management for handling multiple tabs, windows, and browser contexts in complex automation scenarios.
public class V101Target implements Target {
public V101Target();
public Command<Void> detachFromTarget(Optional<SessionID> sessionId, Optional<TargetID> targetId);
public Command<List<TargetInfo>> getTargets();
public Command<SessionID> attachToTarget(TargetID targetId);
public Command<Void> setAutoAttach();
public Event<TargetID> detached();
}Browser-level logging functionality for capturing and managing browser console logs, network logs, and other browser-generated log messages.
public class V101Log implements Log {
public V101Log();
public Command<Void> enable();
public Command<Void> clear();
public Event<LogEntry> entryAdded();
}// Main DevTools communication interface
public interface DevTools {
Domains getDomains();
<X> X send(Command<X> command);
<X> void addListener(Event<X> event, Consumer<X> handler);
void clearListeners();
void createSession();
void createSessionIfThereIsNotOne();
void disconnectSession();
void close();
}
// CDP command representation
public class Command<X> {
public String getMethod();
public Map<String, Object> getParams();
public boolean getSendsResponse();
public Command<X> doesNotSendResponse();
}
// CDP event representation
public class Event<X> {
public String getMethod();
}
// Console event data
public class ConsoleEvent {
public String getType();
public Instant getTimestamp();
public List<Object> getArgs();
public List<String> getMessages();
}
// JavaScript exception wrapper
public class JavascriptException extends RuntimeException {
public JavascriptException(String message);
}
// Script identifier wrapper
public class ScriptId {
public Object getActualId();
}// User agent configuration
public class UserAgent {
public UserAgent(String userAgent);
public UserAgent acceptLanguage(String acceptLanguage);
public UserAgent platform(String platform);
public String userAgent();
public Optional<String> acceptLanguage();
public Optional<String> platform();
}
// Authentication challenge data
public class AuthRequired {
public AuthChallenge getAuthChallenge();
public RequestId getRequestId();
}
// Intercepted request data
public class RequestPaused {
public RequestId getRequestId();
public Request getRequest();
public Optional<Integer> getResponseStatusCode();
public Optional<String> getResponseErrorReason();
public Optional<List<HeaderEntry>> getResponseHeaders();
}
// HTTP header entry
public class HeaderEntry {
public HeaderEntry(String name, String value);
public String getName();
public String getValue();
}// Target information
public class TargetInfo {
public TargetID getTargetId();
public String getType();
public String getTitle();
public String getUrl();
public Boolean getAttached();
public Optional<TargetID> getOpenerId();
public Optional<BrowserContextID> getBrowserContextId();
}
// ID wrapper types
public class TargetID {
public TargetID(String id);
public String toString();
}
public class SessionID {
public SessionID(String id);
public String toString();
}
public class BrowserContextID {
public BrowserContextID(String id);
public String toString();
}// Browser log entry
public class LogEntry {
public String getSource();
public LogEntry getLogEntry(); // Returns java.util.logging.LogEntry
}