Developer Tools
Playwright vs Cypress vs Selenium in 2026: Which to Pick for a Web App
Playwright, Cypress and Selenium compared on browsers, languages, parallel runs and their cost, tabs and iframes, debugging, AI features and license.
Your tool hereOn tool pages, blog posts and the feeds, next to what people came to read.$19 / 3 months →For a new web app with a JavaScript or TypeScript frontend, Playwright is the default pick: it runs Chromium, Firefox and WebKit, handles tabs, iframes and other origins without special commands, and shards across CI machines for free. Pick Cypress if your team wants its in-browser runner and is fine paying for Cypress Cloud once parallel runs matter. Pick Selenium when you need real Safari, write tests in Ruby, or already run a Selenium Grid.
Everything below was checked against each project's own docs, pricing page or GitHub repository on 11 November 2026. Where a page did not state something, this post says so rather than filling the gap.
The three in one paragraph each
Playwright
Playwright is Microsoft's browser automation library and test runner, licensed Apache-2.0. The latest release on its GitHub releases page is 1.65.0. It ships its own builds of Chromium, Firefox and WebKit and can also drive branded Chrome and Edge. Tests can be written in TypeScript/JavaScript, Python, Java or .NET.
Cypress
Cypress is a test runner whose test code runs inside the browser next to your app. The Cypress App is free under the MIT License; Cypress Cloud, the hosted dashboard, is a separate paid product with a free tier. The latest release on GitHub is 16.3.0. Because tests run in the browser, JavaScript is the only language it supports, by design.
Selenium
Selenium is the long-standing implementation of the W3C WebDriver standard, licensed Apache-2.0. Version 4.52.0 came out on 29 October 2026, with official bindings for Java, Python, C#, Ruby and JavaScript. It is a browser automation library rather than a test runner: you bring your own (JUnit, pytest, Mocha and so on).
Side by side
| Playwright | Cypress | Selenium | |
|---|---|---|---|
| Current major | 1.x (1.65.0) | 16 (16.3.0) | 4 (4.52.0) |
| License | Apache-2.0 | MIT (app); Cloud is paid | Apache-2.0 |
| Languages | TS/JS, Python, Java, .NET | JavaScript/TypeScript only | Java, Python, C#, Ruby, JS |
| Chromium / Chrome / Edge | Yes | Yes | Yes |
| Firefox | Yes (own build) | Yes (140+) | Yes |
| WebKit | Yes | Experimental | No |
| Real Safari | No | No | Yes, via safaridriver on macOS |
| Parallel across machines | Built-in --shard, free | Cypress Cloud (--record --parallel) | Selenium Grid, self-hosted |
| Multiple tabs | Native | Plugin (@cypress/puppeteer) | Window handles |
| Other origins | No special API needed | cy.origin() per origin | No special API needed |
| Component testing | Yes | Yes (React, Vue, Angular, Next, Svelte alpha) | No |
| Post-run debugging | Trace Viewer, free | Test Replay, Cypress Cloud | Not built in |
| AI features | Test Agents, MCP, CLI | cy.prompt (beta), Studio AI (beta) | Agent guidance docs only |
Browsers: the Safari question
- Playwright ships a WebKit build taken from WebKit's main branch. Its docs state it does not work with branded Safari because it relies on patches, and recommend running WebKit on macOS for the closest match.
- Cypress has experimental WebKit support,
behind
experimentalWebKitSupport: trueand theplaywright-webkitpackage, withoutcy.origin(). Electron is deprecated as a test browser. - Selenium drives real Safari through Apple's
safaridriver, which ships with macOS and is switched on withsafaridriver --enable. Safari on iOS needs Appium.
If "works in the Safari your users have" is a hard requirement, Selenium is the only one of the three that runs it.
Parallel runs and what they cost
Playwright runs test files in parallel on one machine by default, and splits a suite
across machines with --shard=1/4 and so on,
then joins the results with npx playwright merge-reports. It is part of the free test
runner; you pay only for your own CI minutes.
Cypress parallelization requires the --record flag,
which means Cypress Cloud does the load-balancing. On the
pricing page, parallelization is included on every plan,
but plans are sized by test results: the free Starter plan has 500 test results a month,
and Team is $67 a month billed annually ($799 a year). A suite of 50 tests run 10 times
uses the whole free month.
Selenium uses Selenium Grid to run WebDriver scripts on remote machines in parallel. Grid is part of the open-source project and you host it yourself; the server and its upkeep are your cost.
Tabs, iframes and other origins
- Playwright treats each tab as a
Pagein a browser context. New tabs are caught withcontext.waitForEvent('page'), popups withpage.waitForEvent('popup'). Iframes are reached withpage.frameLocator()and chained locators. - Cypress controls one browser at a time. Its trade-offs page points to the
@cypress/puppeteerplugin for multiple tabs, describes iframe support as limited (same-origin iframes can be queried), and binds each test to one superdomain. Visiting another origin, for example an SSO sign-in, needscy.origin(), whose callback cannot see the test's variables; values go in through serializableargs. - Selenium gives every tab and window a handle and switches with
switchTo().window()orswitchTo().newWindow(). Frames need an explicitswitchTo().frame()andswitchTo().defaultContent()to come back.
If your app has OAuth redirects, payment iframes or "open in new tab" flows, the Cypress model costs the most code.
Component testing
Cypress component testing
officially supports React 18–19, Next.js 15–16, Vue 3 and Angular 21–22, with Svelte 5 in
alpha, on Vite or Webpack. Playwright's current docs
describe component testing as stable and framework-agnostic: a built-in mount fixture
against a gallery page your own dev server renders, with no extra npm packages; the old
experimental-ct packages are no longer published. Selenium drives whole browsers and has
no component-testing mode.
Debugging a failed run
- Playwright records traces you open in the Trace Viewer: before and after DOM snapshots for each action, console, network with bodies, source and errors. The hosted trace.playwright.dev loads a trace entirely in your browser. UI Mode traces every test locally. Codegen records clicks into test code, preferring role, text and test-id locators.
- Cypress debugs live in the runner with
.debug(),.pause()and the Command Log (debugging guide). For CI failures, Test Replay steps back through DOM, network and console, but only for runs recorded to Cypress Cloud in a Chromium browser. - Selenium has no built-in trace tool; you get what your test runner and logging give you.
Where AI fits today
Playwright. Version 1.64 started bundling the
Playwright MCP server and playwright-cli.
Playwright MCP lets an agent drive a browser
through accessibility snapshots instead of screenshots; its README recommends the CLI for
most coding agents because it uses fewer tokens, and MCP for loops that need persistent
browser state. Test Agents are three agent
definitions, planner, generator and healer, that explore the app, write tests and repair
failing ones; set them up with npx playwright init-agents --loop=claude (or vscode,
codex, opencode). More servers like it are in the MCP section.
Cypress. cy.prompt turns plain-English
steps into Cypress commands, with self-healing when an element changes. It is in beta, E2E
only, Chrome or Edge only, and needs a Cypress Cloud account or record key; each plan
includes a number of prompt executions (100 a month on Starter).
Studio AI, also beta, suggests
assertions while you record a test in Cypress Studio; it does not support iframes or
multi-origin recording.
Selenium. The project ships no AI feature. Its AI agents guide tells you how to keep coding agents from writing Selenium 3-era code (pin the version, use BiDi not CDP, no fixed sleeps) and calls existing MCP servers community-maintained, not part of Selenium.
Install
# Playwright — scaffolds config, an example test and browsers
npm init playwright@latest
# Cypress
npm install cypress --save-dev
# Selenium — JavaScript or Python bindings
npm install selenium-webdriver
pip install selenium
Selenium has not needed manual driver downloads since 4.6: Selenium Manager finds or fetches the matching driver, and the browser too since 4.11.
How to choose
- New JS/TS web app, small team, GitHub Actions or similar CI: Playwright. Free sharding, three engines, no special API for tabs or other origins, and a trace viewer that does not need an account.
- Your team writes Python, Java or .NET: Playwright or Selenium. Cypress is JavaScript only.
- You must test in real Safari: Selenium with
safaridriveron a Mac. Playwright's WebKit is close, not the same browser. - Mostly component tests in React, Vue or Angular, single-origin app: Cypress is a reasonable fit, especially if the team already knows it. Budget for Cypress Cloud before you need parallel runs.
- You already run Selenium Grid, or test across many browser and OS combinations in-house: stay on Selenium 4 and move to BiDi for logs and network, as its own docs advise.
- You want an AI agent writing and repairing tests: Playwright has the most shipped
today (Test Agents, MCP, CLI) and none of it needs a paid account; Cypress's
cy.promptis in beta and tied to Cypress Cloud.
FAQ
Is Playwright better than Cypress?
For most new web apps, yes on the points above: more browsers, more languages, free parallel runs and no cross-origin workaround. Cypress's in-browser runner and its component testing support are the reasons teams still pick it.
Is Cypress free?
The Cypress App is free and MIT-licensed. Parallel runs, Test Replay and cy.prompt go
through Cypress Cloud, whose free Starter plan has 500 test results a month; paid plans
start at $67 a month billed annually.
Is Selenium still worth learning in 2026?
Yes, if you work in Java, C# or Ruby shops, need real Safari, or maintain a Grid. It is under active development (4.52.0 in October 2026) and moving to WebDriver BiDi.
Can Playwright test Safari?
It tests WebKit, the engine behind Safari, not the branded Safari app. Its docs recommend running WebKit on macOS for the closest result.
Playwright is in the catalog at Playwright. For more testing, CLI and workflow tools, browse the developer tools section; for the browser side of the stack, see frontend.