Here are some evaluation criteria for choosing between Cypress and Karate for UI test-automation:
Karate uses real-browsers
Cypress uses a heavily modified browser that runs within Electron. Cypress refers to it as tests “within a browser” – but others have reported that it causes some very subtle changes in behavior when your application is complex. This difference is known to be magnified for headless tests.
Karate has more cross-browser options
Karate supports the W3C WebDriver protocol, which means that any browser that Selenium supports can be tested. We recommend you use Chrome to write your tests, and Karate supports this “natively” without the need for installing any extra executable. You can switch browsers by just changing configuration. Because of the WebDriver compliance, many teams run Karate tests in SauceLabs and BrowserStack, etc.
For Cypress you need to use Cypress Cloud which is their commercial enterprise offering. You will need to consider sending your test-data and results out of your private network
Karate is completely self-hosted, and you have the option of installing or using the Docker container on any number of build-servers as you want. If you choose you can combine Karate with a cloud device farm such as SauceLabs, BrowserStack or LambdaTest. This is optional, but note that you have the flexibility to switch vendors because Karate respects the W3C WebDriver protocol. Karate has excellent support for running even UI tests in parallel.
Cypress cannot handle IFrames
There are workarounds, but you still cannot perform actions within an IFrame effectively. Also refer to this article.
How Cypress handles things asynchronously is often misunderstood by developers and can lead to issues and confusion later on, especially when trying to debug your tests.
[…] we do not recommend using variables within your tests.
For any developer who has experience with OOP and programs that manage state - this is very difficult to digest. Promises, async and await are quite advanced programming concepts, and expecting developers to master these for the sake of test-automation is a stretch. Even experienced developers make mistakes in these areas. And if you cannot debug your tests, that is a very severe limitation.
Karate has no such limitations
You can use variables
Steps run in the exact order you write them, just as you expect in a normal programming language
You can actually use an IDE to step-through and debug your tests
The debugger can actually step-back and hot-reload changes, refer this video: (timestamp 1:30)
Debugging
Already covered in the previous point, you can step-back and use a debugger more effectively in Karate.
Cypress does have a nice DOM snapshot feature that you can review and see what it was at each step of a test. Note that this is something you can only do after the test has completed.
Karate and Cypress can be installed easily
Cypress can be installed via NPM.
Karate can be installed via IDE plugins for VS Code and Intellij, just like Cypress, you can run your first browser test in Chrome without doing anything extra.
Karate can also be installed via NPM (although this is experimental) but most teams use a Docker container in the Cloud or use Java + Maven, so this is just like any standard CI pipeline.
Hybrid Tests
Cypress claims to have API testing, but does not have all the features and assertions that Karate supports.
Also, the Cypress API testing requires a browser to be instantiated – which consumes a lot of resources and is not recommended.
Since Karate has API testing at the core, writing hybrid tests that use APIs for setting up data or auth and then switching to a UI flow is very easy and more effective.
API Mocking
Since Karate includes API mocking capabilities, you can set up UI tests that use fake API responses served by Karate. In Cypress you can intercept calls that a web-page makes but you have to hard-code the faked responses or retrieve them from somewhere.
Subscribe to our email and get updates right in your inbox.