| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [View Raw Code] [Original HTTPS Page] |
Testcontainers can be used to automatically instantiate and manage containers that include web browsers, such as those from SeleniumHQ's docker-selenium project.
Creation of browser containers is fast, so it's actually quite feasible to have a totally fresh browser instance for every test.
The following field in your JUnit UI test class will prepare a container running Chrome:
@Rule
public BrowserWebDriverContainer chrome =
new BrowserWebDriverContainer()
.withCapabilities(new ChromeOptions());Now, instead of instantiating an instance of WebDriver directly, use the following to obtain an instance inside your test methods:
RemoteWebDriver driver = chrome.getWebDriver();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 replace any references to localhost with an IP address that the Docker container can reach. Use the getTestHostIpAddress() method, e.g.:
driver.get("http://" + chrome.getTestHostIpAddress() + ":8080/");At the moment, Chrome and Firefox are supported. To switch, simply change the first parameter to the rule constructor:
new BrowserWebDriverContainer()
.withCapabilities(new ChromeOptions());or
new BrowserWebDriverContainer()
.withCapabilities(new FirefoxOptions());By default, no videos will be recorded. However, you can instruct Testcontainers to capture videos for all tests or just for failing tests.
To do this, simply add extra parameters to the rule constructor:
new BrowserWebDriverContainer()
.withCapabilities(new ChromeOptions())
.withRecordingMode(VncRecordingMode.RECORD_ALL, new File("./target/"))or if you only want videos for test failures:
new BrowserWebDriverContainer()
.withCapabilities(new ChromeOptions())
.withRecordingMode(VncRecordingMode.RECORD_FAILING, new File("./target/"))Note that the seconds parameter to withRecordingMode should be a directory where recordings can be saved.
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:
new BrowserWebDriverContainer()
//...
.withRecordingFileFactory(new CustomRecordingFileFactory())Note the factory must implement org.testcontainers.containers.RecordingFileFactory.
A few different examples are shown in ChromeWebDriverContainerTest.java.
Add the following dependency to your pom.xml/build.gradle file:
testCompile "org.testcontainers:selenium:{{latest_version}}"<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>selenium</artifactId>
<version>{{latest_version}}</version>
<scope>test</scope>
</dependency>!!! hint Adding this Testcontainers library JAR will not automatically add a Selenium Webdriver JAR to your project. You should ensure that your project also has suitable Selenium dependencies in place, for example:
```groovy tab='Gradle'
compile "org.seleniumhq.selenium:selenium-remote-driver:3.141.59"
```
```xml tab='Maven'
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>3.141.59</version>
</dependency>
```
Testcontainers will try and match the version of the Dockerized browser to whichever version of Selenium is found on the classpath
| Back | FazBrowse Home | New Git URL |