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() {