Selenium 4.41 Released!

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

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

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


Selenium 4.41 Released

✨ Highlights

  • [DotNet] Major BiDi expansion in the Emulation module (SetTouchOverride, SetNetworkConditions, expanded SetViewport), a new Speculation module, and async command dispatch throughout — including breaking changes that make Selenium Manager and the driver service start/stop asynchronously.
  • [Java] Continued JSpecify nullability coverage across all BiDi packages, plus a JSON parsing fix for numbers with an exponent.
  • [Grid] Multiple Dynamic Grid fixes: a Distributor deadlock, WebSocket connection counter leaks, thread exhaustion in health checks, and new Kubernetes cluster and basic-auth support.
  • [Python] New BiDi set_screen_settings_override emulation command, Edge BiDi tests enabled, and a large Bazel/lint modernization pass.
  • [Ruby] Debug logging on by default, generated atoms no longer stored in the repo, and dependency/lint updates.
  • [Build] A sweeping overhaul of the release and CI pipeline, and the retirement of the legacy Rake/CrazyFun build system.

📦 Notable Changes

Java

  • Expanded JSpecify nullability annotations across the bidi.browser, bidi.browsingcontext, bidi.emulation, bidi.module, bidi.log, bidi.network, and bidi.script packages.
  • Implemented BiDi emulation.setScreenSettingsOverride.
  • Added JSpecify annotations for LoadableComponent and SlowLoadableComponent.
  • Fixed JSON parsing of numbers with an exponent.
  • Improved the error message when the Grid dies, and fixed a secure/non-secure test failure.

Python

  • Added BiDi set_screen_settings_override emulation command and enabled Edge BiDi tests.
  • Modularized the Bazel build with per-module targets and integrated mypy type checking.
  • Switched to lazy imports in webdriver/__init__.py and split ruff into dedicated format/check targets.
  • Removed type stub packages from runtime dependencies and bumped dev dependencies to fix a vulnerability.

Ruby

  • Driver logs now output by default when debug is enabled.
  • Removed stored atoms in favor of generating them at build time.
  • Updated lint configuration, fixed rubocop offenses, and added missing unit tests.

.NET

  • Added SetTouchOverride, SetNetworkConditions, and expanded SetViewport/AddPreloadScript/MovePointer in the BiDi Emulation and Input modules.
  • Added a new BiDi Speculation module and made commands/events fully immutable.
  • Made Selenium Manager and the driver service start/stop asynchronous (breaking changes), and added CancellationToken support for async commands and event registration.
  • Fixed several logging issues: truncated internal log messages, streamed Selenium Manager output, and corrected devtools inline docs generation.

Grid

  • Fixed a potential deadlock in the Distributor and WebSocket connection counter leaks in ProxyNodeWebsockets.
  • Added a session event API for server-side event bus integration.
  • Added Kubernetes cluster support and basic-auth credential passing for Dynamic Grid standalone.
  • Fixed thread exhaustion in the node health-check cycle and session retries when a RemoteNode executor is shutting down.

Build & Infra

  • Continued the Bazel migration: per-language patch releases, consolidated nightly and pre-release workflows, and file-level test target indexing.
  • Removed the legacy Rake/CrazyFun build system entirely.
  • Added linting support for .NET and unified SE_DEBUG warning behavior across Python, Java, and JavaScript.

🐳 Docker Selenium

  • Docker: Video recorder/uploader now listen on session events (#3070)
  • Docker: Fixed spurious warning messages when basic auth isn’t configured (#3071)
  • K8s: Updated KEDA to 2.19.0 in the Helm chart (#3068)
  • 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

Selenium Docs & Website

Docker Selenium

Mårten Svantesson

Mårten Svantesson

Selenium Team Members

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

ian zhang

ian zhang

Andrei Solntsev

Andrei Solntsev

David Burns

David Burns

Corey Goldberg

Corey Goldberg

Swastik Baranwal

Swastik Baranwal

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Navin Chandra

Navin Chandra

Nikolay Borisenko

Nikolay Borisenko

Michael Render

Michael Render

Pallavi Sharma

Pallavi Sharma

Titus Fortner

Titus Fortner

Viet Nguyen Duc

Viet Nguyen Duc

Stay tuned for updates by following SeleniumHQ on:

Happy automating!