Selenium WebDriver containers for Testcontainers - provides lightweight, throwaway instances of Selenium browsers running in Docker containers for automated testing
npx @tessl/cli install tessl/maven-org-testcontainers--selenium@1.21.0Testcontainers Selenium provides Selenium WebDriver container support for automated testing with web browsers running in Docker containers. It offers containerized instances of Chrome, Firefox, and Edge browsers, providing a clean, isolated browser environment for each test run with features like video recording, VNC access, and automatic browser version compatibility.
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
<version>1.21.3</version>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>selenium</artifactId>
<version>1.21.3</version>
</dependency>import org.testcontainers.containers.BrowserWebDriverContainer;
import org.testcontainers.utility.DockerImageName;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.edge.EdgeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.URL;import org.testcontainers.containers.BrowserWebDriverContainer;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
// Create a Chrome browser container
BrowserWebDriverContainer<?> chrome = new BrowserWebDriverContainer<>()
.withCapabilities(new ChromeOptions());
// Start the container
chrome.start();
// Get the Selenium endpoint URL
URL seleniumAddress = chrome.getSeleniumAddress();
// Create RemoteWebDriver instance
RemoteWebDriver driver = new RemoteWebDriver(seleniumAddress, new ChromeOptions());
// Use the driver for testing
driver.get("https://example.com");
// Clean up
driver.quit();
chrome.stop();The Selenium module is built around the BrowserWebDriverContainer class which extends the core Testcontainers GenericContainer. Key components include:
Core functionality for creating and configuring Selenium browser containers with different browsers, capabilities, and Docker images.
Key APIs:
public BrowserWebDriverContainer();
public BrowserWebDriverContainer(String dockerImageName);
public BrowserWebDriverContainer(DockerImageName dockerImageName);
public SELF withCapabilities(Capabilities capabilities);
public URL getSeleniumAddress();
public String getVncAddress();Video recording capabilities for test sessions using VNC recording with configurable modes and file naming.
Key APIs:
public SELF withRecordingMode(VncRecordingMode recordingMode, File vncRecordingDirectory);
public SELF withRecordingMode(VncRecordingMode recordingMode, File vncRecordingDirectory, VncRecordingFormat recordingFormat);
public SELF withRecordingFileFactory(RecordingFileFactory recordingFileFactory);Utilities for detecting Selenium version from classpath and ensuring browser image compatibility.
Key APIs:
public static String determineClasspathSeleniumVersion();
public static String getSeleniumVersionFromManifest(Manifest manifest);public enum VncRecordingMode {
SKIP,
RECORD_ALL,
RECORD_FAILING
}public enum VncRecordingFormat {
FLV("flv"),
MP4("mp4");
public String getFilenameExtension();
}public interface RecordingFileFactory {
File recordingFileForTest(File vncRecordingDirectory, String prefix, boolean succeeded);
default File recordingFileForTest(
File vncRecordingDirectory,
String prefix,
boolean succeeded,
VncRecordingFormat recordingFormat
);
}public static final String DEFAULT_SELENIUM_VERSION = "2.45.0";