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.

Playwright — broadest browser coverage, fewest breaking changes, best CI integration.

Blockers

Who this is for

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.

Facts updated: 2026-03-16
Published: 2026-03-27

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?"
Missing something? Request coverage