Skip to content

Commit 0d925cb

Browse files
committed
Merge branch 'develop' into update-from-template-merged
2 parents 743c5c6 + e0c85ea commit 0d925cb

File tree

21 files changed

+1440
-40
lines changed

21 files changed

+1440
-40
lines changed

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ body:
1414
attributes:
1515
label: "Checklist"
1616
options:
17-
- label: "I am able to reproduce the bug with the [latest version](https://github.com/xdev-software/template-placeholder/releases/latest)"
17+
- label: "I am able to reproduce the bug with the [latest version](https://github.com/xdev-software/testcontainers-selenium/releases/latest)"
1818
required: true
19-
- label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/template-placeholder/issues) or [closed](https://github.com/xdev-software/template-placeholder/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
19+
- label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/testcontainers-selenium/issues) or [closed](https://github.com/xdev-software/testcontainers-selenium/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
2020
required: true
2121
- label: "I have taken the time to fill in all the required details. I understand that the bug report will be dismissed otherwise."
2222
required: true

.github/ISSUE_TEMPLATE/enhancement.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ body:
1212
attributes:
1313
label: "Checklist"
1414
options:
15-
- label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/template-placeholder/issues) or [closed](https://github.com/xdev-software/template-placeholder/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
15+
- label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/testcontainers-selenium/issues) or [closed](https://github.com/xdev-software/testcontainers-selenium/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
1616
required: true
1717
- label: "I have taken the time to fill in all the required details. I understand that the feature request will be dismissed otherwise."
1818
required: true

.github/ISSUE_TEMPLATE/question.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ body:
1212
attributes:
1313
label: "Checklist"
1414
options:
15-
- label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/template-placeholder/issues) or [closed](https://github.com/xdev-software/template-placeholder/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
15+
- label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/testcontainers-selenium/issues) or [closed](https://github.com/xdev-software/testcontainers-selenium/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
1616
required: true
1717
- label: "I have taken the time to fill in all the required details. I understand that the question will be dismissed otherwise."
1818
required: true

.github/workflows/check-build.yml

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jobs:
4343
cache: 'maven'
4444

4545
- name: Build with Maven
46-
run: ./mvnw -B clean package
46+
run: ./mvnw -B clean package -P run-integration-tests
4747

4848
- name: Check for uncommited changes
4949
run: |
@@ -63,13 +63,6 @@ jobs:
6363
exit 1
6464
fi
6565
66-
- name: Upload demo files
67-
uses: actions/upload-artifact@v4
68-
with:
69-
name: demo-files-java-${{ matrix.java }}
70-
path: ${{ env.DEMO_MAVEN_MODULE }}/target/${{ env.DEMO_MAVEN_MODULE }}.jar
71-
if-no-files-found: error
72-
7366
checkstyle:
7467
runs-on: ubuntu-latest
7568
if: ${{ github.event_name != 'pull_request' || !startsWith(github.head_ref, 'renovate/') }}

.run/Run Demo.run.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<component name="ProjectRunConfigurationManager">
22
<configuration default="false" name="Run Demo" type="Application" factoryName="Application">
33
<option name="MAIN_CLASS_NAME" value="software.xdev.Application" />
4-
<module name="template-placeholder-demo" />
4+
<module name="testcontainers-selenium-demo" />
55
<option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
66
<extension name="coverage">
77
<pattern>

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# 1.0.2
2+
* Updated dependencies
3+
4+
# 1.0.1
5+
Rename artifactId from ``testcontainers-java-selenium`` to ``testcontainers-selenium``
6+
7+
# 1.0.0
8+
<i>Initial release</i>

CONTRIBUTING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ You should have the following things installed:
3434
* Ensure that the JDK/Java-Version is correct
3535

3636

37-
## Releasing [![Build](https://img.shields.io/github/actions/workflow/status/xdev-software/template-placeholder/release.yml?branch=master)](https://github.com/xdev-software/template-placeholder/actions/workflows/release.yml)
37+
## Releasing [![Build](https://img.shields.io/github/actions/workflow/status/xdev-software/testcontainers-selenium/release.yml?branch=master)](https://github.com/xdev-software/testcontainers-selenium/actions/workflows/release.yml)
3838

3939
Before releasing:
40-
* Consider doing a [test-deployment](https://github.com/xdev-software/template-placeholder/actions/workflows/test-deploy.yml?query=branch%3Adevelop) before actually releasing.
40+
* Consider doing a [test-deployment](https://github.com/xdev-software/testcontainers-selenium/actions/workflows/test-deploy.yml?query=branch%3Adevelop) before actually releasing.
4141
* Check the [changelog](CHANGELOG.md)
4242

4343
If the ``develop`` is ready for release, create a pull request to the ``master``-Branch and merge the changes

LICENSE

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@
187187
identification within third-party archives.
188188

189189
Copyright 2024 XDEV Software
190+
Copyright 2015-2024 Testcontainers contributors
190191

191192
Licensed under the Apache License, Version 2.0 (the "License");
192193
you may not use this file except in compliance with the License.

README.md

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,33 @@
1-
[![Latest version](https://img.shields.io/maven-central/v/software.xdev/template-placeholder?logo=apache%20maven)](https://mvnrepository.com/artifact/software.xdev/template-placeholder)
2-
[![Build](https://img.shields.io/github/actions/workflow/status/xdev-software/template-placeholder/check-build.yml?branch=develop)](https://github.com/xdev-software/template-placeholder/actions/workflows/check-build.yml?query=branch%3Adevelop)
3-
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=xdev-software_template-placeholder&metric=alert_status)](https://sonarcloud.io/dashboard?id=xdev-software_template-placeholder)
1+
[![Latest version](https://img.shields.io/maven-central/v/software.xdev/testcontainers-selenium?logo=apache%20maven)](https://mvnrepository.com/artifact/software.xdev/testcontainers-selenium)
2+
[![Build](https://img.shields.io/github/actions/workflow/status/xdev-software/testcontainers-selenium/check-build.yml?branch=develop)](https://github.com/xdev-software/testcontainers-selenium/actions/workflows/check-build.yml?query=branch%3Adevelop)
3+
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=xdev-software_testcontainers-selenium&metric=alert_status)](https://sonarcloud.io/dashboard?id=xdev-software_testcontainers-selenium)
44

5-
# template-placeholder
5+
# <img src="https://raw.githubusercontent.com/SeleniumHQ/seleniumhq.github.io/690acbad7b4bf4656f116274809765db64e6ccf7/website_and_docs/static/images/logos/webdriver.svg" height=24 /> Selenium/WebDriver re-implementation for Testcontainers Java
66

7+
A re-implementation of [Testcontainer Selenium/WebDriver](https://java.testcontainers.org/modules/webdriver_containers/) with the following improvements:
8+
* It uses [Selenium's video recorder](https://github.com/SeleniumHQ/docker-selenium/blob/trunk/README.md#video-recording)
9+
* Doesn't require VNC
10+
* No VNC Server started in the browser container (unless explicitly stated) → Saves memory
11+
* Uses [Selenium's implementation](https://github.com/SeleniumHQ/docker-selenium/tree/trunk/Video) and isn't [based](https://github.com/testcontainers/vnc-recorder) on [some python code from 2010](https://pypi.org/project/vnc2flv/#history)
12+
* Way more customization options for e.g. ``framerate``, ``codec``, ``preset`` ...
13+
* Uses ``mp4`` as default recording format (wider support in comparison to ``flv``)
14+
* [Renders while saving the video](https://github.com/SeleniumHQ/docker-selenium/blob/4c572afd1173b5bd49fa2def3b54ea552fccee85/Video/video.sh#L126) (not when finished which takes additional time)
15+
* Stops the recorder before saving the file so that there is no way that [it runs forever](https://github.com/testcontainers/testcontainers-java/discussions/6229).
16+
* Automatically tries to select a alternative Selenium version for the docker image if it [doesn't exist](https://github.com/SeleniumHQ/docker-selenium/issues/1979).
17+
* Added support for [NoVNC](https://github.com/SeleniumHQ/docker-selenium/blob/trunk/README.md#using-your-browser-no-vnc-client-is-needed) so that no dedicated VNC client is required
18+
* Improve creation of video filenames
19+
* Removed hard dependency on Selenium-Java.<br/>Only required when using ``CapabilitiesBrowserWebDriverContainer``
20+
* Everything can be ``@Override``n if required
21+
* Caches "Selenium version detection via classpath" so that it's not invoked everytime you build a new container
22+
23+
## Usage
24+
Usage is very similar to [Testcontainers default implementation](https://java.testcontainers.org/modules/webdriver_containers/).
25+
26+
Make sure to remove the original Testcontainer Webdrivers dependency to avert any mix ups while using the library.
27+
For more information take a look at [our demo](./testcontainers-selenium-demo/src/main/java/software/xdev/Application.java).
728

829
## Installation
9-
[Installation guide for the latest release](https://github.com/xdev-software/template-placeholder/releases/latest#Installation)
30+
[Installation guide for the latest release](https://github.com/xdev-software/testcontainers-selenium/releases/latest#Installation)
1031

1132
## Support
1233
If you need support as soon as possible and you can't wait for any pull request, feel free to use [our support](https://xdev.software/en/services/support).
@@ -15,4 +36,6 @@ If you need support as soon as possible and you can't wait for any pull request,
1536
See the [contributing guide](./CONTRIBUTING.md) for detailed instructions on how to get started with our project.
1637

1738
## Dependencies and Licenses
18-
View the [license of the current project](LICENSE) or the [summary including all dependencies](https://xdev-software.github.io/template-placeholder/dependencies)
39+
View the [license of the current project](LICENSE) or the [summary including all dependencies](https://xdev-software.github.io/testcontainers-selenium/dependencies)
40+
41+
<sub>Disclaimer: This is not an official Testcontainers/Selenium product and not associated</sub>

SECURITY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
## Reporting a Vulnerability
44

5-
Please report a security vulnerability [on GitHub Security Advisories](https://github.com/xdev-software/template-placeholder/security/advisories/new).
5+
Please report a security vulnerability [on GitHub Security Advisories](https://github.com/xdev-software/testcontainers-selenium/security/advisories/new).

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<modelVersion>4.0.0</modelVersion>
66

77
<groupId>software.xdev</groupId>
8-
<artifactId>template-placeholder-root</artifactId>
9-
<version>1.0.0-SNAPSHOT</version>
8+
<artifactId>testcontainers-selenium-root</artifactId>
9+
<version>1.0.3-SNAPSHOT</version>
1010
<packaging>pom</packaging>
1111

1212
<organization>
@@ -15,8 +15,8 @@
1515
</organization>
1616

1717
<modules>
18-
<module>template-placeholder</module>
19-
<module>template-placeholder-demo</module>
18+
<module>testcontainers-selenium</module>
19+
<module>testcontainers-selenium-demo</module>
2020
</modules>
2121

2222
<properties>

renovate.json5

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"packageRules": [
55
{
66
"description": "Ignore project internal dependencies",
7-
"packagePattern": "^software.xdev:template-placeholder",
7+
"packagePattern": "^software.xdev:testcontainers-selenium",
88
"datasources": [
99
"maven"
1010
],
@@ -19,6 +19,26 @@
1919
"maven"
2020
],
2121
"groupName": "net.sourceforge.pmd"
22+
},
23+
{
24+
"description": "Group org.slf4j",
25+
"matchPackagePatterns": [
26+
"^org.slf4j"
27+
],
28+
"datasources": [
29+
"maven"
30+
],
31+
"groupName": "org.slf4j"
32+
},
33+
{
34+
"description": "Group org.seleniumhq.selenium",
35+
"matchPackagePatterns": [
36+
"^org.seleniumhq.selenium"
37+
],
38+
"datasources": [
39+
"maven"
40+
],
41+
"groupName": "org.seleniumhq.selenium"
2242
}
2343
]
2444
}

template-placeholder-demo/pom.xml renamed to testcontainers-selenium-demo/pom.xml

Lines changed: 69 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66

77
<parent>
88
<groupId>software.xdev</groupId>
9-
<artifactId>template-placeholder-root</artifactId>
10-
<version>1.0.0-SNAPSHOT</version>
9+
<artifactId>testcontainers-selenium-root</artifactId>
10+
<version>1.0.3-SNAPSHOT</version>
1111
</parent>
1212

13-
<artifactId>template-placeholder-demo</artifactId>
14-
<version>1.0.0-SNAPSHOT</version>
13+
<artifactId>testcontainers-selenium-demo</artifactId>
14+
<version>1.0.3-SNAPSHOT</version>
1515
<packaging>jar</packaging>
1616

1717
<organization>
@@ -29,12 +29,76 @@
2929
<mainClass>software.xdev.Application</mainClass>
3030
</properties>
3131

32+
<dependencyManagement>
33+
<dependencies>
34+
<dependency>
35+
<groupId>org.seleniumhq.selenium</groupId>
36+
<artifactId>selenium-dependencies-bom</artifactId>
37+
<version>4.24.0</version>
38+
<type>pom</type>
39+
<scope>import</scope>
40+
</dependency>
41+
</dependencies>
42+
</dependencyManagement>
43+
3244
<dependencies>
3345
<dependency>
3446
<groupId>software.xdev</groupId>
35-
<artifactId>template-placeholder</artifactId>
47+
<artifactId>testcontainers-selenium</artifactId>
3648
<version>${project.version}</version>
3749
</dependency>
50+
51+
<dependency>
52+
<groupId>org.slf4j</groupId>
53+
<artifactId>slf4j-simple</artifactId>
54+
<version>2.0.16</version>
55+
</dependency>
56+
57+
<dependency>
58+
<groupId>org.seleniumhq.selenium</groupId>
59+
<artifactId>selenium-remote-driver</artifactId>
60+
<exclusions>
61+
<!-- Tracing is not needed -->
62+
<exclusion>
63+
<groupId>io.opentelemetry</groupId>
64+
<artifactId>*</artifactId>
65+
</exclusion>
66+
<!-- No unused, beta-grade, RUST blobs -->
67+
<exclusion>
68+
<groupId>org.seleniumhq.selenium</groupId>
69+
<artifactId>selenium-manager</artifactId>
70+
</exclusion>
71+
</exclusions>
72+
</dependency>
73+
74+
<dependency>
75+
<groupId>org.seleniumhq.selenium</groupId>
76+
<artifactId>selenium-support</artifactId>
77+
</dependency>
78+
79+
<dependency>
80+
<groupId>org.seleniumhq.selenium</groupId>
81+
<artifactId>selenium-firefox-driver</artifactId>
82+
<exclusions>
83+
<!-- No unused, beta-grade, RUST blobs -->
84+
<exclusion>
85+
<groupId>org.seleniumhq.selenium</groupId>
86+
<artifactId>selenium-manager</artifactId>
87+
</exclusion>
88+
</exclusions>
89+
</dependency>
90+
91+
<dependency>
92+
<groupId>org.seleniumhq.selenium</groupId>
93+
<artifactId>selenium-chrome-driver</artifactId>
94+
<exclusions>
95+
<!-- No unused, beta-grade, RUST blobs -->
96+
<exclusion>
97+
<groupId>org.seleniumhq.selenium</groupId>
98+
<artifactId>selenium-manager</artifactId>
99+
</exclusion>
100+
</exclusions>
101+
</dependency>
38102
</dependencies>
39103

40104
<build>
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package software.xdev;
2+
3+
import java.io.IOException;
4+
import java.io.UncheckedIOException;
5+
import java.nio.file.Path;
6+
import java.util.List;
7+
import java.util.Optional;
8+
9+
import org.openqa.selenium.By;
10+
import org.openqa.selenium.Capabilities;
11+
import org.openqa.selenium.chrome.ChromeOptions;
12+
import org.openqa.selenium.firefox.FirefoxOptions;
13+
import org.openqa.selenium.remote.RemoteWebDriver;
14+
import org.testcontainers.lifecycle.TestDescription;
15+
16+
import software.xdev.testcontainers.selenium.containers.browser.BrowserWebDriverContainer;
17+
import software.xdev.testcontainers.selenium.containers.browser.CapabilitiesBrowserWebDriverContainer;
18+
19+
20+
public final class Application
21+
{
22+
@SuppressWarnings("resource") // It's getting closed...
23+
public static void main(final String[] args)
24+
{
25+
final Path recordingDir = Path.of("target/records");
26+
// noinspection ResultOfMethodCallIgnored
27+
recordingDir.toFile().mkdirs();
28+
29+
for(final Capabilities capabilities : List.of(new ChromeOptions(), new FirefoxOptions()))
30+
{
31+
try(final var browserContainer = new CapabilitiesBrowserWebDriverContainer<>(capabilities)
32+
.withRecordingMode(BrowserWebDriverContainer.RecordingMode.RECORD_ALL)
33+
.withRecordingDirectory(recordingDir))
34+
{
35+
browserContainer.start();
36+
final RemoteWebDriver remoteWebDriver =
37+
new RemoteWebDriver(browserContainer.getSeleniumAddressURI().toURL(), capabilities, false);
38+
39+
remoteWebDriver.manage().window().maximize();
40+
41+
remoteWebDriver.get(capabilities instanceof FirefoxOptions ? "about:support" : "chrome://version");
42+
Thread.sleep(1000); // Simulate Test work
43+
remoteWebDriver.findElements(By.tagName("body"));
44+
45+
remoteWebDriver.quit();
46+
47+
// Wait a moment until everything is safe on tape
48+
Thread.sleep(100);
49+
50+
browserContainer.afterTest(new TestDescription()
51+
{
52+
@Override
53+
public String getTestId()
54+
{
55+
return "demo-" + capabilities.getBrowserName();
56+
}
57+
58+
@Override
59+
public String getFilesystemFriendlyName()
60+
{
61+
return "demo-" + capabilities.getBrowserName();
62+
}
63+
}, Optional.empty());
64+
}
65+
catch(final InterruptedException ite)
66+
{
67+
Thread.currentThread().interrupt();
68+
}
69+
catch(final IOException ioe)
70+
{
71+
throw new UncheckedIOException(ioe);
72+
}
73+
}
74+
}
75+
76+
private Application()
77+
{
78+
}
79+
}

0 commit comments

Comments
 (0)