Selenium 4.51 Released!
Today we’re happy to announce that Selenium 4.51 has been released!
Categories:
We’re excited to announce the release of Selenium 4.51 for JavaScript, Ruby, Python, .NET, Java and the Grid! 🎉
Links to all assets can be found on our downloads page.
Selenium 4.51 Released
✨ Highlights
- [Java] Guava is no longer a dependency of the client bindings, so
ExpectedConditionno longer implements Guava’sFunctioninterface. See how to migrate if your code relies on it. - [JavaScript] The browser atoms, now written in TypeScript, are published as a standalone
@selenium/atomsnpm package, and the obsolete WebSQL and AppCache atoms were removed. - [Python] Added support for Python 3.15.
- BiDi code generation keeps growing: Java gained a BiDi code generator, JavaScript can generate vendor specific classes, and the Firefox vendor CDDL is now pinned from the Firefox repository.
- [JavaScript] The driver can install and uninstall web extensions through BiDi, falling back to the classic commands when BiDi isn’t available.
- [Java] Added
RemoteWebDriver.getClientFactory(), and the removal of the deprecatedHttpCommandExecutorfields was postponed to 4.53 to give users more time to migrate. - [Build & Infra] Java artifacts are now signed in-process, and the release workflow can recover from an incomplete Java release.
📦 Notable Changes
Java
- Removed Guava from the client bindings;
ExpectedConditionno longer implements Guava’sFunctioninterface (migration guide). - Added
RemoteWebDriver.getClientFactory()and moved theHttpCommandExecutorfield removal to 4.53. - Stopped leaking the
HttpClientwhen the driver fails to start. - Stopped passing a bare
--proxyargument to Selenium Manager. - Added a BiDi code generator, decoded nested
RemoteValues from the parsed tree instead of re-serializing each subtree, and typed field-less synthetic map records asMap<String, V>.
Python
- Added support for Python 3.15.
- Fixed the validation of the WebSocket response interval.
- Sent the BiDi
setClientWindowStaterect members as sibling parameters.
.NET
- Escaped the Edge browser path on macOS.
- Upgraded the test suite to NUnit 5, moved the NUnit infrastructure to its own project, and ran the internal tests in parallel.
Ruby
- Typed field-less synthetic map records as validated maps in the BiDi generator.
JavaScript
- Published the TypeScript atoms as the
@selenium/atomsnpm package as part of the npm release. - Removed the WebSQL and AppCache atoms.
- Added driver methods to install and uninstall web extensions with BiDi, with a classic fallback.
- Added vendor specific class generation for BiDi.
Selenium Manager
- Degraded to empty metadata when the cache can’t be read, instead of failing.
- Configured the Chrome sandbox after unpacking a Chrome for Testing build on Windows.
Build & Infra
- Signed Java artifacts in-process with in-memory PGP keys instead of
gpg-agent. - Recovered from an incomplete Java release by dropping staged repositories, and generated release docs at approval time, committing them once the packages are published.
- Pinned the Firefox BiDi vendor CDDL from the Firefox repository.
- Sourced the Java and .NET versions from a root
version.bzl, added a stub mode for using Selenium Manager with Bazel, and pinned the driver location once per test process. - Removed obsolete third party dependencies, Bazel patches with upstream fixes, and IntelliJ project files.
We thank all our contributors for their incredible efforts in making Selenium better with every release. ❤️
For a detailed look at all changes, check out the release notes.
Contributors
Special shout-out to everyone who helped the Selenium Team get this release out!
Selenium
cui fliter
Mohamed Mostafa
Yash Pardeshi
Selenium Team Members
Thanks as well to all the team members who contributed to this release:
Augustin Gottlieb
David Burns
Corey Goldberg
Diego Molina
Nikolay Borisenko
Puja Jagani
Pallavi Sharma
Titus Fortner
Stay tuned for updates by following SeleniumHQ on:
Happy automating!



