Skip to content

Upgrade webdrivermanager 5.6.2 -> 6.0.1 (highest 6.x runnable on the pinned httpclient5 5.2.1) - #204

Open
devin-ai-integration[bot] wants to merge 1 commit into
mainfrom
devin/1785171725-upgrade-webdrivermanager-6.0.1
Open

Upgrade webdrivermanager 5.6.2 -> 6.0.1 (highest 6.x runnable on the pinned httpclient5 5.2.1)#204
devin-ai-integration[bot] wants to merge 1 commit into
mainfrom
devin/1785171725-upgrade-webdrivermanager-6.0.1

Conversation

@devin-ai-integration

Copy link
Copy Markdown

Summary

Upgrades WebDriverManager to the highest 6.x release that actually runs on this project's classpath. Java 11 is not the limiting factor — every WDM 6.x jar is compiled to bytecode major 52 (Java 8) — but httpclient5 is: WDM 6.1.0+ calls org.apache.hc.client5.http.ssl.TlsSocketStrategy, introduced in httpclient5 5.4, and this repo pins httpclient5:5.2.1 (owned by a different session). So the target is 6.0.1, the last 6.x that works against httpclient5 5.2.1.

-    testImplementation 'io.github.bonigarcia:webdrivermanager:5.6.2'
+    testImplementation 'io.github.bonigarcia:webdrivermanager:6.0.1'

Why not 6.3.4 (latest 6.x)

WebDriverManager.chromedriver().setup() was run on the real resolved testRuntimeClasspath (JDK 11) with each candidate jar swapped in:

WDM result against pinned httpclient5 5.2.1
5.6.2 (baseline) SETUP_OK
6.0.0 SETUP_OK
6.0.1 SETUP_OK
6.1.0 / 6.1.1 / 6.2.0 / 6.3.0 / 6.3.4 NoClassDefFoundError: org/apache/hc/client5/http/ssl/TlsSocketStrategy

Going higher would require bumping httpclient5 to >= 5.4, which is out of scope for this PR (one artifact family per PR, and httpclient5 is another session's dependency). Note that Spring Boot's dependency-management plugin pins httpclient5 by rule, so WDM 6.3.4's own request for httpclient5:5.6 is silently downgraded to 5.2.1 — a green build alone would have hidden this; only the runtime smoke test surfaced it.

Also verified: 6.0.1 is a stable release published 2025-04-02 (well over 7 days old), no -M/-RC/-alpha/-beta.

BOM / ext overrides

None needed. webdrivermanager is not managed by the Spring Boot 2.6.3 BOM, so the literal version in build.gradle is authoritative.

dependencyInsight evidence

$ JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 ./gradlew -q dependencyInsight \
    --configuration testRuntimeClasspath --dependency io.github.bonigarcia:webdrivermanager

io.github.bonigarcia:webdrivermanager:6.0.1 (selected by rule)
   variant "runtime" [ ... ]

io.github.bonigarcia:webdrivermanager:6.0.1
\--- testRuntimeClasspath

No conflict resolution downgrade, and only one WDM version on the classpath.

Selenium is unaffected

dependencyInsight --dependency org.seleniumhq.selenium produces byte-identical output before and after this change. WDM declares selenium-java at provided scope, so it contributes nothing to the Gradle runtime graph and drags no Selenium version onto the classpath.

For the record, the resolved Selenium graph (unchanged by this PR, listed here so it is not mistaken for a regression) is already split on main: selenium-java:4.15.0 is declared explicitly, while every sub-artifact (selenium-api, selenium-remote-driver, selenium-support, ...) is forced to 3.141.59 (selected by rule) by the Spring Boot 2.6.3 BOM's managed selenium.version. That pre-dates this change and belongs to whoever owns the Selenium coordinate.

httpclient5 also resolves to 5.2.1 (selected by rule) both before and after.

API migration

No source changes needed. The only usages are in src/test/java/io/spring/selenium/tests/BaseTest.java:

WebDriverManager.chromedriver().setup();
WebDriverManager.firefoxdriver().setup();
WebDriverManager.edgedriver().setup();

All three static factories and setup() exist with identical signatures in 6.0.1 (javap on the 6.x jar confirms public static synchronized WebDriverManager chromedriver() and public synchronized void setup()). Nothing else in the repo references io.github.bonigarcia or the literal string 5.6.2, so there were no stale docs/CI references to update. compileTestJava compiles the Selenium sources cleanly:

$ JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 ./gradlew compileTestJava
> Task :compileTestJava
BUILD SUCCESSFUL in 1s

Gate

$ JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 ./gradlew clean test spotlessCheck -x jacocoTestCoverageVerification
> Task :test
> Task :spotlessCheck
BUILD SUCCESSFUL in 16s
tests failures errors skipped
baseline on clean main (3037fa5) 68 0 0 0
this branch 68 0 0 0

Same test count, zero new failures, spotlessCheck green (spotlessApply run before committing). The Selenium E2E suite is a separate TestNG seleniumTest task excluded from test, so it is not part of the gate — it was validated separately by the runtime setup() smoke test above.

Pre-existing on base, not addressed here

  • jacocoTestCoverageVerification fails — 0.33 instruction coverage vs. the 0.80 rule in build.gradle. Fails identically on untouched main; CI runs ./gradlew clean test -x jacocoTestCoverageVerification, and this PR excludes it the same way. Threshold not lowered, no tests added to game coverage.
  • Selenium classpath splitselenium-java:4.15.0 alongside BOM-forced 3.141.59 sub-artifacts (see above). Present on main, unchanged by this PR, and out of scope.

Link to Devin session: https://partner-workshops.devinenterprise.com/sessions/ab8d8dbe8e2e41fe8f1957054d98bf40
Requested by: @mbatchelor81

Highest 6.x compatible with the pinned httpclient5 5.2.1; 6.1.0+ requires
httpclient5 >= 5.4 (org.apache.hc.client5.http.ssl.TlsSocketStrategy).
No source changes: WebDriverManager.chromedriver()/firefoxdriver()/edgedriver().setup()
are unchanged in 6.x.
@mbatchelor81 mbatchelor81 self-assigned this Jul 27, 2026
@devin-ai-integration

Copy link
Copy Markdown
Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant