Selenium WebDriver containers for Testcontainers - provides lightweight, throwaway instances of Selenium browsers running in Docker containers for automated testing
Testcontainers 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";Install with Tessl CLI
npx tessl i tessl/maven-org-testcontainers--selenium