Selenium WebDriver containers for Testcontainers - provides lightweight, throwaway instances of Selenium browsers running in Docker containers for automated testing
The Selenium module provides VNC-based video recording capabilities for test sessions. This allows you to capture browser interactions during tests for debugging and documentation purposes.
import org.testcontainers.containers.BrowserWebDriverContainer;
import org.testcontainers.containers.BrowserWebDriverContainer.VncRecordingMode;
import org.testcontainers.containers.VncRecordingContainer.VncRecordingFormat;
import org.testcontainers.containers.RecordingFileFactory;
import org.testcontainers.containers.DefaultRecordingFileFactory;
import java.io.File;Configure video recording with a recording mode and output directory.
public SELF withRecordingMode(VncRecordingMode recordingMode, File vncRecordingDirectory);Parameters:
recordingMode: When to record videos (SKIP, RECORD_ALL, RECORD_FAILING)vncRecordingDirectory: Directory where recording files will be savedUsage:
File recordingDir = new File("./test-recordings");
BrowserWebDriverContainer<?> chrome = new BrowserWebDriverContainer<>()
.withCapabilities(new ChromeOptions())
.withRecordingMode(BrowserWebDriverContainer.VncRecordingMode.RECORD_FAILING, recordingDir);Configure video recording with format specification.
public SELF withRecordingMode(VncRecordingMode recordingMode, File vncRecordingDirectory, VncRecordingFormat recordingFormat);Parameters:
recordingMode: When to record videosvncRecordingDirectory: Directory for recording filesrecordingFormat: Video format (typically FLV)Usage:
File recordingDir = new File("./test-recordings");
BrowserWebDriverContainer<?> chrome = new BrowserWebDriverContainer<>()
.withCapabilities(new ChromeOptions())
.withRecordingMode(
BrowserWebDriverContainer.VncRecordingMode.RECORD_ALL,
recordingDir,
VncRecordingContainer.VncRecordingFormat.FLV
);public enum VncRecordingFormat {
FLV("flv"),
MP4("mp4");
public String getFilenameExtension();
}Values:
FLV: Flash Video format (default)MP4: MPEG-4 format with H.264 encodingThe enum provides file extension information for proper recording file naming.
public enum VncRecordingMode {
SKIP,
RECORD_ALL,
RECORD_FAILING
}Values:
SKIP: No video recordingRECORD_ALL: Record all test sessions regardless of outcomeRECORD_FAILING: Record only failing test sessionsUsage:
import org.testcontainers.containers.BrowserWebDriverContainer.VncRecordingMode;
// Record only failing tests
.withRecordingMode(VncRecordingMode.RECORD_FAILING, recordingDir)
// Record all tests
.withRecordingMode(VncRecordingMode.RECORD_ALL, recordingDir)
// Disable recording
.withRecordingMode(VncRecordingMode.SKIP, recordingDir)Configure custom file naming for recording files.
public SELF withRecordingFileFactory(RecordingFileFactory recordingFileFactory);Parameters:
recordingFileFactory: Custom implementation of RecordingFileFactoryUsage:
RecordingFileFactory customFactory = new CustomRecordingFileFactory();
BrowserWebDriverContainer<?> chrome = new BrowserWebDriverContainer<>()
.withRecordingFileFactory(customFactory);public interface RecordingFileFactory {
File recordingFileForTest(File vncRecordingDirectory, String prefix, boolean succeeded);
default File recordingFileForTest(File vncRecordingDirectory, String prefix, boolean succeeded, VncRecordingFormat recordingFormat) {
return recordingFileForTest(vncRecordingDirectory, prefix, succeeded);
}
@Deprecated
default File recordingFileForTest(File vncRecordingDirectory, Description description, boolean succeeded) {
return recordingFileForTest(vncRecordingDirectory,
description.getTestClass().getSimpleName() + "-" + description.getMethodName(),
succeeded);
}
}Parameters:
vncRecordingDirectory: Directory for saving recordingsprefix: Test name prefix for the filesucceeded: Whether the test passed or failedrecordingFormat: Video format for the recordingdescription: JUnit test description (deprecated method)The default implementation creates timestamped files with test results.
public class DefaultRecordingFileFactory implements RecordingFileFactory {
public File recordingFileForTest(File vncRecordingDirectory, String prefix, boolean succeeded);
public File recordingFileForTest(File vncRecordingDirectory, String prefix, boolean succeeded, VncRecordingFormat recordingFormat);
}File Naming Pattern:
{RESULT}-{PREFIX}-{TIMESTAMP}.{EXTENSION}Where:
RESULT: "PASSED" or "FAILED"PREFIX: Test name or custom prefixTIMESTAMP: "YYYYMMDD-HHmmss" formatEXTENSION: File extension based on recording formatExample Output:
FAILED-ChromeWebDriverContainerTest-testLogin-20231201-143052.flv
PASSED-FirefoxTest-testNavigation-20231201-143105.flvThe DefaultRecordingFileFactory uses internal constants for file naming:
@Deprecated
public String getPassword();
@Deprecated
public int getPort();Note: Use getVncAddress() from BrowserWebDriverContainer instead.
Default Values:
Video recording automatically integrates with test lifecycle:
The recording files are automatically saved to the specified directory with meaningful names that include test results and timestamps.
Install with Tessl CLI
npx tessl i tessl/maven-org-testcontainers--selenium