Selenium release notes

What changed in each recent Selenium release, newest first, with links to the announcement and to the full changelog of every binding.

Selenium releases all language bindings and the Grid together, roughly once a month. This page lists the highlights of each recent release, newest first. The full announcement for every release, including contributor credits and the Docker Selenium changes, is on the blog, and the complete, line-by-line history of each binding lives in its changelog on GitHub: Java, Python, .NET, Ruby and JavaScript. Releases older than those listed here are covered by their blog posts.

Selenium 4.51

Released 9 October 2026. Announcement · GitHub release · Changelogs: Java, Python, .NET, Ruby, JavaScript

  • Java no longer depends on Guava, so ExpectedCondition no longer implements Guava’s Function interface; see the migration guide if your code relied on it. RemoteWebDriver.getClientFactory() was added and the removal of the deprecated HttpCommandExecutor fields was postponed to 4.53.
  • JavaScript publishes the browser atoms, now written in TypeScript, as a standalone @selenium/atoms npm package, and can install and uninstall web extensions through BiDi with a fallback to the classic commands.
  • Python added support for Python 3.15.
  • BiDi code generation grew again: Java gained a BiDi code generator, JavaScript can generate vendor specific classes, and the Firefox vendor CDDL is pinned from the Firefox repository.
  • Selenium Manager now degrades to empty metadata when its cache cannot be read instead of failing, and Java artifacts are signed in-process during the release.

Selenium 4.50

Released 30 September 2026. Announcement · GitHub release · Changelogs: Java, Python, .NET, Ruby, JavaScript

  • Relative locators in Java and .NET can be anchored to an element or a shadow root, not only to the driver.
  • The deprecated Firefox profile extension and certificate methods were removed from every binding; Java, Python and .NET now declare the Firefox default preferences in the binding itself.
  • BiDi in .NET added screenshot image size, a screencast destination folder, Emulation.SetTextLayoutModeOverride and activity source monitoring; Ruby can install and uninstall web extensions through BiDi; Java parses each BiDi command response once.
  • Java removed the deprecated methods from the HttpClient interface and a RemoteWebDriver now uses a single HttpClient.Factory.
  • Python applies the ClientConfig user_agent and extra_headers per connection.
  • Releases are built on remote build execution and Selenium Manager can be cross-compiled for every platform from Linux or macOS.

Selenium 4.49

Released 9 September 2026. Announcement · GitHub release · Changelogs: Java, Python, .NET, Ruby, JavaScript

  • .NET fixed a run of BiDi wire-format bugs (missing DTO fields, mismatched proxy, realm and NamespaceUri JSON property names, an oversized command-descriptor allocation) and gained browsing context screencast support.
  • Python raises typed WebDriver errors for BiDi wire error codes and runs its BiDi suite against the Grid; JavaScript, Python and Ruby derive BiDi field names and enum value types from the shared schema.
  • Grid fixed a 500 error when downloading a file whose name contains spaces.
  • Java removed the deprecated GET /session/{sessionId}/se/files/{fileName} endpoint; jars now ship with LICENSE and NOTICE files and smaller javadocs.
  • Selenium Manager fixed Windows architecture detection under WOW64 and added Chrome arm64-on-Linux support; every binding ships a prebuilt Linux arm64 binary.

Selenium 4.48

Released 27 August 2026. Announcement · GitHub release · Changelogs: Java, Python, .NET, Ruby, JavaScript

  • The shared, binding-neutral BiDi layer got stricter: Ruby rejects invalid inbound values, .NET throws on an unknown discriminator, and JavaScript gained a serialization and domain layer plus connection-level event subscriptions.
  • Ruby fixed a silent hang when receiving an oversized WebSocket frame.
  • Grid no longer forwards se:remoteUrl past the Node that consumes it, and file upload and download now work for Kubernetes, Docker and relay sessions.
  • .NET added the SetMediaFeaturesOverride BiDi command to the Emulation module.
  • Python fixed W3C capabilities built from a list of options (create_matches); JavaScript normalizes empty custom locator results and no longer exposes BiDi on Driver.

Selenium 4.47

Released 10 August 2026. Announcement · GitHub release · Changelogs: Java, Python, .NET, Ruby, JavaScript

  • Ruby now generates its BiDi domain type accessors, union variant factories and typed errors from the shared CDDL-derived schema, as JavaScript already did, and supports BiDi on Safari Preview.
  • Firefox blocks CDP access in .NET, Python and Ruby, reinforcing BiDi as the cross-browser protocol.
  • Java fixed BiDi not initializing for a RemoteWebDriver built via the builder, and fixed By.className()/By.id() misescaping non-ASCII leading digits and a By.name() bug on names containing %.
  • .NET BiDi transport factories are composable, the optional command timeout was removed from command options, and SE_*DRIVER environment variables can set driver locations.
  • Dynamic Grid videos are stored in a per-session subfolder via SE_VIDEO_SESSION_SUBFOLDER, including on Kubernetes.
  • Selenium Manager honours --browser-version for Electron, finds Chrome and Edge in known install directories, and no longer caches an empty driver version.

Selenium 4.46

