Playwright vs Cypress vs Selenium — which E2E framework in 2026?
Teams choosing or upgrading E2E test frameworks in 2026 must navigate Playwright 1.58 removing _react/_vue selectors and the devtools launch option, Cypress 15.x requiring Node.js 20+ after dropping Node.js 16 in Cypress 14 (January 2025) and Node.js 18 in Cypress 15 (August 2025), and Selenium 4.41 removing CDP for Firefox in 4.29 in favor of WebDriver BiDi. Test suite migration scope, CI runner OS compatibility, and browser coverage vary significantly by framework and current version.
Blockers
- requires_version: framework/playwright/1.58.0 → runtime/nodejs
- requires_version: framework/cypress/15.x → runtime/nodejs/20plus
- dropped
- runtime/nodejs/16 — EOL 2025-01-16
- dropped
- runtime/nodejs/18 — EOL 2025-08-20
- removed
- removed
- removed from browserType.launch()
- macOS 13 WebKit discontinued
- Ubuntu 20.04 and Debian 11 lost WebKit support in v1.49
- removed for Firefox
- Lock-in via protocol/webdriver-bidi
- removed
- requires_version: framework/selenium/4.41.0 → package/selenium-java-bidi-module-subpackage
Who this is for
- enterprise
- small-team
- monorepo
- compliance
- high-scale
Candidates
Playwright 1.58
As of 2026-03-16, Playwright 1.58.0 (released January 30, 2026) is the latest stable version, requiring Node.js 20, 22, or 24 and macOS 14+ for local runs. WebSocket routing via routeWebSocket() has been available since v1.48; v1.58 removes the _react and _vue selectors, the :light selector suffix, and the devtools option from browserType.launch(); Ubuntu 20.04 and Debian 11 lost WebKit support in v1.49, and macOS 13 WebKit was discontinued in v1.58.
When to choose
Best for enterprise + compliance or high-scale + monorepo where true cross-browser coverage (Chromium, Firefox, and WebKit) and CI parallelization via sharding are non-negotiable. The single most decisive factor is WebKit/Safari engine coverage: Playwright is the only framework in this comparison that runs tests against the WebKit engine.
Tradeoffs
Supports all three major browser engines with real parallel test isolation, a built-in trace viewer, and first-class CI sharding; official docs ship ready-made config for GitHub Actions, Azure Pipelines, CircleCI, Jenkins, Bitbucket, and GitLab. The tradeoff is that upgrading through recent minor versions requires auditing selectors (_react/_vue removed in 1.58, devtools option removed, headless Chrome switched to Chrome for Testing builds in 1.57) and confirming CI runner OS meets the updated minimums.
Cautions
Teams whose locator strategies depend on _react or _vue selectors must replace them before upgrading to 1.58, as those were removed with no direct drop-in; the official release notes point to role and text-based locators as replacements. CI pipelines on Ubuntu 20.04 or Debian 11 will silently lose WebKit test coverage as of v1.49 unless the runner image is upgraded; the recommended CI setup is npx playwright install --with-deps run after npm ci, with workers set to 1 for stability.
Cypress 15.x
As of 2026-03-16, Cypress 15.12.0 (released March 13, 2026) is the latest stable version. Cypress 14.0.0 (January 16, 2025) dropped Node.js 16 and 21, required cy.origin() for all cross-subdomain tests due to Chrome's document.domain deprecation, and removed React <18 and Vue 2 component testing harnesses; Cypress 15.0.0 (August 20, 2025) then dropped Node.js 18 and 23, replaced ts-node with tsx, and deprecated Cypress.env() in favor of cy.env(). There is no WebKit or Safari support, and only the latest three major versions of Chrome, Firefox, and Edge are officially supported.
When to choose
Best for small-team + low-ops where interactive time-travel debugging and a low learning curve accelerate test adoption, or for projects using Cypress component testing alongside E2E in the same toolchain. The single most decisive factor is the Node.js floor: Cypress 15.x requires Node.js 20 or higher and will not install on Node.js 18 or lower.
Tradeoffs
Best-in-class developer experience with interactive test runner, time-travel debugging, automatic waiting, and component testing built in; the official migration guide covers each major version with explicit steps. The tradeoff is no Safari/WebKit support, a narrow browser matrix (latest 3 Chrome/Firefox/Edge only), and repeated Node.js floor bumps across major releases (Node 16 dropped in Cypress 14, Node 18 dropped in Cypress 15) that break CI images faster than competing frameworks.
Cautions
Tests that previously navigated across subdomains without cy.origin() will break after upgrading past Cypress 14 because Chrome's document.domain injection is gone and cy.origin() is now mandatory even for same-superdomain hops. Linux CI runners on glibc < 2.28 (Ubuntu 18 and earlier, RHEL 7, CentOS 7, Amazon Linux 2) cannot run Cypress 14+ prebuilt binaries, and this failure is not always surfaced as a clear error until binary extraction fails mid-pipeline.
Selenium WebDriver 4.41
As of 2026-03-16, Selenium 4.41.0 (released February 20, 2026) is the latest stable release across Java, Python, Ruby, .NET, and JavaScript bindings. CDP support for Firefox was removed starting in Selenium 4.29 after Firefox 129 disabled CDP by default; teams using CDP on Firefox must now use WebDriver BiDi, which is available across all language bindings. Java teams using BiDi APIs must use the .module subpackage introduced in 4.19; the non-W3C NetworkConnection interface was removed in 4.30; selenium-manager handles automatic browser and driver installation across all bindings.
When to choose
Best for enterprise + compliance or high-scale polyglot environments where test suites span Java, Python, Ruby, .NET, and JavaScript and must target arbitrary browsers or legacy browser versions through Selenium Grid. The single most decisive factor is language ecosystem breadth: Selenium is the only framework in this comparison with mature, officially maintained bindings for all five major languages.
Tradeoffs
Broadest language binding support, the only self-hosted Grid option for distributed execution across real browsers, and the only framework aligned with both W3C WebDriver and the emerging WebDriver BiDi specification as the cross-vendor standard. The tradeoff is the most operational overhead: BiDi migration from CDP, per-language binding differences, and Grid setup require more configuration work than Playwright or Cypress, even after selenium-manager reduces driver friction.
Cautions
Firefox automation that relied on CDP will fail at runtime on Firefox 129+ if teams did not migrate to WebDriver BiDi before upgrading past Selenium 4.29, because the removal is not a compile-time error—CDP commands are dispatched and rejected silently until a runtime exception surfaces. Java teams referencing BiDi classes such as org.openqa.selenium.bidi.LogInspector without the .module subpackage added in 4.19 will see ClassNotFoundException at startup, which IDEs may mask by still completing the old import path from cached indexes.
Try with your AI agent
$ npm install -g pocketlantern $ pocketlantern init # Restart Claude Code, Cursor, or your MCP client, then ask: # "Playwright vs Cypress vs Selenium — which E2E framework in 2026?"