- Home
- /
- Cypress vs Selenium
Cypress vs Selenium
Cypress and Selenium take opposite approaches to browser testing: one runs inside the browser, the other drives it from outside. This guide compares them head-to-head on architecture, languages, browser coverage, parallelisation and debugging, with code samples and a verdict you can act on in five minutes.
- Browsers & devices
- 6100+
- Cloud parallelism
- 100×
- Uptime SLA
- 99.99%
Trusted by some of the world's most innovative companies
Which one should you pick?
Your team writes JavaScript or TypeScript, you test a modern web app on Chrome, Edge or Firefox, and you want the best developer experience with built-in retries, time-travel debugging and a test runner included.
Your team writes Java, C# or Ruby, you need legacy browser support (Internet Explorer, Safari), real mobile devices via Appium, or multi-tab and cross-origin flows that Cypress cannot handle.
You want Cypress for fast component and frontend tests and Selenium for broad cross-browser and mobile coverage. TestingBot runs both on the same grid, in parallel, in one dashboard.
What are Cypress and Selenium?
Two frameworks, two architectures. The same goal: drive a browser to automate end-to-end testing.
Cypress
Released 2017 · Cypress.io · MIT
Cypress is a JavaScript end-to-end testing framework that runs your tests inside the browser, in the same run loop as your application. That architecture gives it direct access to the DOM, automatic waiting and time-travel snapshots out of the box.
Because it lives in the browser, Cypress has an excellent developer experience: a built-in test runner, real-time reloads and a visual debugger. The same architecture also limits it to JavaScript and TypeScript, a fixed set of browsers, and single-tab flows.
- JavaScript and TypeScript only
- Auto-retries, time-travel debugging, cy.intercept
- Chrome, Edge, Firefox, Electron · no IE / Safari
Selenium
Released 2004 · Open Source · Apache 2.0
Selenium is the original browser automation framework and the foundation of the W3C WebDriver standard. Selenium WebDriver drives any browser from the outside through a vendor-supplied driver (chromedriver, geckodriver, safaridriver, edgedriver) using the same wire protocol.
Twenty years of ecosystem maturity means bindings for every major language, deep IDE integration, mature Page Object patterns, and real mobile device testing through Appium, which is built on the same protocol.
- Java / Python / C# / Ruby / JavaScript / Kotlin
- W3C WebDriver standard, works with every browser
- Chrome, Firefox, Safari, Edge, IE 11 · real mobile via Appium
Cypress vs Selenium: side-by-side comparison
Across the dimensions that matter for picking, migrating or running both in CI.
| Dimension |
|
|
|---|---|---|
| First release | 2017 | 2004 |
| Maintained by | Cypress.io | Open-source community + W3C |
| Languages | JavaScript / TypeScript only | Java, Python, C#, Ruby, JS, Kotlin |
| Architecture | Runs inside the browser | Drives the browser via WebDriver |
| Browsers | Chrome, Edge, Firefox, Electron | Chrome, Firefox, Safari, Edge, IE 11 |
| Mobile testing | Viewport emulation only | Real iOS + Android via Appium |
| Auto-waiting | Built-in retries | Manual waits or WebDriverWait |
| Network stubbing | First-class (cy.intercept) | BiDi (Selenium 4) or proxy |
| Multiple tabs / windows | Not supported | Window switching API |
| Cross-origin | cy.origin() (constrained) | Native |
| Test runner | Built in | Bring your own (JUnit, pytest, Mocha…) |
| Debugging | Time-travel snapshots + runner | IDE + driver logs |
| Parallel execution | Cypress Cloud (paid) or a grid | Selenium Grid |
| Developer experience | Real-time reload, in-browser | Functional, IDE-based |
| Ecosystem maturity | Growing fast since 2017 | 20 years of integrations |
| Free for open source on TestingBot | ✓ | ✓ |
Feature notes reflect Cypress 13.x and Selenium 4.x as of 2026. Both frameworks run on TestingBot's cloud, Cypress through the testingbot-cypress-cli and Selenium through the WebDriver hub.
Logging in, asserting the result
A login flow with built-in retries (Cypress) versus an explicit wait (Selenium). Both run on the same TestingBot grid.
// run via: testingbot-cypress run describe('login', () => { it('redirects to the dashboard', () => { cy.visit('https://app.example.com/login'); // auto-retries until actionable cy.get('#username').type('jane@example.com'); cy.get('#password').type('••••••••'); cy.contains('button', 'Sign in').click(); cy.url().should('include', '/dashboard'); cy.contains('h1', /welcome, jane/i).should('be.visible'); }); });
# Driver points at TestingBot remote URL from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def test_login_redirects_to_dashboard(driver): driver.get('https://app.example.com/login') driver.find_element(By.NAME, 'username').send_keys('jane@example.com') driver.find_element(By.NAME, 'password').send_keys('••••••••') driver.find_element(By.CSS_SELECTOR, 'button[type=submit]').click() # explicit wait WebDriverWait(driver, 10).until(EC.url_contains('/dashboard')) welcome = driver.find_element(By.TAG_NAME, 'h1') assert 'Welcome, Jane' in welcome.text
The Cypress spec runs through the testingbot-cypress-cli; the Selenium test connects to the WebDriver hub. Both appear in the same TestingBot dashboard.
When to choose which
Choose Cypress when
- Your stack is JavaScript or TypeScript-first and you want the test runner, assertions and retries to ship with the framework.
- You are testing a modern web app on Chrome, Edge or Firefox, with no Internet Explorer or Safari requirement.
- You value developer experience: time-travel debugging, real-time reloads and readable failure snapshots.
- You want first-class network stubbing with cy.intercept, without bolting on a proxy.
- Your flows stay within a single tab and mostly a single origin (cy.origin helps, within limits).
Choose Selenium when
- Your team writes Java, C#, Ruby or Python and you want full binding parity, not a JavaScript-first API.
- You need to test on Internet Explorer 11, Safari, or browser builds Cypress does not support.
- You test real iOS and Android devices, where Appium reuses the WebDriver protocol Selenium is built on.
- Your tests open multiple tabs or windows, or cross several origins, which Cypress handles only partially.
- You have a mature Page Object library or BDD framework (Cucumber, SpecFlow) you do not want to rewrite.
Stop choosing, run both on the same grid
Run Cypress through the testingbot-cypress-cli and point Selenium at the WebDriver hub. Your tests share the same 6100+ browsers and devices, the same dashboard, the same parallel slots and the same EU data residency, with no Cypress Cloud subscription required.
- Cypress parallelisation without a Cypress Cloud plan
- Side-by-side test history for both frameworks
- Free for open source, both frameworks
command_executor='https://hub.testingbot.com/wd/hub'
)
Frequently Asked Questions
The questions teams ask before picking, or migrating between, these frameworks.
Is Cypress better than Selenium?
Neither is universally better; they suit different teams. Cypress wins on developer experience for JavaScript and TypeScript teams testing modern web apps: built-in retries, time-travel debugging and a test runner included. Selenium wins on breadth: more languages, every browser including Internet Explorer and Safari, real mobile via Appium, and multi-tab and cross-origin flows. Pick Cypress for ergonomics within its constraints; pick Selenium for coverage and flexibility.
Should I migrate from Selenium to Cypress?
Only if your needs fit within Cypress's constraints. If your suite is JavaScript-based, targets Chrome, Edge or Firefox, and stays within a single tab, Cypress's retries and debugging often justify the move. If you rely on Java, C# or Ruby, test Internet Explorer or Safari, drive real mobile devices, or need multi-tab and cross-origin flows, migrating will cost you capabilities. Many teams keep both: Cypress for frontend tests, Selenium for broad cross-browser and mobile coverage.
Does Cypress support all the browsers Selenium does?
No. Cypress runs on Chromium-based browsers (Chrome, Edge, Electron) and Firefox, with experimental WebKit support. It cannot drive Internet Explorer or real Safari. Selenium drives the actual browser binaries through vendor drivers, including Internet Explorer 11 and Safari. If you need IE or Safari coverage, Selenium is the only option of the two.
Can Cypress test mobile apps?
Not natively. Cypress offers viewport resizing to emulate a mobile screen, but it cannot drive native iOS or Android apps. For real mobile testing you need Appium, XCUITest, Espresso or Maestro. Appium reuses the WebDriver protocol Selenium is built on. TestingBot runs all of these on real iOS and Android devices.
Do I need Cypress Cloud to run Cypress in parallel?
No. Cypress's own parallelisation and recording run through Cypress Cloud, a paid subscription. TestingBot is an alternative: the testingbot-cypress-cli zips your specs, uploads them and runs them in parallel across Chrome, Edge and Firefox on the cloud grid, with live logs and video, and no Cypress Cloud plan. You set the parallel count in testingbot.json.
Can Cypress and Selenium share the same CI pipeline?
Yes. Both run in CI/CD and report results back to the same place on TestingBot. A common setup runs Cypress for fast frontend specs and Selenium for broad cross-browser and mobile coverage in the same pipeline, both pointed at the TestingBot grid with the same credentials and build name.
Can I run Cypress and Selenium on TestingBot?
Yes, both run on the same TestingBot cloud. Cypress runs through the testingbot-cypress-cli npm package, configured with a testingbot.json file and started with testingbot-cypress run. Selenium connects to https://hub.testingbot.com/wd/hub via webdriver.Remote. Tests from both show up in the same dashboard, share parallel slots, and benefit from the same EU data residency, video recording and CI/CD integrations. Both are free for open source projects.
Related comparisons
Sign up for a Free Trial
Run Cypress, Selenium, or both, on TestingBot's cloud. No Cypress Cloud subscription required.
Start a free trial