Chrome DevTools Protocol version 99 support library for Selenium WebDriver Java bindings
npx @tessl/cli install tessl/maven-org-seleniumhq-selenium--selenium-devtools-v99@4.1.0Selenium DevTools v99 provides comprehensive Chrome DevTools Protocol (CDP) version 99 support for Selenium WebDriver Java bindings. It enables low-level browser automation, debugging, and monitoring capabilities through direct access to Chrome's native debugging protocol.
org.seleniumhq.selenium:selenium-devtools-v99:4.1.4import org.openqa.selenium.devtools.v99.V99CdpInfo;
import org.openqa.selenium.devtools.v99.V99Domains;
import org.openqa.selenium.devtools.DevTools;For direct protocol access:
import org.openqa.selenium.devtools.v99.runtime.Runtime;
import org.openqa.selenium.devtools.v99.network.Network;
import org.openqa.selenium.devtools.v99.page.Page;
import org.openqa.selenium.devtools.v99.log.Log;
import org.openqa.selenium.devtools.v99.target.Target;
import org.openqa.selenium.devtools.v99.fetch.Fetch;
import java.util.function.Consumer;import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v99.V99Domains;
// Create WebDriver and access DevTools
WebDriver driver = new ChromeDriver();
DevTools devTools = ((ChromeDriver) driver).getDevTools();
devTools.createSession();
// Access v99 domains
V99Domains domains = new V99Domains(devTools);
// Enable network monitoring using public API
domains.network().setUserAgent("Custom User Agent for Testing");
// Listen for console events using public API
domains.events().addConsoleListener(consoleEvent -> {
System.out.println("Console: " + consoleEvent.getType() + " - " + consoleEvent.getMessages());
});
// Set up JavaScript binding using public API
domains.javascript().addJsBinding("myCallback");
domains.javascript().addBindingCalledListener(payload -> {
System.out.println("JavaScript binding called: " + payload);
});Selenium DevTools v99 is built around several key architectural components:
The library provides two access levels:
JavaScript execution, debugging, and browser-side binding management for advanced automation scenarios.
public class V99Javascript extends Javascript<ScriptIdentifier, BindingCalled> {
public V99Javascript(DevTools devtools);
// High-level public methods
public void addJsBinding(String scriptName);
public void removeJsBinding(String scriptName);
public void addBindingCalledListener(Consumer<String> listener);
public ScriptId pin(String exposeScriptAs, String script);
public void disable();
}Network traffic monitoring, request interception, authentication handling, and response manipulation for comprehensive network control.
public class V99Network extends Network<AuthRequired, RequestPaused> {
public V99Network(DevTools devTools);
// High-level public methods
public void setUserAgent(String userAgent);
public void setUserAgent(UserAgent userAgent);
public void addAuthHandler(Predicate<URI> whenThisMatches, Supplier<Credentials> useTheseCredentials);
public void resetNetworkFilter();
public void interceptTrafficWith(Filter filter);
public void prepareToInterceptTraffic();
public void disable();
}Browser event monitoring including console messages, JavaScript exceptions, and runtime events for debugging and monitoring.
public class V99Events extends Events<ConsoleAPICalled, ExceptionThrown> {
public V99Events(DevTools devtools);
// High-level public methods
public void addConsoleListener(Consumer<ConsoleEvent> listener);
public void addJavascriptExceptionListener(Consumer<JavascriptException> listener);
public void disable();
}Browser console and log event collection with level filtering and timestamp handling for comprehensive logging support.
public class V99Log implements org.openqa.selenium.devtools.idealized.log.Log {
public Command<Void> enable();
public Command<Void> clear();
public Event<LogEntry> entryAdded();
}Browser target (tab/window/iframe) management including attachment, detachment, and target enumeration for multi-context automation.
public class V99Target implements org.openqa.selenium.devtools.idealized.target.Target {
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();
}public class V99Domains implements Domains {
public V99Domains(DevTools devtools);
public Events<?, ?> events();
public Javascript<?, ?> javascript();
public Network<?, ?> network();
public Target target();
public Log log();
}@AutoService(CdpInfo.class)
public class V99CdpInfo extends CdpInfo {
public V99CdpInfo();
}// Session and target identifiers
public class SessionID {
public SessionID(String id);
public String toString();
}
public class TargetID {
public TargetID(String id);
public String toString();
}
// Network types
public class UserAgent {
public String userAgent();
public String acceptLanguage();
public String platform();
}
// Authentication credentials
public class UsernameAndPassword {
public String username();
public String password();
}The library integrates with Selenium's standard exception hierarchy:
Exception handling follows standard Java patterns with specific exceptions for different error conditions. Most operations are synchronous and throw exceptions immediately, while event handlers receive error information through event data structures.