Selenium 4.44.0 - new CLI, Redis Grid distributor, BiDi cleanup

   |   3 minute read   |   Using 617 words

Selenium 4.44.0 shipped on May 12, 2026. The release introduces an initial Selenium CLI tool, makes the Redis backed Grid Distributor a built in option, and lands a long round of dotnet and Python BiDi cleanup. It is a regular release, not a prerelease.

The full release notes and downloads are on the GitHub release page.

A new Selenium CLI tool

PR #17327 introduces the initial Selenium CLI tool. The release notes do not document a full command surface yet, so treat this as a foundation rather than a finished UX. Two related Rust commands ship next to it:

  • PR #17364 adds a --skills flag that installs a skills.md file.
  • PR #17405 adds a command to install rules/rules.md into a repository.

If you maintain test infrastructure for Selenium, the new CLI is the bit to watch in the next few releases.

Grid: Redis distributor and legacy event compatibility

Two Grid changes matter for operators:

  • PR #17396 makes the Distributor Redis backed implementation a built in option. No more custom build to use Redis as the distributor backing store.
  • PR #17343 makes the Grid accept legacy session-closed event payloads, which keeps older nodes talking to newer hubs during rolling upgrades.

If you run a Selenium Grid on Kubernetes or on a shared host pool, both of these reduce upgrade friction.

Python BiDi gets a real code generator

The Python bindings move BiDi off hand curated files:

  • PR #16914 adds a CDDL 2 Python generator.
  • PR #17266 switches the bindings to use the generated BiDi files instead of the hand curated ones.
  • PR #17378 extends the create-bidi-src generator to cover the full set of BiDi adjacent CDDL files.
  • PR #17371 implements high level APIs for script.
  • PR #17392 improves docstrings in the generated BiDi modules.

Result: less drift between the BiDi spec and the Python client, plus a higher level surface for script work.

Smaller Python items in the same release:

  • PR #17415 adds an edge service argument to inherit the browser i/o streams.
  • PR #17368 bumps Python dependencies.

dotnet: BiDi alignment, signing, and a breaking option

The dotnet bindings get a lot of attention. Highlights:

  • PR #17330 and PR #17331 statically declare BiDi commands and events.
  • PR #17336, PR #17337, and PR #17338 align SetDownloadBehavior, ContinueWithAuth, and the polymorphic SetGeolocation commands.
  • PR #17328 removes members that were planned obsolete for 4.44.
  • PR #17397 produces strongly signed assemblies.
  • PR #16557 supports UnhandledPromptBehavior as both string and map. The release notes mark this one as a breaking change.

Tests also move forward: PR #17353 targets .NET 10 and PR #17384 migrates dotnet tests to MTP. PR #17391 reduces logging interpolated string allocations.

Java fixes and nullability

The Java side is mostly cleanup and bug fixes:

  • PR #17340 deprecates the native methods inside the HttpClient interface.
  • PR #17325 specifies nullability in package org.openqa.selenium.remote.
  • PR #17348 fixes an NPE when the response status is null.
  • PR #17287 fixes a NoSuchElementException for custom By locators.
  • PR #17363 removes the ChromiumDriver.capabilities field.

If you have custom By implementations or read HTTP responses directly from the remote driver, retest after upgrading.

Upgrade notes

Three items are worth checking before a blind bump:

  • dotnet UnhandledPromptBehavior now accepts both string and map. The notes call this a breaking change, so audit call sites passing this option.
  • Java ChromiumDriver.capabilities is gone. Any code reading or writing that field needs an alternative.
  • dotnet now ships strongly signed assemblies, which can affect downstream packaging and dependency resolution.

A small Ruby quirk also lands in PR #17412: modern Firefox does not like both the -v and --log flags at the same time, so the Ruby driver no longer passes both.

Where to get it



denis256 at denis256.dev