Selenium Chrome Driver provides WebDriver implementation for Google Chrome with Chrome DevTools Protocol support, network conditions simulation, permissions management, media casting capabilities, and Chrome-specific service configuration.
—
ChromiumOptions provides comprehensive configuration capabilities for Chromium-based browsers including binary paths, command line arguments, extensions, experimental features, and Android-specific settings.
Specify the path to the Chrome/Chromium executable.
public T setBinary(File path);
public T setBinary(String path);Parameters:
path (File|String): Absolute or relative path to the browser executableReturns: T - ChromiumOptions instance for method chaining
Usage Example:
ChromiumOptions<?> options = new ChromiumOptions<>("goog:chromeOptions", "chrome", "chrome");
// Set binary path using string
options.setBinary("/opt/google/chrome/chrome");
// Or using File object
options.setBinary(new File("/usr/bin/chromium-browser"));Add command line arguments for browser startup.
public T addArguments(String... arguments);
public T addArguments(List<String> arguments);Parameters:
arguments (String[]|List<String>): Command line arguments to addReturns: T - ChromiumOptions instance for method chaining
Usage Example:
ChromiumOptions<?> options = new ChromiumOptions<>("goog:chromeOptions", "chrome", "chrome");
// Add individual arguments
options.addArguments("--headless", "--no-sandbox", "--disable-dev-shm-usage");
// Add arguments from list
List<String> args = Arrays.asList("--window-size=1920,1080", "--disable-gpu");
options.addArguments(args);
// Arguments with values (use "=" delimiter)
options.addArguments("--user-data-dir=/tmp/chrome-profile");Common Arguments:
--headless: Run in headless mode--no-sandbox: Disable sandboxing (required in some Docker environments)--disable-dev-shm-usage: Overcome limited resource problems--window-size=width,height: Set initial window size--disable-gpu: Disable GPU acceleration--disable-extensions: Disable all extensions--incognito: Start in incognito modeAdd Chrome extensions from .crx files.
public T addExtensions(File... paths);
public T addExtensions(List<File> paths);Parameters:
paths (File[]|List<File>): Paths to .crx extension filesReturns: T - ChromiumOptions instance for method chaining
Throws: IllegalArgumentException if any file doesn't exist or isn't a file
Usage Example:
ChromiumOptions<?> options = new ChromiumOptions<>("goog:chromeOptions", "chrome", "chrome");
// Add single extension
File extension = new File("/path/to/extension.crx");
options.addExtensions(extension);
// Add multiple extensions
options.addExtensions(
new File("/path/to/extension1.crx"),
new File("/path/to/extension2.crx")
);Add Chrome extensions from Base64-encoded strings.
public T addEncodedExtensions(String... encoded);
public T addEncodedExtensions(List<String> encoded);Parameters:
encoded (String[]|List<String>): Base64-encoded extension dataReturns: T - ChromiumOptions instance for method chaining
Usage Example:
ChromiumOptions<?> options = new ChromiumOptions<>("goog:chromeOptions", "chrome", "chrome");
// Add encoded extension
String encodedExtension = "UEsDBBQAAAAIABtUJUDh4JfE..."; // Base64 data
options.addEncodedExtensions(encodedExtension);Enable WebDriver BiDi protocol support.
public T enableBiDi();Returns: T - ChromiumOptions instance for method chaining
Usage Example:
ChromiumOptions<?> options = new ChromiumOptions<>("goog:chromeOptions", "chrome", "chrome");
options.enableBiDi();Configure experimental Chrome options not yet exposed through the API.
public T setExperimentalOption(String name, Object value);Parameters:
name (String): Name of the experimental optionvalue (Object): Value for the experimental option (must be JSON-convertible)Returns: T - ChromiumOptions instance for method chaining
Usage Example:
ChromiumOptions<?> options = new ChromiumOptions<>("goog:chromeOptions", "chrome", "chrome");
// Enable logging
Map<String, Object> logPrefs = new HashMap<>();
logPrefs.put("browser", "ALL");
logPrefs.put("driver", "ALL");
options.setExperimentalOption("logPrefs", logPrefs);
// Set download directory
options.setExperimentalOption("prefs", Map.of(
"download.default_directory", "/path/to/downloads"
));Configure the Android package name for mobile testing.
public T setAndroidPackage(String androidPackage);Parameters:
androidPackage (String): Android package nameReturns: T - ChromiumOptions instance for method chaining
Configure the Android activity to launch.
public T setAndroidActivity(String activity);Parameters:
activity (String): Android activity class nameReturns: T - ChromiumOptions instance for method chaining
Specify the Android device serial number.
public T setAndroidDeviceSerialNumber(String serial);Parameters:
serial (String): Device serial numberReturns: T - ChromiumOptions instance for method chaining
Configure whether to use an already running Android app.
public T setUseRunningAndroidApp(boolean useIt);Parameters:
useIt (boolean): Whether to use running appReturns: T - ChromiumOptions instance for method chaining
Set the process name for the Android WebView.
public T setAndroidProcess(String processName);Parameters:
processName (String): Process name hosting the WebViewReturns: T - ChromiumOptions instance for method chaining
Usage Example:
ChromiumOptions<?> options = new ChromiumOptions<>("goog:chromeOptions", "chrome", "chrome");
// Configure for Android Chrome
options.setAndroidPackage("com.android.chrome")
.setAndroidActivity("com.google.android.apps.chrome.Main")
.setAndroidDeviceSerialNumber("HT7C1A03042")
.setUseRunningAndroidApp(false);ChromiumOptions supports merging configurations from other sources:
protected void mergeInPlace(Capabilities capabilities);
protected void mergeInOptionsFromCaps(String capabilityName, Capabilities capabilities);These methods handle merging options from existing Capabilities objects, combining arguments, extensions, and other settings intelligently.
// Constructor for creating ChromiumOptions
public ChromiumOptions(String capabilityType, String browserType, String capability);
// Constants for network conditions
public static final String OFFLINE = "offline";
public static final String LATENCY = "latency";
public static final String DOWNLOAD_THROUGHPUT = "download_throughput";
public static final String UPLOAD_THROUGHPUT = "upload_throughput";import org.openqa.selenium.chromium.ChromiumOptions;
import java.io.File;
import java.util.Arrays;
import java.util.Map;
ChromiumOptions<?> options = new ChromiumOptions<>("goog:chromeOptions", "chrome", "chrome");
// Basic configuration
options.setBinary("/opt/google/chrome/chrome")
.addArguments("--headless", "--no-sandbox", "--disable-dev-shm-usage")
.addArguments("--window-size=1920,1080");
// Extensions
options.addExtensions(new File("/path/to/extension.crx"));
// Experimental options
options.setExperimentalOption("excludeSwitches", Arrays.asList("enable-automation"))
.setExperimentalOption("useAutomationExtension", false);
// Enable advanced protocols
options.enableBiDi();
// Android configuration (if testing mobile Chrome)
options.setAndroidPackage("com.android.chrome")
.setAndroidActivity("com.google.android.apps.chrome.Main");Common exceptions:
--headless for server environments without displays--no-sandbox and --disable-dev-shm-usage in containerized environmentsInstall with Tessl CLI
npx tessl i tessl/maven-org-seleniumhq-selenium--selenium-chromium-driver