From 9abb30183018393d5ef9d37a68d19ed8657edacb Mon Sep 17 00:00:00 2001 From: XDEV Renovate Bot Date: Wed, 12 Aug 2026 03:47:32 +0000 Subject: [PATCH 1/4] Update xdev-software/tci action to v4.2.0 --- .github/workflows/check-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index c4f0b8d..a8c62b3 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -50,7 +50,7 @@ jobs: - name: Docker Image Cache Restore id: docker-image-cache-restore - uses: xdev-software/tci/.github/actions/docker-image-cache/restore@f686d444930db567aae0cbc8076694f8c886f479 # v4.1.0 + uses: xdev-software/tci/.github/actions/docker-image-cache/restore@5726976f1afd621ab01091ec6b0d7966bd4bb247 # v4.2.0 with: # This cache could always change however because docker images can be changed remotely if the version is not fixated # As a compromise it utilizes the hash of the pom files because when the dependencies stay the same @@ -81,7 +81,7 @@ jobs: fi - name: Docker Image Cache Save - uses: xdev-software/tci/.github/actions/docker-image-cache/save@f686d444930db567aae0cbc8076694f8c886f479 # v4.1.0 + uses: xdev-software/tci/.github/actions/docker-image-cache/save@5726976f1afd621ab01091ec6b0d7966bd4bb247 # v4.2.0 with: key: ${{ steps.docker-image-cache-restore.outputs.key }} cache-hit: ${{ steps.docker-image-cache-restore.outputs.cache-hit }} From a94372149822ecdbee2b615959f92eb99ade5e57 Mon Sep 17 00:00:00 2001 From: AB Date: Wed, 12 Aug 2026 09:59:02 +0200 Subject: [PATCH 2/4] Version detection: Use Selenium's `BuildInfo` when available --- CHANGELOG.md | 3 +++ .../browser/SeleniumVersionDetector.java | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fc4ef9..88940e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 2.1.1 +* Version detection: Use Selenium's `BuildInfo` when available + # 2.1.0 * Rename `SeleniumUtils` to `SeleniumVersionDetector` * Extract image name extraction logic diff --git a/testcontainers-selenium/src/main/java/software/xdev/testcontainers/selenium/containers/browser/SeleniumVersionDetector.java b/testcontainers-selenium/src/main/java/software/xdev/testcontainers/selenium/containers/browser/SeleniumVersionDetector.java index ff3e5f6..b38172b 100644 --- a/testcontainers-selenium/src/main/java/software/xdev/testcontainers/selenium/containers/browser/SeleniumVersionDetector.java +++ b/testcontainers-selenium/src/main/java/software/xdev/testcontainers/selenium/containers/browser/SeleniumVersionDetector.java @@ -16,6 +16,7 @@ package software.xdev.testcontainers.selenium.containers.browser; import java.io.InputStream; +import java.lang.reflect.Method; import java.net.URL; import java.util.Enumeration; import java.util.HashSet; @@ -63,6 +64,15 @@ public static synchronized String determineClasspathSeleniumVersion() return cachedVersion; } + try + { + return determineVersionUsingSeleniumBuildInfo(); + } + catch(final Exception ex) + { + LOG.debug("Resolution using Selenium's built in BuildInfo failed, falling back to manifest", ex); + } + final Set seleniumVersions = new HashSet<>(); try { @@ -112,6 +122,23 @@ public static synchronized String determineClasspathSeleniumVersion() return foundVersion; } + @SuppressWarnings("java:S112") + public static String determineVersionUsingSeleniumBuildInfo() throws Exception + { + final Class buildInfoCl = Class.forName("org.openqa.selenium.BuildInfo"); + final Method mGetReleaseLabel = buildInfoCl.getDeclaredMethod("getReleaseLabel"); + final Object instance = buildInfoCl.getDeclaredConstructor().newInstance(); + + final String version = (String)mGetReleaseLabel.invoke(instance); + if(version == null || version.isEmpty() || "unknown".equals(version)) + { + throw new IllegalStateException("Invalid version returned " + version); + } + + LOG.info("Selenium API version {} detected using Selenium BuildInfo", version); + return version; + } + /** * Read Manifest to get Selenium Version. * From 5a90adf3f19009ba35b1429bdc601334cc6d828c Mon Sep 17 00:00:00 2001 From: AB Date: Wed, 12 Aug 2026 10:16:52 +0200 Subject: [PATCH 3/4] Fix tests on Selenium 4.47 See also: https://github.com/SeleniumHQ/selenium/issues/17905 --- .../xdev/testcontainers/selenium/SimpleContainerTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/testcontainers-selenium/src/test/java/software/xdev/testcontainers/selenium/SimpleContainerTest.java b/testcontainers-selenium/src/test/java/software/xdev/testcontainers/selenium/SimpleContainerTest.java index 726144a..e344f0f 100644 --- a/testcontainers-selenium/src/test/java/software/xdev/testcontainers/selenium/SimpleContainerTest.java +++ b/testcontainers-selenium/src/test/java/software/xdev/testcontainers/selenium/SimpleContainerTest.java @@ -59,7 +59,8 @@ void simpleCheck(final Capabilities capabilities) new RemoteWebDriver(browserContainer.getSeleniumAddressURI().toURL(), capabilities, false); remoteWebDriver.manage().window().maximize(); - remoteWebDriver.get(capabilities instanceof FirefoxOptions ? "about:support" : "chrome://version"); + // Query file due to https://github.com/SeleniumHQ/selenium/issues/17905 + remoteWebDriver.get("file:///proc/cpuinfo"); remoteWebDriver.findElements(By.tagName("body")); remoteWebDriver.quit(); From 4535c5fe9c5a767cec876ca85a3b21833808e006 Mon Sep 17 00:00:00 2001 From: AB Date: Wed, 12 Aug 2026 10:21:52 +0200 Subject: [PATCH 4/4] Improve cache save --- .github/workflows/check-build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index a8c62b3..c08a6e8 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -82,6 +82,8 @@ jobs: - name: Docker Image Cache Save uses: xdev-software/tci/.github/actions/docker-image-cache/save@5726976f1afd621ab01091ec6b0d7966bd4bb247 # v4.2.0 + # Only save cache for one instance, otherwise they try to overwrite each other + if: ${{ matrix.java == 25 }} with: key: ${{ steps.docker-image-cache-restore.outputs.key }} cache-hit: ${{ steps.docker-image-cache-restore.outputs.cache-hit }}