Selenium 4.50 Released!

Today we’re happy to announce that Selenium 4.50 has been released!

We’re excited to announce the release of Selenium 4.50 for JavaScript, Ruby, Python, .NET, Java and the Grid! 🎉

Links to all assets can be found on our downloads page.


Selenium 4.50 Released

✨ Highlights

  • Relative locators in Java and .NET can now be anchored to elements and shadow roots, not just the driver.
  • Firefox deprecated profile extension and certificate methods were removed from every binding, and Java, Python, and .NET now declare Firefox default preferences in the binding itself.
  • BiDi .NET added screenshot image size, a screencast destination folder, Emulation.SetTextLayoutModeOverride, and activity source monitoring; Ruby can now install and uninstall web extensions through BiDi; Java parses each BiDi command response only once.
  • [Java] Removed deprecated methods from the HttpClient interface, and a RemoteWebDriver now uses a single HttpClient.Factory.
  • [Python] ClientConfig user_agent and extra_headers are now applied per connection.
  • [Build & Infra] Releases are now built on RBE, Selenium Manager can be cross-compiled for all platforms from Linux or Mac, and the BiDi schema is generated from more upstream sources, including Mozilla’s Firefox CDDL.

📦 Notable Changes

Java

  • Supported relative locators from elements and shadow roots (shared with .NET).
  • Removed deprecated methods from the HttpClient interface; the HttpCommandExecutor client and httpClientFactory fields were restored as deprecated to ease the transition.
  • Used one HttpClient.Factory per RemoteWebDriver instance.
  • Resolved exceptions from the W3C error state in ErrorHandler, and kept guarded runnables alive when a task throws an Error.
  • Parsed each BiDi command response once, and cleared fetchError and realm listeners when closing Network and Script.

Python

  • Applied ClientConfig user_agent and extra_headers per connection.
  • Typed BaseOptions.set_capability and WebElement.get_attribute parameters.
  • Cleaned up exception chaining for ruff rule B904.
  • Moved the full GitHub Actions test suite to nightly runs, keeping fast smoke tests on PRs, and ran Grid specific tests on Windows during scheduled runs.

.NET

  • Supported relative locators from elements and shadow roots (shared with Java).
  • Added BiDi screenshot image size, a DestinationFolder option for StartScreencast, Emulation.SetTextLayoutModeOverride, activity source monitoring, and hasPlannedNavigation in ContextCreatedEventArgs.
  • Removed BiDi context from the hot path, preserved additional data in context commands, and aligned the CapabilityResponse type name with the spec.
  • NuGet packages now include license and notice files.

Ruby

  • Added driver methods to install and uninstall web extensions via BiDi.
  • Rendered WebSocket debug log lines lazily.
  • Covered BiDi key, wheel, release, and setFiles scenarios in the Input spec.

JavaScript

  • Aligned the BiDi generator with the low-level BiDi contract.
  • Ran the test suite against the Grid.

All bindings

  • Removed the deprecated Firefox profile extension and certificate methods.

Build & Infra

  • Built release artifacts on RBE, and automatically merged the release PR once required checks pass.
  • Added a Bazel flag to cross-compile all Selenium Manager binaries from Linux or Mac, and moved Selenium Manager publishing into the snapshot workflow so releases no longer skip it.
  • Generated the BiDi schema from the spec’s external specifications list, Mozilla’s Firefox CDDL, and its Commands fragment.
  • Added ADRs for a network async/event API and a behavioral contract for the low-level BiDi layer.
  • Selenium Manager now shows a proper error message when the metadata file can’t be opened.

🐳 Docker Selenium

  • [build] Update Selenium Grid 4.49.0 (#3240)
  • [ci] Take the arm64 ChromeDriver from Chrome for Testing (#3238)
  • Update Helm release redis to ^0.35.0 (#3239)
  • See all changes

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

Adam Dangoor

Adam Dangoor

Ikraam Ghoor

Ikraam Ghoor

Mohamed Mostafa

Mohamed Mostafa

Raphael Nestler

Raphael Nestler

Yash Pardeshi

Yash Pardeshi

Selenium Team Members

Thanks as well to all the team members who contributed to this release:

David Burns

David Burns

Diego Molina

Diego Molina

Alex Popov

Alex Popov

Navin Chandra

Navin Chandra

Nikolay Borisenko

Nikolay Borisenko

Puja Jagani

Puja Jagani

Pallavi Sharma

Pallavi Sharma

Titus Fortner

Titus Fortner

Viet Nguyen Duc

Viet Nguyen Duc

Stay tuned for updates by following SeleniumHQ on:

Happy automating!