TestGuild's AG2026 survey of 40,000 testers made it official this quarter: Playwright has overtaken Selenium. The numbers — 45.1% adoption vs. 22.1% — aren't even close. Playwright pulls 33 million weekly npm downloads, up 3,200% from under a million in 2021. After fifteen years as the default, Selenium is no longer the framework most teams reach for.
If you're on Selenium, you're probably already thinking about the migration.
Selenium displaced hand-rolled browser automation around 2011. Cypress displaced Selenium starting in 2018 with a faster feedback loop and no WebDriver overhead. Now Playwright is displacing both with native multi-browser support, auto-waiting, and direct protocol access that cuts flaky failures by roughly 60% in benchmarks.
Each shift follows the same arc: the new framework is genuinely better, teams start migrating, and the migration takes six months to two years of rewriting tests that already existed. During that window, the old suite still runs but nobody invests in it, and the new suite is incomplete but everyone's committed. Coverage doesn't grow during a migration. It often shrinks.
Meanwhile, the flows that had no test before the migration still have no test after it. A rewrite moves existing coverage from one framework to another. It doesn't create new coverage — it just changes the syntax.
The ink on the Playwright migration plan is barely dry, and the next generation has arrived:
cy.prompt() in beta — describe a user journey in plain English, get runnable test code. Two modes: generate-and-commit for stable apps, or runtime self-healing that regenerates failed selectors on each run.Each of these is a reason to consider rewriting again in 18 months. If your test suite is code, it's coupled to a framework, and every framework has a shelf life.
The frameworks keep changing because the abstraction layer keeps changing: WebDriver, CDP, BiDi, direct protocol, AI-generated selectors, intent-based NLP. Each new layer is smarter about talking to the browser. But the test itself — "a user signs up, verifies their email, and lands on the dashboard" — hasn't changed. That flow was the same in 2018, it's the same today, and it'll be the same when BiDi v2 ships.
When the test is a recorded flow rather than a coded script, there's no framework to migrate away from. The recording says "click the button that says Submit" — not page.locator('#submit-btn').click() or cy.get('[data-testid=submit]').click() or whatever the next framework's syntax turns out to be. The recording captures the thing you're actually testing: what the user does.
This is why Test Chain runs as a proxy instead of shipping a framework integration. A proxy records what happens on the wire. It doesn't generate code you'll have to rewrite when the next tool wins the benchmark. You record the flow once, and it replays regardless of which protocol the automation industry standardizes on next quarter.
Playwright is a great framework. Genuinely better than what came before it. If you're writing new coded tests today, it's the right choice. But if you're staring at a six-month migration plan to rewrite tests that already work, it's worth asking: is the goal to have tests in Playwright, or to have tests that catch bugs?
The framework wars produce a winner every few years. The flows your users depend on don't care who won.