Selenium News and Updates: A Smattering of Selenium 94
Selenium 4 arrived in October 2021 with WebDriver and Grid changes. Here is what the release covered and what “94” may mean.
Selenium 4.0.0 was announced on October 13, 2021, for Java, .NET, Python, Ruby, and JavaScript. It introduced WebDriver capabilities such as relative locators and rebuilt Selenium Grid for standalone, hub-and-node, and distributed deployments. The “94” in this title may refer to Chrome DevTools Protocol (CDP) 94 support in a Ruby DevTools binding changelog; the available historical record does not establish that this was the title’s intended meaning.
This is a historical release brief, not guidance to install Selenium 4.0.0 today. The practical takeaway is to review your use of public versus internal APIs before upgrading and to plan any Grid changes around how your team runs browsers.
1. When was Selenium 4 released?
The Selenium project announced Selenium 4.0.0 on October 13, 2021. Its official 2021 archive also lists Selenium 4 Release Candidate 2 on October 2, 2021. The announcement covered the Java, .NET, Python, Ruby, and JavaScript bindings. Read the Selenium 4.0.0 announcement and browse the official 2021 archive.
The announcement described the upgrade as intended to be straightforward for users relying on public APIs, while recognizing that internal or deprecated APIs could cause migration issues. Selenium author Simon Stewart wrote, “We’ve worked hard to ensure that the public APIs remain as stable as possible.” That is a compatibility aim, not a promise that every existing test suite upgrades without changes.
2. What changed in Selenium 4?
WebDriver capabilities
The release announcement highlighted relative locators and new ways to handle work such as waiting for DOM changes and inspecting JavaScript errors. These capabilities can help test authors express relationships between elements and diagnose browser-side behavior. They do not remove the need to make tests resilient to application timing, changing markup, and browser differences.
Whether these changes affect your suite depends on how you use Selenium. If you depend on public APIs, the project’s stated intent was a straightforward dependency update. If your code reaches into internals or uses deprecated interfaces, identify and migrate those call sites deliberately.
A rebuilt Selenium Grid
Selenium 4’s Grid was rebuilt to support standalone, hub-and-node, and distributed deployment patterns, including Kubernetes-oriented infrastructure. The announcement also described Docker-based browser container management, a redesigned UI over GraphQL, live VNC previews, and OpenTelemetry support. These are infrastructure options and observability capabilities; choose a deployment shape that fits your existing operations and scaling needs.
| Deployment choice | When to consider it | What to review |
|---|---|---|
| Standalone | A compact Grid setup | How the Grid process and browser containers are started and maintained |
| Hub-and-node | A setup with separate coordination and browser nodes | Node registration, browser capacity, and how failures are surfaced |
| Distributed | A larger or infrastructure-managed deployment | Service topology, deployment operations, and telemetry integration |
The announcement’s Docker and Kubernetes references describe infrastructure approaches, not a requirement that every Selenium user adopt containers or Kubernetes. If your tests already run reliably with a simpler setup, first map the new Grid architecture to a concrete operational need.
3. What might “Selenium 94” mean?
The number is ambiguous. One plausible historical connection is Chrome DevTools Protocol 94: the SeleniumHQ Ruby changelog records a selenium-devtools 0.94 release that added CDP 94 and removed CDP 92. This is useful context for the number, but it does not prove that “94” in the article title refers to that changelog entry. See the Selenium Ruby changelog.
CDP support is version-specific historical context. Do not assume that a binding’s old CDP mapping tells you which protocol versions a current browser or Selenium release supports. Check the release notes and binding documentation for the versions you actually run.
4. How to approach a Selenium 4 upgrade
- Inventory your bindings and versions. Record which language bindings, browsers, drivers, and Grid components your tests use.
- Find non-public dependencies. Search the codebase for deprecated calls and any reliance on Selenium internals. Those are the likeliest places to need migration work, based on the project’s compatibility caveat.
- Upgrade in a representative branch or environment. Run a small but representative set of tests first, including tests that exercise browser startup, waits, and any Grid routing.
- Check Grid separately. If you operate Grid, decide whether to remain standalone or use hub-and-node or distributed deployment. Review container management, UI access, VNC previews, and telemetry only where relevant to your operations.
- Record the versions you validate. Keep the Selenium binding, browser, driver, and Grid versions together in your upgrade notes so later failures can be traced to a known combination.
This checklist is a practical way to apply the release’s public-API compatibility guidance; it is not an official Selenium migration procedure.
5. Troubleshooting upgrade and Grid issues
| Symptom | Likely cause | What to do |
|---|---|---|
| Compilation or import errors after updating | A deprecated interface, internal API, or binding-specific call changed | Locate the failing call, replace internal or deprecated usage with supported public APIs, and consult the release notes for the binding. |
| Tests fail around waits or DOM changes | Timing assumptions or wait behavior need review | Inspect the condition the test waits for and verify it against the actual page state; avoid treating a fixed delay as proof that the DOM is ready. |
| Browser sessions do not reach Grid nodes | Grid topology or node registration differs from the previous setup | Confirm the selected standalone, hub-and-node, or distributed arrangement and check that the relevant components can communicate. |
| Containerized browser startup fails | Docker/container management configuration or environment assumptions are mismatched | Check container availability, browser image configuration, and the Grid deployment setup used by your environment. |
| CDP-related code stops matching a browser | The historical DevTools binding version and browser protocol version do not align | Check the current binding documentation and version-specific release notes; do not rely on the old CDP 94 changelog entry for present compatibility. |
6. Capturing browser output for debugging
A reproducible screenshot can help when a test failure depends on visible page state. With Selenium, capture the current browser viewport after the test reaches the state you want to inspect. This is a debugging aid: the Selenium release announcement does not claim that Selenium 4 automatically creates or stores screenshots for you.
from selenium import webdriver
# Install the Selenium Python binding in your environment before running this example.
driver = webdriver.Chrome()
try:
driver.get("https://example.com")
driver.save_screenshot("page.png")
finally:
driver.quit()
For other language bindings, use the screenshot API provided by that binding and save the returned image bytes or file to your test artifacts. Keep screenshots tied to the failed test and its browser/version metadata so the image has useful context.
Or skip the browser setup
For a one-off website screenshot without starting a Selenium browser and driver, ScreenshotNeo provides a screenshot API. See the API documentation for parameters and response details.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
await Bun.write('shot.webp', res);
ScreenshotNeo accepts cookie and consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing status. Its MCP server offers take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. The free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.
Learn about ScreenshotNeo or sign up for 1,000 free screenshots a month, with no card.
7. Performance, reliability, and cost considerations
The Selenium release material establishes feature and architecture changes, but does not provide a benchmark for test speed, Grid throughput, reliability improvement, or operating cost. Treat those outcomes as workload- and deployment-dependent. Before changing infrastructure, compare your own run duration, queueing, browser startup failures, and operational effort across representative workloads.
For reliability, exercise the complete path your team depends on: test runner, browser/driver pair, and Grid if present. Keep version information with failures, and distinguish application timing failures from session-creation or infrastructure failures. For cost, include the resources and work involved in maintaining browser nodes and containers when comparing deployment choices; no universal cost figure follows from the announcement.
8. Frequently asked questions
Does Selenium 4 require a Grid deployment?
No. The release announcement describes multiple Grid deployment patterns, but using Selenium WebDriver does not by itself mean you must deploy Grid.
Does “94” definitely refer to CDP 94?
No. The Ruby changelog provides a plausible connection, but the title’s intended meaning is not confirmed by the available source material.
Should I install Selenium 4.0.0 now?
This article covers the 2021 launch. Choose a version based on current official release information and the browser and binding versions your project supports; the historical sources here do not establish today’s newest release.
Is the Selenium 4 upgrade guaranteed to be drop-in?
No. The project aimed to preserve public APIs, while warning that internal or deprecated API usage could create migration issues.
Sources
- Selenium 4.0.0 released, official Selenium announcement.
- Selenium official 2021 blog archive.
- SeleniumHQ Ruby changelog, historical selenium-devtools 0.94 entry.


