diff --git a/docs/modules/webdriver_containers.md b/docs/modules/webdriver_containers.md
index 65b39bc5a8f..a42f261d79c 100644
--- a/docs/modules/webdriver_containers.md
+++ b/docs/modules/webdriver_containers.md
@@ -23,14 +23,14 @@ every test.
The following field in your JUnit UI test class will prepare a container running Chrome:
-[Chrome](../../modules/selenium/src/test/java/org/testcontainers/junit/ChromeWebDriverContainerTest.java) inside_block:junitRule
+[Chrome](../../modules/selenium/src/test/java/org/testcontainers/selenium/ChromeWebDriverContainerTest.java) inside_block:junitRule
Now, instead of instantiating an instance of WebDriver directly, use the following to obtain an instance inside your
test methods:
-[RemoteWebDriver](../../modules/selenium/src/test/java/org/testcontainers/junit/LocalServerWebDriverContainerTest.java) inside_block:getWebDriver
+[RemoteWebDriver](../../modules/selenium/src/test/java/org/testcontainers/selenium/LocalServerWebDriverContainerTest.java) inside_block:getWebDriver
You can then use this driver instance like a regular WebDriver.
@@ -38,7 +38,7 @@ You can then use this driver instance like a regular WebDriver.
Note that, if you want to test a **web application running on the host machine** (the machine the JUnit tests are
running on - which is quite likely), you'll need to use [the host exposing](../features/networking.md#exposing-host-ports-to-the-container) feature of Testcontainers, e.g.:
-[Open Web Page](../../modules/selenium/src/test/java/org/testcontainers/junit/LocalServerWebDriverContainerTest.java) inside_block:getPage
+[Open Web Page](../../modules/selenium/src/test/java/org/testcontainers/selenium/LocalServerWebDriverContainerTest.java) inside_block:getPage
@@ -48,9 +48,9 @@ running on - which is quite likely), you'll need to use [the host exposing](../f
At the moment, Chrome, Firefox and Edge are supported. To switch, simply change the first parameter to the rule constructor:
-[Chrome](../../modules/selenium/src/test/java/org/testcontainers/junit/ChromeWebDriverContainerTest.java) inside_block:junitRule
-[Firefox](../../modules/selenium/src/test/java/org/testcontainers/junit/FirefoxWebDriverContainerTest.java) inside_block:junitRule
-[Edge](../../modules/selenium/src/test/java/org/testcontainers/junit/EdgeWebDriverContainerTest.java) inside_block:junitRule
+[Chrome](../../modules/selenium/src/test/java/org/testcontainers/selenium/ChromeWebDriverContainerTest.java) inside_block:junitRule
+[Firefox](../../modules/selenium/src/test/java/org/testcontainers/selenium/FirefoxWebDriverContainerTest.java) inside_block:junitRule
+[Edge](../../modules/selenium/src/test/java/org/testcontainers/selenium/EdgeWebDriverContainerTest.java) inside_block:junitRule
### Recording videos
@@ -59,8 +59,8 @@ By default, no videos will be recorded. However, you can instruct Testcontainers
just for failing tests.
-[Record all Tests](../../modules/selenium/src/test/java/org/testcontainers/junit/ChromeRecordingWebDriverContainerTest.java) inside_block:recordAll
-[Record failing Tests](../../modules/selenium/src/test/java/org/testcontainers/junit/ChromeRecordingWebDriverContainerTest.java) inside_block:recordFailing
+[Record all Tests](../../modules/selenium/src/test/java/org/testcontainers/selenium/ChromeRecordingWebDriverContainerTest.java) inside_block:recordAll
+[Record failing Tests](../../modules/selenium/src/test/java/org/testcontainers/selenium/ChromeRecordingWebDriverContainerTest.java) inside_block:recordFailing
Note that the second parameter of `withRecordingMode` should be a directory where recordings can be saved.
@@ -68,13 +68,13 @@ Note that the second parameter of `withRecordingMode` should be a directory wher
By default, the video will be recorded in [FLV](https://en.wikipedia.org/wiki/Flash_Video) format, but you can specify it explicitly or change it to [MP4](https://en.wikipedia.org/wiki/MPEG-4_Part_14) using `withRecordingMode` method with `VncRecordingFormat` option:
-[Video Format in MP4](../../modules/selenium/src/test/java/org/testcontainers/junit/ChromeRecordingWebDriverContainerTest.java) inside_block:recordMp4
-[Video Format in FLV](../../modules/selenium/src/test/java/org/testcontainers/junit/ChromeRecordingWebDriverContainerTest.java) inside_block:recordFlv
+[Video Format in MP4](../../modules/selenium/src/test/java/org/testcontainers/selenium/ChromeRecordingWebDriverContainerTest.java) inside_block:recordMp4
+[Video Format in FLV](../../modules/selenium/src/test/java/org/testcontainers/selenium/ChromeRecordingWebDriverContainerTest.java) inside_block:recordFlv
If you would like to customise the file name of the recording, or provide a different directory at runtime based on the description of the test and/or its success or failure, you may provide a custom recording file factory as follows:
-[CustomRecordingFileFactory](../../modules/selenium/src/test/java/org/testcontainers/junit/ChromeRecordingWebDriverContainerTest.java) inside_block:withRecordingFileFactory
+[CustomRecordingFileFactory](../../modules/selenium/src/test/java/org/testcontainers/selenium/ChromeRecordingWebDriverContainerTest.java) inside_block:withRecordingFileFactory
@@ -82,7 +82,7 @@ Note the factory must implement `org.testcontainers.containers.RecordingFileFact
## More examples
-A few different examples are shown in [ChromeWebDriverContainerTest.java](https://github.com/testcontainers/testcontainers-java/blob/main/modules/selenium/src/test/java/org/testcontainers/junit/ChromeWebDriverContainerTest.java).
+A few different examples are shown in [ChromeWebDriverContainerTest.java](https://github.com/testcontainers/testcontainers-java/blob/main/modules/selenium/src/test/java/org/testcontainers/selenium/ChromeWebDriverContainerTest.java).
## Adding this module to your project dependencies
diff --git a/modules/selenium/src/main/java/org/testcontainers/containers/BrowserWebDriverContainer.java b/modules/selenium/src/main/java/org/testcontainers/containers/BrowserWebDriverContainer.java
index 8cdb6ca611c..53ee8ba5577 100644
--- a/modules/selenium/src/main/java/org/testcontainers/containers/BrowserWebDriverContainer.java
+++ b/modules/selenium/src/main/java/org/testcontainers/containers/BrowserWebDriverContainer.java
@@ -46,7 +46,10 @@
* {@code selenium/standalone-edge}, {@code selenium/standalone-chrome-debug}, {@code selenium/standalone-firefox-debug}
*
* Exposed ports: 4444
+ *
+ * @deprecated use {@link org.testcontainers.selenium.BrowserWebDriverContainer} instead.
*/
+@Deprecated
public class BrowserWebDriverContainer>
extends GenericContainer
implements LinkableContainer, TestLifecycleAware {
diff --git a/modules/selenium/src/main/java/org/testcontainers/selenium/BrowserWebDriverContainer.java b/modules/selenium/src/main/java/org/testcontainers/selenium/BrowserWebDriverContainer.java
new file mode 100644
index 00000000000..97ac23f5d55
--- /dev/null
+++ b/modules/selenium/src/main/java/org/testcontainers/selenium/BrowserWebDriverContainer.java
@@ -0,0 +1,283 @@
+package org.testcontainers.selenium;
+
+import com.github.dockerjava.api.command.InspectContainerResponse;
+import com.github.dockerjava.api.model.AccessMode;
+import com.github.dockerjava.api.model.Bind;
+import com.github.dockerjava.api.model.Volume;
+import com.google.common.collect.ImmutableSet;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.SystemUtils;
+import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.ContainerLaunchException;
+import org.testcontainers.containers.DefaultRecordingFileFactory;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.Network;
+import org.testcontainers.containers.RecordingFileFactory;
+import org.testcontainers.containers.VncRecordingContainer;
+import org.testcontainers.containers.VncRecordingContainer.VncRecordingFormat;
+import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy;
+import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
+import org.testcontainers.containers.wait.strategy.WaitAllStrategy;
+import org.testcontainers.containers.wait.strategy.WaitStrategy;
+import org.testcontainers.lifecycle.TestDescription;
+import org.testcontainers.lifecycle.TestLifecycleAware;
+import org.testcontainers.utility.DockerImageName;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.time.Duration;
+import java.util.Optional;
+import java.util.Set;
+
+/**
+ * A chrome/firefox/custom container based on SeleniumHQ's standalone container sets.
+ *
+ * Supported images: {@code selenium/standalone-chrome}, {@code selenium/standalone-firefox},
+ * {@code selenium/standalone-edge}, {@code selenium/standalone-chrome-debug}, {@code selenium/standalone-firefox-debug}
+ *
+ * Exposed ports: 4444
+ */
+public class BrowserWebDriverContainer
+ extends GenericContainer
+ implements TestLifecycleAware {
+
+ private static final DockerImageName CHROME_IMAGE = DockerImageName.parse("selenium/standalone-chrome");
+
+ private static final DockerImageName FIREFOX_IMAGE = DockerImageName.parse("selenium/standalone-firefox");
+
+ private static final DockerImageName EDGE_IMAGE = DockerImageName.parse("selenium/standalone-edge");
+
+ private static final DockerImageName CHROME_DEBUG_IMAGE = DockerImageName.parse("selenium/standalone-chrome-debug");
+
+ private static final DockerImageName FIREFOX_DEBUG_IMAGE = DockerImageName.parse(
+ "selenium/standalone-firefox-debug"
+ );
+
+ private static final DockerImageName[] COMPATIBLE_IMAGES = new DockerImageName[] {
+ CHROME_IMAGE,
+ FIREFOX_IMAGE,
+ EDGE_IMAGE,
+ CHROME_DEBUG_IMAGE,
+ FIREFOX_DEBUG_IMAGE,
+ };
+
+ private static final String DEFAULT_PASSWORD = "secret";
+
+ private static final int SELENIUM_PORT = 4444;
+
+ private static final int VNC_PORT = 5900;
+
+ private static final String NO_PROXY_KEY = "no_proxy";
+
+ private static final String TC_TEMP_DIR_PREFIX = "tc";
+
+ private VncRecordingMode recordingMode = VncRecordingMode.RECORD_FAILING;
+
+ private VncRecordingFormat recordingFormat;
+
+ private RecordingFileFactory recordingFileFactory;
+
+ private File vncRecordingDirectory;
+
+ private VncRecordingContainer vncRecordingContainer = null;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(BrowserWebDriverContainer.class);
+
+ /**
+ * Constructor taking a specific webdriver container name and tag
+ * @param dockerImageName Name of the selenium docker image
+ */
+ public BrowserWebDriverContainer(String dockerImageName) {
+ this(DockerImageName.parse(dockerImageName));
+ }
+
+ /**
+ * Constructor taking a specific webdriver container name and tag
+ * @param dockerImageName Name of the selenium docker image
+ */
+ public BrowserWebDriverContainer(DockerImageName dockerImageName) {
+ super(dockerImageName);
+ dockerImageName.assertCompatibleWith(COMPATIBLE_IMAGES);
+
+ waitingFor(getDefaultWaitStrategy());
+
+ withRecordingFileFactory(new DefaultRecordingFileFactory());
+ // We have to force SKIP mode for the recording by default because we don't know if the image has VNC or not
+ recordingMode = VncRecordingMode.SKIP;
+ }
+
+ @NotNull
+ @Override
+ protected Set getLivenessCheckPorts() {
+ Integer seleniumPort = getMappedPort(SELENIUM_PORT);
+ if (recordingMode == VncRecordingMode.SKIP) {
+ return ImmutableSet.of(seleniumPort);
+ } else {
+ return ImmutableSet.of(seleniumPort, getMappedPort(VNC_PORT));
+ }
+ }
+
+ @Override
+ protected void configure() {
+ if (recordingMode != VncRecordingMode.SKIP) {
+ if (vncRecordingDirectory == null) {
+ try {
+ vncRecordingDirectory = Files.createTempDirectory(TC_TEMP_DIR_PREFIX).toFile();
+ } catch (IOException e) {
+ // should never happen as per javadoc, since we use valid prefix
+ logger().error("Exception while trying to create temp directory", e);
+ throw new ContainerLaunchException("Exception while trying to create temp directory", e);
+ }
+ }
+
+ if (getNetwork() == null) {
+ withNetwork(Network.SHARED);
+ }
+
+ vncRecordingContainer =
+ new VncRecordingContainer(this)
+ .withVncPassword(DEFAULT_PASSWORD)
+ .withVncPort(VNC_PORT)
+ .withVideoFormat(recordingFormat);
+ }
+
+ String timeZone = System.getProperty("user.timezone");
+
+ if (timeZone == null || timeZone.isEmpty()) {
+ timeZone = "Etc/UTC";
+ }
+
+ addExposedPorts(SELENIUM_PORT, VNC_PORT);
+ addEnv("TZ", timeZone);
+
+ if (!getEnvMap().containsKey(NO_PROXY_KEY)) {
+ addEnv(NO_PROXY_KEY, "localhost");
+ }
+
+ setCommand("/opt/bin/entry_point.sh");
+
+ if (getShmSize() == null) {
+ if (SystemUtils.IS_OS_WINDOWS) {
+ withSharedMemorySize(512 * FileUtils.ONE_MB);
+ } else {
+ this.getBinds().add(new Bind("/dev/shm", new Volume("/dev/shm"), AccessMode.rw));
+ }
+ }
+
+ /*
+ * Some unreliability of the selenium browser containers has been observed, so allow multiple attempts to start.
+ */
+ setStartupAttempts(3);
+ }
+
+ public URL getSeleniumAddress() {
+ try {
+ return new URL("http", getHost(), getMappedPort(SELENIUM_PORT), "/wd/hub");
+ } catch (MalformedURLException e) {
+ e.printStackTrace(); // TODO
+ return null;
+ }
+ }
+
+ public String getVncAddress() {
+ return "vnc://vnc:secret@" + getHost() + ":" + getMappedPort(VNC_PORT);
+ }
+
+ @Override
+ protected void containerIsStarted(InspectContainerResponse containerInfo) {
+ if (vncRecordingContainer != null) {
+ LOGGER.debug("Starting VNC recording");
+ vncRecordingContainer.start();
+ }
+ }
+
+ @Override
+ public void afterTest(TestDescription description, Optional throwable) {
+ retainRecordingIfNeeded(description.getFilesystemFriendlyName(), !throwable.isPresent());
+ }
+
+ @Override
+ public void stop() {
+ if (vncRecordingContainer != null) {
+ try {
+ vncRecordingContainer.stop();
+ } catch (Exception e) {
+ LOGGER.debug("Failed to stop vncRecordingContainer", e);
+ }
+ vncRecordingContainer = null;
+ }
+
+ super.stop();
+ }
+
+ private void retainRecordingIfNeeded(String prefix, boolean succeeded) {
+ final boolean shouldRecord;
+ switch (recordingMode) {
+ case RECORD_ALL:
+ shouldRecord = true;
+ break;
+ case RECORD_FAILING:
+ shouldRecord = !succeeded;
+ break;
+ default:
+ shouldRecord = false;
+ break;
+ }
+
+ if (shouldRecord) {
+ File recordingFile = recordingFileFactory.recordingFileForTest(
+ vncRecordingDirectory,
+ prefix,
+ succeeded,
+ vncRecordingContainer.getVideoFormat()
+ );
+ LOGGER.info("Screen recordings for test {} will be stored at: {}", prefix, recordingFile);
+
+ vncRecordingContainer.saveRecordingToFile(recordingFile);
+ }
+ }
+
+ public BrowserWebDriverContainer withRecordingMode(VncRecordingMode recordingMode, File vncRecordingDirectory) {
+ return withRecordingMode(recordingMode, vncRecordingDirectory, null);
+ }
+
+ public BrowserWebDriverContainer withRecordingMode(
+ VncRecordingMode recordingMode,
+ File vncRecordingDirectory,
+ VncRecordingFormat recordingFormat
+ ) {
+ this.recordingMode = recordingMode;
+ this.vncRecordingDirectory = vncRecordingDirectory;
+ this.recordingFormat = recordingFormat;
+ return self();
+ }
+
+ public BrowserWebDriverContainer withRecordingFileFactory(RecordingFileFactory recordingFileFactory) {
+ this.recordingFileFactory = recordingFileFactory;
+ return self();
+ }
+
+ private WaitStrategy getDefaultWaitStrategy() {
+ final WaitStrategy logWaitStrategy = new LogMessageWaitStrategy()
+ .withRegEx(
+ ".*(RemoteWebDriver instances should connect to|Selenium Server is up and running|Started Selenium Standalone).*\n"
+ )
+ .withStartupTimeout(Duration.ofMinutes(1));
+
+ return new WaitAllStrategy()
+ .withStrategy(logWaitStrategy)
+ .withStrategy(new HostPortWaitStrategy())
+ .withStartupTimeout(Duration.ofMinutes(1));
+ }
+
+ public enum VncRecordingMode {
+ SKIP,
+ RECORD_ALL,
+ RECORD_FAILING,
+ }
+}
diff --git a/modules/selenium/src/test/java/org/testcontainers/junit/BaseWebDriverContainerTest.java b/modules/selenium/src/test/java/org/testcontainers/selenium/BaseWebDriverContainerTest.java
similarity index 87%
rename from modules/selenium/src/test/java/org/testcontainers/junit/BaseWebDriverContainerTest.java
rename to modules/selenium/src/test/java/org/testcontainers/selenium/BaseWebDriverContainerTest.java
index bb35b664301..eb7f946b6fa 100644
--- a/modules/selenium/src/test/java/org/testcontainers/junit/BaseWebDriverContainerTest.java
+++ b/modules/selenium/src/test/java/org/testcontainers/selenium/BaseWebDriverContainerTest.java
@@ -1,10 +1,9 @@
-package org.testcontainers.junit;
+package org.testcontainers.selenium;
import org.openqa.selenium.By;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.RemoteWebDriver;
-import org.testcontainers.containers.BrowserWebDriverContainer;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.Network;
import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
@@ -30,7 +29,7 @@ public class BaseWebDriverContainerTest {
HELLO_WORLD.start();
}
- protected static void doSimpleExplore(BrowserWebDriverContainer> rule, Capabilities capabilities) {
+ protected static void doSimpleExplore(BrowserWebDriverContainer rule, Capabilities capabilities) {
RemoteWebDriver driver = new RemoteWebDriver(rule.getSeleniumAddress(), capabilities);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));
System.out.println("Selenium remote URL is: " + rule.getSeleniumAddress());
@@ -46,11 +45,11 @@ protected static void doSimpleExplore(BrowserWebDriverContainer> rule, Capabil
}
protected void assertBrowserNameIs(
- BrowserWebDriverContainer> rule,
+ BrowserWebDriverContainer container,
String expectedName,
Capabilities capabilities
) {
- RemoteWebDriver driver = new RemoteWebDriver(rule.getSeleniumAddress(), capabilities);
+ RemoteWebDriver driver = new RemoteWebDriver(container.getSeleniumAddress(), capabilities);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));
String actual = driver.getCapabilities().getBrowserName();
assertThat(actual).as(String.format("actual browser name is %s", actual)).isEqualTo(expectedName);
diff --git a/modules/selenium/src/test/java/org/testcontainers/junit/BrowserWebDriverContainerTest.java b/modules/selenium/src/test/java/org/testcontainers/selenium/BrowserWebDriverContainerTest.java
similarity index 82%
rename from modules/selenium/src/test/java/org/testcontainers/junit/BrowserWebDriverContainerTest.java
rename to modules/selenium/src/test/java/org/testcontainers/selenium/BrowserWebDriverContainerTest.java
index d41b59fe7ed..b5e632cd217 100644
--- a/modules/selenium/src/test/java/org/testcontainers/junit/BrowserWebDriverContainerTest.java
+++ b/modules/selenium/src/test/java/org/testcontainers/selenium/BrowserWebDriverContainerTest.java
@@ -1,12 +1,9 @@
-package org.testcontainers.junit;
+package org.testcontainers.selenium;
import com.github.dockerjava.api.command.InspectContainerResponse;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.SystemUtils;
import org.junit.jupiter.api.Test;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.firefox.FirefoxOptions;
-import org.testcontainers.containers.BrowserWebDriverContainer;
import java.util.Collections;
import java.util.List;
@@ -24,8 +21,9 @@ class BrowserWebDriverContainerTest {
@Test
void honorPresetNoProxyEnvironment() {
try (
- BrowserWebDriverContainer chromeWithNoProxySet = (BrowserWebDriverContainer) new BrowserWebDriverContainer()
- .withCapabilities(new ChromeOptions())
+ BrowserWebDriverContainer chromeWithNoProxySet = new BrowserWebDriverContainer(
+ "selenium/standalone-chrome:4.13.0"
+ )
.withEnv(NO_PROXY_KEY, NO_PROXY_VALUE)
) {
chromeWithNoProxySet.start();
@@ -38,8 +36,9 @@ void honorPresetNoProxyEnvironment() {
@Test
void provideDefaultNoProxyEnvironmentIfNotSet() {
try (
- BrowserWebDriverContainer chromeWithoutNoProxySet = new BrowserWebDriverContainer()
- .withCapabilities(new ChromeOptions())
+ BrowserWebDriverContainer chromeWithoutNoProxySet = new BrowserWebDriverContainer(
+ "selenium/standalone-chrome:4.13.0"
+ )
) {
chromeWithoutNoProxySet.start();
@@ -52,8 +51,9 @@ void provideDefaultNoProxyEnvironmentIfNotSet() {
void createContainerWithShmVolume() {
assumeThat(SystemUtils.IS_OS_WINDOWS).isTrue();
try (
- BrowserWebDriverContainer webDriverContainer = new BrowserWebDriverContainer()
- .withCapabilities(new FirefoxOptions())
+ BrowserWebDriverContainer webDriverContainer = new BrowserWebDriverContainer(
+ "selenium/standalone-firefox:4.13.0"
+ )
) {
webDriverContainer.start();
@@ -68,9 +68,10 @@ void createContainerWithShmVolume() {
@Test
void createContainerWithoutShmVolume() {
try (
- BrowserWebDriverContainer webDriverContainer = new BrowserWebDriverContainer<>()
+ BrowserWebDriverContainer webDriverContainer = new BrowserWebDriverContainer(
+ "selenium/standalone-firefox:4.13.0"
+ )
.withSharedMemorySize(512 * FileUtils.ONE_MB)
- .withCapabilities(new FirefoxOptions())
) {
webDriverContainer.start();
diff --git a/modules/selenium/src/test/java/org/testcontainers/junit/ChromeRecordingWebDriverContainerTest.java b/modules/selenium/src/test/java/org/testcontainers/selenium/ChromeRecordingWebDriverContainerTest.java
similarity index 88%
rename from modules/selenium/src/test/java/org/testcontainers/junit/ChromeRecordingWebDriverContainerTest.java
rename to modules/selenium/src/test/java/org/testcontainers/selenium/ChromeRecordingWebDriverContainerTest.java
index 2c6fa241469..dbb39b86599 100644
--- a/modules/selenium/src/test/java/org/testcontainers/junit/ChromeRecordingWebDriverContainerTest.java
+++ b/modules/selenium/src/test/java/org/testcontainers/selenium/ChromeRecordingWebDriverContainerTest.java
@@ -1,18 +1,17 @@
-package org.testcontainers.junit;
+package org.testcontainers.selenium;
import com.google.common.io.PatternFilenameFilter;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.openqa.selenium.chrome.ChromeOptions;
-import org.testcontainers.containers.BrowserWebDriverContainer;
-import org.testcontainers.containers.BrowserWebDriverContainer.VncRecordingMode;
import org.testcontainers.containers.DefaultRecordingFileFactory;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.VncRecordingContainer;
import org.testcontainers.containers.VncRecordingContainer.VncRecordingFormat;
import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
import org.testcontainers.lifecycle.TestDescription;
+import org.testcontainers.selenium.BrowserWebDriverContainer.VncRecordingMode;
import org.testcontainers.utility.DockerImageName;
import org.testcontainers.utility.MountableFile;
@@ -46,8 +45,7 @@ void recordingTestThatShouldBeRecordedAndRetainedInFlvFormatAsDefault() throws I
try (
// recordAll {
// To do this, simply add extra parameters to the rule constructor, so video will default to FLV format:
- BrowserWebDriverContainer> chrome = new BrowserWebDriverContainer<>()
- .withCapabilities(new ChromeOptions())
+ BrowserWebDriverContainer chrome = new BrowserWebDriverContainer("selenium/standalone-chrome:4.13.0")
.withRecordingMode(VncRecordingMode.RECORD_ALL, target)
// }
.withRecordingFileFactory(new DefaultRecordingFileFactory())
@@ -58,7 +56,7 @@ void recordingTestThatShouldBeRecordedAndRetainedInFlvFormatAsDefault() throws I
}
}
- private File[] runSimpleExploreInContainer(BrowserWebDriverContainer> container, String fileNamePattern)
+ private File[] runSimpleExploreInContainer(BrowserWebDriverContainer container, String fileNamePattern)
throws InterruptedException {
container.start();
@@ -88,8 +86,7 @@ void recordingTestShouldHaveFlvExtension() throws InterruptedException {
try (
// recordFlv {
// Set (explicitly) FLV format for recorded video:
- BrowserWebDriverContainer> chrome = new BrowserWebDriverContainer<>()
- .withCapabilities(new ChromeOptions())
+ BrowserWebDriverContainer chrome = new BrowserWebDriverContainer("selenium/standalone-chrome:4.13.0")
.withRecordingMode(VncRecordingMode.RECORD_ALL, target, VncRecordingFormat.FLV)
// }
.withRecordingFileFactory(new DefaultRecordingFileFactory())
@@ -106,8 +103,7 @@ void recordingTestShouldHaveMp4Extension() throws InterruptedException {
try (
// recordMp4 {
// Set MP4 format for recorded video:
- BrowserWebDriverContainer> chrome = new BrowserWebDriverContainer<>()
- .withCapabilities(new ChromeOptions())
+ BrowserWebDriverContainer chrome = new BrowserWebDriverContainer("selenium/standalone-chrome:4.13.0")
.withRecordingMode(VncRecordingMode.RECORD_ALL, target, VncRecordingFormat.MP4)
// }
.withRecordingFileFactory(new DefaultRecordingFileFactory())
@@ -122,8 +118,7 @@ void recordingTestShouldHaveMp4Extension() throws InterruptedException {
void recordingTestThatShouldHaveCorrectDuration() throws IOException, InterruptedException {
MountableFile mountableFile;
try (
- BrowserWebDriverContainer> chrome = new BrowserWebDriverContainer<>()
- .withCapabilities(new ChromeOptions())
+ BrowserWebDriverContainer chrome = new BrowserWebDriverContainer("selenium/standalone-chrome:4.13.0")
.withRecordingMode(VncRecordingMode.RECORD_ALL, vncRecordingDirectory.toFile())
.withRecordingFileFactory(new DefaultRecordingFileFactory())
.withNetwork(NETWORK)
@@ -168,9 +163,8 @@ class ChromeThatRecordsFailingTests {
void recordingTestThatShouldBeRecordedButNotPersisted() {
try (
// withRecordingFileFactory {
- BrowserWebDriverContainer> chrome = new BrowserWebDriverContainer<>()
+ BrowserWebDriverContainer chrome = new BrowserWebDriverContainer("selenium/standalone-chrome:4.13.0")
// }
- .withCapabilities(new ChromeOptions())
// withRecordingFileFactory {
.withRecordingFileFactory(new CustomRecordingFileFactory())
// }
@@ -188,8 +182,7 @@ void recordingTestThatShouldBeRecordedAndRetained() throws InterruptedException
try (
// recordFailing {
// or if you only want videos for test failures:
- BrowserWebDriverContainer> chrome = new BrowserWebDriverContainer<>()
- .withCapabilities(new ChromeOptions())
+ BrowserWebDriverContainer chrome = new BrowserWebDriverContainer("selenium/standalone-chrome:4.13.0")
.withRecordingMode(VncRecordingMode.RECORD_FAILING, target)
// }
.withRecordingFileFactory(new DefaultRecordingFileFactory())
diff --git a/modules/selenium/src/test/java/org/testcontainers/junit/ChromeWebDriverContainerTest.java b/modules/selenium/src/test/java/org/testcontainers/selenium/ChromeWebDriverContainerTest.java
similarity index 69%
rename from modules/selenium/src/test/java/org/testcontainers/junit/ChromeWebDriverContainerTest.java
rename to modules/selenium/src/test/java/org/testcontainers/selenium/ChromeWebDriverContainerTest.java
index 33809568aa6..85f0378f84a 100644
--- a/modules/selenium/src/test/java/org/testcontainers/junit/ChromeWebDriverContainerTest.java
+++ b/modules/selenium/src/test/java/org/testcontainers/selenium/ChromeWebDriverContainerTest.java
@@ -1,15 +1,13 @@
-package org.testcontainers.junit;
+package org.testcontainers.selenium;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.chrome.ChromeOptions;
-import org.testcontainers.containers.BrowserWebDriverContainer;
class ChromeWebDriverContainerTest extends BaseWebDriverContainerTest {
// junitRule {
- public BrowserWebDriverContainer> chrome = new BrowserWebDriverContainer<>()
- .withCapabilities(new ChromeOptions())
+ public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer("selenium/standalone-chrome:4.13.0")
// }
.withNetwork(NETWORK);
diff --git a/modules/selenium/src/test/java/org/testcontainers/junit/ContainerWithoutCapabilitiesTest.java b/modules/selenium/src/test/java/org/testcontainers/selenium/ContainerWithoutCapabilitiesTest.java
similarity index 74%
rename from modules/selenium/src/test/java/org/testcontainers/junit/ContainerWithoutCapabilitiesTest.java
rename to modules/selenium/src/test/java/org/testcontainers/selenium/ContainerWithoutCapabilitiesTest.java
index 2ffc407a9e4..c706a0ce0ef 100644
--- a/modules/selenium/src/test/java/org/testcontainers/junit/ContainerWithoutCapabilitiesTest.java
+++ b/modules/selenium/src/test/java/org/testcontainers/selenium/ContainerWithoutCapabilitiesTest.java
@@ -1,15 +1,15 @@
-package org.testcontainers.junit;
+package org.testcontainers.selenium;
import org.junit.jupiter.api.AutoClose;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.chrome.ChromeOptions;
-import org.testcontainers.containers.BrowserWebDriverContainer;
class ContainerWithoutCapabilitiesTest extends BaseWebDriverContainerTest {
@AutoClose
- public BrowserWebDriverContainer> chrome = new BrowserWebDriverContainer<>().withNetwork(NETWORK);
+ public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer("selenium/standalone-chrome:4.13.0")
+ .withNetwork(NETWORK);
@BeforeEach
public void setUp() {
diff --git a/modules/selenium/src/test/java/org/testcontainers/junit/CustomWaitTimeoutWebDriverContainerTest.java b/modules/selenium/src/test/java/org/testcontainers/selenium/CustomWaitTimeoutWebDriverContainerTest.java
similarity index 66%
rename from modules/selenium/src/test/java/org/testcontainers/junit/CustomWaitTimeoutWebDriverContainerTest.java
rename to modules/selenium/src/test/java/org/testcontainers/selenium/CustomWaitTimeoutWebDriverContainerTest.java
index 757be9a3a3d..61d14bab65f 100644
--- a/modules/selenium/src/test/java/org/testcontainers/junit/CustomWaitTimeoutWebDriverContainerTest.java
+++ b/modules/selenium/src/test/java/org/testcontainers/selenium/CustomWaitTimeoutWebDriverContainerTest.java
@@ -1,16 +1,16 @@
-package org.testcontainers.junit;
+package org.testcontainers.selenium;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.chrome.ChromeOptions;
-import org.testcontainers.containers.BrowserWebDriverContainer;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
class CustomWaitTimeoutWebDriverContainerTest extends BaseWebDriverContainerTest {
- public BrowserWebDriverContainer> chromeWithCustomTimeout = new BrowserWebDriverContainer<>()
- .withCapabilities(new ChromeOptions())
+ public BrowserWebDriverContainer chromeWithCustomTimeout = new BrowserWebDriverContainer(
+ "selenium/standalone-chrome:4.13.0"
+ )
.withStartupTimeout(Duration.of(30, ChronoUnit.SECONDS))
.withNetwork(NETWORK);
diff --git a/modules/selenium/src/test/java/org/testcontainers/junit/EdgeWebDriverContainerTest.java b/modules/selenium/src/test/java/org/testcontainers/selenium/EdgeWebDriverContainerTest.java
similarity index 69%
rename from modules/selenium/src/test/java/org/testcontainers/junit/EdgeWebDriverContainerTest.java
rename to modules/selenium/src/test/java/org/testcontainers/selenium/EdgeWebDriverContainerTest.java
index 40904cff369..d99df91f8e1 100644
--- a/modules/selenium/src/test/java/org/testcontainers/junit/EdgeWebDriverContainerTest.java
+++ b/modules/selenium/src/test/java/org/testcontainers/selenium/EdgeWebDriverContainerTest.java
@@ -1,15 +1,13 @@
-package org.testcontainers.junit;
+package org.testcontainers.selenium;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.edge.EdgeOptions;
-import org.testcontainers.containers.BrowserWebDriverContainer;
class EdgeWebDriverContainerTest extends BaseWebDriverContainerTest {
// junitRule {
- public BrowserWebDriverContainer> edge = new BrowserWebDriverContainer<>()
- .withCapabilities(new EdgeOptions())
+ public BrowserWebDriverContainer edge = new BrowserWebDriverContainer("selenium/standalone-edge:4.13.0")
// }
.withNetwork(NETWORK);
diff --git a/modules/selenium/src/test/java/org/testcontainers/junit/FirefoxWebDriverContainerTest.java b/modules/selenium/src/test/java/org/testcontainers/selenium/FirefoxWebDriverContainerTest.java
similarity index 70%
rename from modules/selenium/src/test/java/org/testcontainers/junit/FirefoxWebDriverContainerTest.java
rename to modules/selenium/src/test/java/org/testcontainers/selenium/FirefoxWebDriverContainerTest.java
index e5003f6ae12..50545168260 100644
--- a/modules/selenium/src/test/java/org/testcontainers/junit/FirefoxWebDriverContainerTest.java
+++ b/modules/selenium/src/test/java/org/testcontainers/selenium/FirefoxWebDriverContainerTest.java
@@ -1,15 +1,13 @@
-package org.testcontainers.junit;
+package org.testcontainers.selenium;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.firefox.FirefoxOptions;
-import org.testcontainers.containers.BrowserWebDriverContainer;
class FirefoxWebDriverContainerTest extends BaseWebDriverContainerTest {
// junitRule {
- public BrowserWebDriverContainer> firefox = new BrowserWebDriverContainer<>()
- .withCapabilities(new FirefoxOptions())
+ public BrowserWebDriverContainer firefox = new BrowserWebDriverContainer("selenium/standalone-firefox:4.13.0")
// }
.withNetwork(NETWORK);
diff --git a/modules/selenium/src/test/java/org/testcontainers/junit/LocalServerWebDriverContainerTest.java b/modules/selenium/src/test/java/org/testcontainers/selenium/LocalServerWebDriverContainerTest.java
similarity index 87%
rename from modules/selenium/src/test/java/org/testcontainers/junit/LocalServerWebDriverContainerTest.java
rename to modules/selenium/src/test/java/org/testcontainers/selenium/LocalServerWebDriverContainerTest.java
index 0c93fde97dc..e5819b11786 100644
--- a/modules/selenium/src/test/java/org/testcontainers/junit/LocalServerWebDriverContainerTest.java
+++ b/modules/selenium/src/test/java/org/testcontainers/selenium/LocalServerWebDriverContainerTest.java
@@ -1,4 +1,4 @@
-package org.testcontainers.junit;
+package org.testcontainers.selenium;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -9,7 +9,6 @@
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testcontainers.Testcontainers;
-import org.testcontainers.containers.BrowserWebDriverContainer;
import static org.assertj.core.api.Assertions.assertThat;
@@ -19,9 +18,8 @@
*/
class LocalServerWebDriverContainerTest {
- public BrowserWebDriverContainer> chrome = new BrowserWebDriverContainer<>()
- .withAccessToHost(true)
- .withCapabilities(new ChromeOptions());
+ public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer("selenium/standalone-chrome:4.13.0")
+ .withAccessToHost(true);
private int localPort;
diff --git a/modules/selenium/src/test/java/org/testcontainers/junit/SpecificImageNameWebDriverContainerTest.java b/modules/selenium/src/test/java/org/testcontainers/selenium/SpecificImageNameWebDriverContainerTest.java
similarity index 63%
rename from modules/selenium/src/test/java/org/testcontainers/junit/SpecificImageNameWebDriverContainerTest.java
rename to modules/selenium/src/test/java/org/testcontainers/selenium/SpecificImageNameWebDriverContainerTest.java
index f8e6c739b82..c01dc5ae97f 100644
--- a/modules/selenium/src/test/java/org/testcontainers/junit/SpecificImageNameWebDriverContainerTest.java
+++ b/modules/selenium/src/test/java/org/testcontainers/selenium/SpecificImageNameWebDriverContainerTest.java
@@ -1,17 +1,14 @@
-package org.testcontainers.junit;
+package org.testcontainers.selenium;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.firefox.FirefoxOptions;
-import org.testcontainers.containers.BrowserWebDriverContainer;
import org.testcontainers.utility.DockerImageName;
class SpecificImageNameWebDriverContainerTest extends BaseWebDriverContainerTest {
private static final DockerImageName FIREFOX_IMAGE = DockerImageName.parse("selenium/standalone-firefox:4.10.0");
- public BrowserWebDriverContainer> firefox = new BrowserWebDriverContainer<>(FIREFOX_IMAGE)
- .withCapabilities(new FirefoxOptions())
- .withNetwork(NETWORK);
+ public BrowserWebDriverContainer firefox = new BrowserWebDriverContainer(FIREFOX_IMAGE).withNetwork(NETWORK);
@Test
void simpleExploreTest() {