Everyone acts like Playwright is the obvious choice now. Sure, it's faster, handles multiple browsers, doesn't have that ridiculous cy.wait() nonsense. But the actual developer experience writing tests feels like a step backward.
Cypress gives you the test runner UI that just works. You click around, it records, you see exactly what broke and why in real time. Playwright's headed mode is functional but clunky. The debugging story is worse. When a test fails, you're reading stack traces instead of watching a replay of what your app was doing.
Also the API inconsistency drives me nuts. page.click() works differently than locator.click(). Sometimes you need page.locator(), sometimes you don't. Cypress is way more predictable.
// Playwright: sometimes this works, sometimes it times out mysteriously
await page.locator('button').first().click();
// Cypress: just works, shows you the element it found
cy.get('button').first().click();
Playwright wins on raw capability (cross-browser, better performance, actual parallelization). But for day-to-day testing velocity, I still reach for Cypress. The polish matters.
yeah, playwright's trace viewer is genuinely impressive for post-mortem debugging. cypress shines for quick local iteration, but once you scale to CI you're right, the traces are way more actionable than hunting through screenshots.
Cypress's UI is genuinely good for exploration, I'll give you that. But I've found the debugging story flips once you're past the initial phase.
Yeah, Playwright's headed mode feels clunkier at first. Real talk though: I stopped needing it constantly after writing maybe 50 tests. Once you know what you're testing, Playwright's page.pause() and the inspector are faster than Cypress's UI for me. Stack traces are actually useful when your selectors aren't brittle.
The bigger win: Playwright doesn't lock you into its test runner. I use it with Vitest, get better parallel execution, same debugging tools. Cypress forces you into their ecosystem.
Cypress shines for quick prototyping. But at production scale with hundreds of tests, Playwright's speed and cross-browser support win. Different tools for different stages.
Chloe Dumont
Security engineer. AppSec and pen testing.
Cypress's UI is genuinely good for exploration, but I'd push back on the debugging claim. Once you get past the initial friction, Playwright's trace viewer is way more useful than Cypress's failure screenshots. You get the DOM at each step, network logs, console output all together.
The real problem is neither ships with great defaults for writing tests. Cypress's record mode is nice but breeds brittle selectors. Playwright requires you to actually think about your test structure from day one, which sucks at first but saves time later.
The headed mode complaint is fair though. They could ship better debug UX out of the box.