Released 11 July 2026. Announcement · GitHub release · Changelogs: Java, Python, .NET, Ruby, JavaScript

  • Security: Selenium Manager guards against path traversal when extracting tar and pkg archives.
  • Java hardened its JSON parser for RFC 8259 compliance and marked all current BiDi classes as beta ahead of further changes; BiDi creation moved to RemoteWebDriver, BiDi is enabled for Safari options, and event subscriptions are tracked by subscription ID.
  • The shared binding-neutral BiDi schema is now adopted by JavaScript and Ruby; Ruby also gained ClientConfig for HTTP client customization.
  • Python routes Safari, Safari Technology Preview and WebView2 to their own handlers.
  • Selenium Manager fixed Firefox binary discovery on Linux and supports macOS .pkg/pbzx payloads; Grid fixed classpath packaging for the Redis-backed SessionQueue from 4.45.

Selenium 4.45

Released 16 June 2026. Announcement · GitHub release · Changelogs: Java, Python, .NET, Ruby, JavaScript

  • Java can drive Electron apps through ElectronOptions and ElectronDriver, and publishes a selenium-devtools-latest artifact.
  • The shared atoms (isDisplayed, getAttribute, find-elements) continued moving from Closure to TypeScript and are used by JavaScript, Ruby, Java and .NET.
  • Grid hardened its WebSocket proxy (pre-handshake race, TCP backpressure, fast-path framing) and added Redis-backed SessionQueue support next to the bundled Redis SessionMap.
  • Python gained high-level BiDi network APIs for request, response and authentication handling plus extra headers, and aligned its BiDi script module with the cross-binding design. A request handler looks like this:
    def block_request(request: Request):
        request.fail()

    driver.network.add_request_handler(["**/blank.html"], block_request)
  • Ruby deprecated the curb HTTP client and the Chromium Profile classes, and split responsibilities between Service, DriverFinder and Options.
  • Selenium Manager prunes cache entries older than 30 days and switched its TLS backend to ring; Bazel moved to 9.1 and the release pipeline is rerun-safe.

Selenium 4.44

Released 12 May 2026. Announcement · GitHub release · Changelogs: Java, Python, .NET, Ruby, JavaScript

  • A new Selenium CLI tool, an AI-assisted contribution policy, and Rust commands to install skills.md/rules.md files for agent-based contributors.
  • .NET statically declares BiDi commands and events and streams additional events, with breaking changes: obsolete members were removed and UnhandledPromptBehavior accepts a string or a map.
  • Java continued JSpecify nullability work in the remote package, deprecated the native HttpClient methods, and fixed a NoSuchElementException regression for custom By locators.
  • Grid added a Redis-backed Distributor as a built-in option and fixed latent WebSocket proxy bugs.
  • Python generates its BiDi files instead of hand-curating them and added a CDDL 2 generator; JavaScript converted the getAttribute and isDisplayed atoms to TypeScript.

Selenium 4.43

Released 10 April 2026. Announcement · GitHub release · Changelogs: Java, Python, .NET, Ruby, JavaScript

A quick follow-up to 4.42 that fixes one Grid regression.

  • Grid: a mobile slot’s stereotype browserName no longer leaks into merged session capabilities when an app-related capability is present.

Selenium 4.42

Released 9 April 2026. Announcement · GitHub release · Changelogs: Java, Python, .NET, Ruby, JavaScript

  • .NET made a large BiDi consistency pass: unified *EventArgs types, BiDi exposed through interfaces, thread-safe event registration, close to zero allocation per command or event, and any WebDriver can be disposed asynchronously.
  • Java implemented the BiDi speculation module, extended JSpecify nullability coverage, and fixed several Keys and ScriptKey correctness issues.
  • Grid hardened the WebSocket router with a transparent TCP tunnel bypass path, handling for dropped close frames and idle disconnects, and a NodeCommandInterceptor for pluggable command interception via --ext.
  • Python expanded BiDi test coverage and added type stubs for lazily imported classes.
  • JavaScript gained a Color class; the build moved to Bazel 9.

Selenium 4.41

Released 20 February 2026. Announcement · GitHub release · Changelogs: Java, Python, .NET, Ruby, JavaScript

  • .NET expanded the BiDi Emulation module (SetTouchOverride, SetNetworkConditions, a wider SetViewport), added a Speculation module, and dispatches commands asynchronously; as a breaking change, Selenium Manager and the driver service start and stop asynchronously.
  • Java continued JSpecify nullability coverage across the BiDi packages and fixed JSON parsing of numbers with an exponent.
  • Grid fixed a Distributor deadlock, WebSocket connection counter leaks and thread exhaustion in health checks, and added Kubernetes cluster and basic-auth support for Dynamic Grid.
  • Python added the BiDi set_screen_settings_override emulation command and enabled Edge BiDi tests.
  • Ruby outputs driver logs by default when debug is enabled and no longer stores generated atoms in the repository.
  • The legacy Rake/CrazyFun build system was retired after a sweeping release and CI overhaul.

Selenium 4.40

Released 18 January 2026. Announcement · GitHub release · Changelogs: Java, Python, .NET, Ruby, JavaScript

  • Chrome DevTools support covers versions 144, 143 and 142.
  • Java expanded BiDi with setScreenOrientationOverride and setNetworkConditions, and deprecated its unused logging and Guava collection classes.
  • Python introduced the LocalWebDriver base class and removed the deprecated FirefoxBinary and FTP proxy support.
  • .NET added SetScreenSettingsOverrideAsync and FileDialogOpened, exposed the input module, and reuses buffers in BiDi communication.
  • Grid improved Dynamic Grid container naming and labels, concurrent session handling, and fixed race conditions.