Limitations of Cypress

Profile picture for user arilio666

While there are some fun times at a certain point, there are limits to it, meaning all things have their limitations. Even if it is Cypress, it has its technical limitations.

  1. Only JavaScript: While automation tools like Selenium and Playwright provide you the freedom to use different programming languages, Cypress is limited to one language. Well, you guess that right. ONLY JAVASCRIPT. However, Cypress has plans to release backend adapters for other languages in the future.
  2. Complexity: Cypress can only use node.js, which is pretty much knowledge-demanding, but we also need to know about promises, jQuery, asynchronous JS, and other advanced javascript methodologies. At the same time, some concepts like promises require more knowledge of javascript, and the asynchronous nature of JavaScript makes Cypress complex to use.
  3. No MultiTab Support: There isn't any multitab support as the cypress test runs within the browser. Cypress has access to browser automation APIs to switch tabs, but the Cypress team never found a valid reason to expose them. And as per their official website, there will never be support for multiple browser tabs. You need to use a workaround for it.
  4. No Multiple Browser: Like tabs, you can not use multiple browsers in Cypress. However, you can synchronize Cypress with backend processes like Selenium or Puppeteer to open 2nd browser. Again a workaround is suggested, which increases complexity.
  5. Difficult to communicate with Backend: Since the Cypress test runs directly in the browser, it is harder to communicate with the server or database. However, you can make it easy with Node and several Cypress commands like exec(), request(), and task().
  6. Multi-Origin Support: If your application switches to another domain or has a different port, you can not directly test it in Cypress. Each test is limited to only visiting the domains determined to be of the same-origin rule. However, with version 9.6.0, multi-domain testing was made easy using cy.origin(). 
  7. Mouse Hover: The issue is still open for the hover command. 
  8. Tab Key Support: Tab support is still not provided. You need to use a plugin for it.
  9. XPath Support: There is no XPath support in Cypress without a plugin.
  10. Mobile Support: Currently, Cypress has no native or mobile event support.
  11. File Upload: Application Specific Limited support for File Upload. Use an external plugin for it.
  12. IFrame Support: IFrame Support is also limited and does not work often.
  13. Browser Supported: Some browsers such as Safari, Opera, and Internet Explorer are not currently supported. 
  14. Supported Framework: Cypress Support only Mocha JS.
  15. Parallel Testing: In Cypress, it is costly to implement parallelization. Also, to run Cypress tests in parallel, you need to split them across files, and you cannot run tests against multiple browsers simultaneously.
  16. Page Object Models: Cypress suggests you stop using page objects because this is another layer of indirection on top of the web page and is slower. They recommend you start using app actions.
  17. Other Limitations: Cypress is not made for indexing the web, spidering links, performance testing, and scripting 3rd party sites.