CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-seleniumhq-selenium--selenium-devtools-v105

Chrome DevTools Protocol (CDP) client library for Chrome version 105, providing Java bindings for browser automation and debugging capabilities

Pending
Overview
Eval results
Files

events.mddocs/

Event Handling

Runtime event handling for console messages, JavaScript exceptions, and other browser events. Provides unified access to Chrome's runtime events with proper type conversion to Selenium-compatible formats.

Capabilities

Console Event Monitoring

Monitor and capture console messages from the browser including console.log, console.error, console.warn, and other console API calls.

/**
 * Initialize events handler for runtime events
 * @param devtools DevTools session instance
 */
public V105Events(DevTools devtools);

/**
 * Enable runtime domain for event monitoring
 * @return Command to enable runtime events
 */
protected Command<Void> enableRuntime();

/**
 * Disable runtime domain
 * @return Command to disable runtime events
 */
protected Command<Void> disableRuntime();

/**
 * Get console API called event stream
 * @return Event stream for console messages
 */
protected Event<ConsoleAPICalled> consoleEvent();

/**
 * Convert CDP console event to Selenium console event
 * @param event CDP console API called event
 * @return Selenium-compatible console event
 */
protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event);

Usage Examples:

import org.openqa.selenium.devtools.v105.V105Events;
import org.openqa.selenium.devtools.events.ConsoleEvent;

// Initialize events handler
V105Events events = new V105Events(devTools);

// Enable runtime events
devTools.send(events.enableRuntime());

// Listen for console messages
events.consoleEvent().addListener(consoleApiCalled -> {
    ConsoleEvent event = events.toConsoleEvent(consoleApiCalled);
    
    System.out.println("Console " + event.getType() + ": " + event.getMessages());
    System.out.println("Timestamp: " + event.getTimestamp());
});

// Execute JavaScript that logs to console
devTools.send(Runtime.evaluate("console.log('Hello from browser')"));

Exception Handling

Capture and handle JavaScript exceptions and runtime errors from the browser.

/**
 * Get JavaScript exception thrown event stream
 * @return Event stream for JavaScript exceptions
 */
protected Event<ExceptionThrown> exceptionThrownEvent();

/**
 * Convert CDP exception to Selenium JavaScript exception
 * @param event CDP exception thrown event
 * @return Selenium JavaScript exception with stack trace
 */
protected JavascriptException toJsException(ExceptionThrown event);

Usage Examples:

import org.openqa.selenium.JavascriptException;

// Listen for JavaScript exceptions
events.exceptionThrownEvent().addListener(exceptionThrown -> {
    JavascriptException jsException = events.toJsException(exceptionThrown);
    
    System.err.println("JavaScript Error: " + jsException.getMessage());
    
    // Print stack trace
    for (StackTraceElement element : jsException.getStackTrace()) {
        System.err.println("  at " + element.getMethodName() + 
                          " (" + element.getFileName() + ":" + element.getLineNumber() + ")");
    }
});

// Execute JavaScript that throws an exception
devTools.send(Runtime.evaluate("throw new Error('Test exception')"));

Event Lifecycle Management

Manage the lifecycle of runtime event monitoring with proper cleanup.

/**
 * Events handler extending base Events class
 */
public class V105Events extends Events<ConsoleAPICalled, ExceptionThrown> {
    public V105Events(DevTools devtools);
}

Usage Examples:

// Initialize and enable events
V105Events events = new V105Events(devTools);
devTools.send(events.enableRuntime());

// Set up multiple event listeners
events.consoleEvent().addListener(this::handleConsoleEvent);
events.exceptionThrownEvent().addListener(this::handleException);

// Execute test code
devTools.send(Runtime.evaluate("console.log('Starting test'); throw new Error('Test error');"));

// Clean up when done
devTools.send(events.disableRuntime());

private void handleConsoleEvent(ConsoleAPICalled event) {
    ConsoleEvent consoleEvent = events.toConsoleEvent(event);
    // Handle console message
}

private void handleException(ExceptionThrown event) {
    JavascriptException exception = events.toJsException(event);
    // Handle JavaScript exception
}

Types

Core Event Types

// Events handler implementation
public class V105Events extends Events<ConsoleAPICalled, ExceptionThrown> {
    public V105Events(DevTools devtools);
}

// Selenium console event
public class ConsoleEvent {
    ConsoleEvent(String type, Instant timestamp, List<Object> messages);
    
    String getType();
    Instant getTimestamp();
    List<Object> getMessages();
}

// Selenium JavaScript exception
public class JavascriptException extends RuntimeException {
    JavascriptException(String message);
    
    String getMessage();
    StackTraceElement[] getStackTrace();
    void setStackTrace(StackTraceElement[] stackTrace);
}

CDP Event Types

// CDP console API called event
public class ConsoleAPICalled {
    ConsoleAPICalled.Type getType();
    Timestamp getTimestamp();
    List<RemoteObject> getArgs();
}

// Console message types
public enum ConsoleAPICalled.Type {
    LOG, DEBUG, INFO, ERROR, WARNING, DIR, DIRXML, TABLE, TRACE, 
    CLEAR, STARTGROUP, STARTGROUPCOLLAPSED, ENDGROUP, ASSERT, 
    PROFILE, PROFILEEND, COUNT, TIMEEND
}

// CDP exception thrown event
public class ExceptionThrown {
    ExceptionDetails getExceptionDetails();
    Timestamp getTimestamp();
}

// Exception details
public class ExceptionDetails {
    String getText();
    int getLineNumber();
    int getColumnNumber();
    Optional<String> getUrl();
    Optional<StackTrace> getStackTrace();
    Optional<RemoteObject> getException();
}

// Stack trace information
public class StackTrace {
    List<CallFrame> getCallFrames();
    Optional<String> getDescription();
}

// Call frame in stack trace
public class CallFrame {
    String getFunctionName();
    String getUrl();
    int getLineNumber();
    int getColumnNumber();
}

Remote Object Types

// JavaScript remote object
public class RemoteObject {
    RemoteObject.Type getType();
    Optional<Object> getValue();
    Optional<String> getDescription();
}

// Remote object types
public enum RemoteObject.Type {
    OBJECT, FUNCTION, UNDEFINED, STRING, NUMBER, BOOLEAN, SYMBOL, BIGINT
}

// Idealized remote object for Selenium
public class org.openqa.selenium.devtools.idealized.runtime.model.RemoteObject {
    RemoteObject(String type, Object value);
    
    String getType();
    Object getValue();
}

Timestamp Types

// CDP timestamp
public class Timestamp {
    Timestamp(Number timestamp);
    
    Number toJson();
    String toString();
}

Install with Tessl CLI

npx tessl i tessl/maven-org-seleniumhq-selenium--selenium-devtools-v105

docs

cdp-domains.md

events.md

index.md

javascript.md

logging.md

network.md

targets.md

tile.json