Cypress vs Playwright

Cypress vs Playwright: What’s the Best Test Automation Framework for Your Project?

Cypress and Playwright are the leading test automation tools available in the market. In this post, we compare the features and benefits of each to assess which is the better choice for your project.

Introduction

What is Cypress?

Cypress is a next-generation front-end testing tool constructed for the modern web. This tool addresses the critical pain points that developers and QA engineers face when testing modern applications, for example; synchronization issues, and the inconsistency of tests due to missing elements, etc.

Cypress is built on Node.js and comes packaged as an npm module. As its basis is Node.js, it uses JavaScript for writing tests. But 90% of coding can be done using Cypress’ inbuilt commands, which are easy to understand.

It also bundles jQuery (Javascript Library) and inherits many jQuery methods for UI component identification. It also simplifies HTML DOM tree traversal and manipulation, as well as event handling, CSS animation, and Ajax.

What makes Cypress a unique tool?

There are multiple features that make Cypress one of the most flexible choices for web automation. A few of them are:

Speed: It delivers fast, consistent, and reliable test execution compared to other automation tools because of its architectural design.

Flake Resistant: Cypress automatically waits for commands and assertions before moving on. Means no more async issues.

Edge Cases: Cypress has the ability to test edge cases by mocking server responses (network requests).

Debuggability: It takes snapshots as your tests run. You can hover over each command in the Command Log to accurately see what happened at each step.

Cypress results: View videos of the execution of your entire tests when running from the Cypress Dashboard.

What is Playwright?

Playwright enables fast, reliable, and capable automation across all modern browsers. Built by the Microsoft team, Playwright is a framework for end-to-end testing and automation, which has slowly been increasing in popularity.

It is a Node library to automate the Chromium, WebKit, and Firefox browsers with a single API. It enables cross-browser web automation that is ever-green, capable, reliable, and fast.

What makes Playwright a unique tool?

Fast and reliable execution is one of Playwrights' core strengths; some unique features include:
                    
Auto-wait APIs: Playwright interactions auto-wait for elements to be ready. This improves reliability and simplifies test authoring.                                                 
Timeout-free automation: Playwright receives browser signals, like network requests, page navigations, and page load events to eliminate the need for sleep timeouts that cause flakiness.

Powerful automation capabilities: Multiple domains, pages, and frames are supported. Playwright is an out-of-process automation driver that is not limited by the scope of in-page JavaScript execution and can automate scenarios with multiple pages.

Powerful network control capabilities: Playwright introduces context-wide network interception to stub and mock network requests.
                             
Support for popular modern browsers: Test on Chromium, Firefox, and WebKit. Playwright has full API coverage for all modern browsers, including Google Chrome and Microsoft Edge (with Chromium), Apple Safari (with WebKit), and Mozilla Firefox.

Cross-platform WebKit testing: With Playwright, test how your app behaves in Apple Safari with WebKit builds for Windows, Linux, and macOS. Test locally and on CI, headless or headed.

Cross-language: Use the Playwright API in TypeScript, JavaScript, Python, .NET, and Java.

Test Mobile Web: Native mobile emulation of Google Chrome for Android and Mobile Safari. The same rendering engine works on your Desktop and in the cloud.

Cypress vs Playwright: The Pros and Cons
 

Cypress vs Playwright: The Pros and Cons

Let’s delve deeper in some key differences between Cypress and Playwright:

  • Cypress can't add ".catch" error handler for failed commands: Cypress doesn't support built-in error recovery from a failed command. A command and its assertions all eventually pass, and if one fails, all remaining commands are not run and lead to the failure of the test. Playwright is more flexible and provides support for a try-catch handler.
     
  • Parallel execution of Cypress commands is not feasible: As Cypress executes all its commands serially and ensures that it provides the same consistent behavior for each test run, Cypress doesn't provide the functionality to run commands in parallel, which, in turn, is a very common behavior for promises. In comparison, Playwright supports parallel executions which boosts test execution time.
     
  • Cypress doesn’t support Soft Assertion: Soft Asserts are an important feature in automation. It is used when the test script (or test method) need not be halted when the assertion condition does not meet the expected result. Playwright supports soft assertions, but Cypress does not. That results in more test case failures in Cypress for tentative or optional conditions.
     
  • Playwright has better multi-browser support: With Cypress, you cannot run tests against multiple browsers at the same time. However, with Playwright, you can run tests against multiple browsers.
     
  • Playwright supports iFrames: Cypress has limited support for iframes, while Playwright has native support for them.
     
  • Chaining Syntax: Cypress can be unwieldy because the chaining command syntax can quickly get out of hand for more complex tests.
     
  • No trade-offs = No limits for Playwright: Browsers run web content with different origins in different processes. Playwright is aligned with the modern browser’s architecture and runs tests out-of-process. This makes Playwright free of the typical in-process test runner limitations.
     
  • Multiple testing elements supported in Playwright: Playwright allows test scenarios that span multiple tabs, multiple origins, and multiple users. You can create scenarios with different contexts for different users and run them against your server, all in one test.
     
  • Playwright support for trusted events: Hover elements interact with dynamic controls and produce trusted events. Playwright uses a real browser input pipeline indistinguishable from the real user, allowing for better support of trusted events.
     
  • Playwright’s test frames and pierce Shadow DOM: Playwright selectors pierce shadow DOM and allow entering frames seamlessly.

Cypress vs Playwright Syntax Comparison:
 

Cypress vs Playwright Syntax Comparison

Summary:

  • Playwright works on Webkit-browsers, Cypress does not.
  • You can choose test-runner in Playwright
  • Playwright lets you test in several browsers simultaneously.
  • Playwright supports multi-tabs and frames.
  • Cypress doesn’t run in headless mode by default; Playwright does.
  • Playwright awaits UI elements before running interactions; Cypress re-tries assertions until timeout.
  • Cypress does not support multiple domains, but Playwright does.
  • Cypress authentication requires a lot more setup due to the lack of multi-domain support. While Playwright reuses authentication, making it a lot simpler.

Cypress vs Playwright - Which is the best framework for your project?

So which of these frameworks should you choose? 

The answer is it depends on how experienced you are with testing and what functionality you find essential. If you’re new to testing and want a more plug-and-play approach that includes everything you need to get started, then Cypress is the best choice for you. 

It has good documentation and a broader community that makes it easier to get help and find answers to specific scenarios you find challenging.
                                 
If you are more familiar with testing and need to test Webkit browsers, or your tests need to cover scenarios spanning multiple pages and domains, then Playwright is the best choice for you. 

Playwright is also the right choice for you if you have fallen in love with a specific test runner or don’t need one at all. With the framework being reasonably new, we can also expect that the community, documentation, and framework, in general, will continue to improve over time.