Framework comparison · 2026

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

30-second answer

Which one should you pick?

Cypress Pick Cypress if…

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.

Selenium Pick Selenium if…

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.

Pick both if…

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.

Background

What are Cypress and Selenium?

Two frameworks, two architectures. The same goal: drive a browser to automate end-to-end testing.

Cypress

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

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
Head to head

Cypress vs Selenium: side-by-side comparison

Across the dimensions that matter for picking, migrating or running both in CI.

Cypress versus Selenium feature comparison
Dimension Cypress Selenium
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.

The same test in both

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.

Cypress + TypeScript login.cy.ts
// 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');
  });
});
Selenium + Python test_login.py
# 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.

Decision matrix

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).
Run Cypress on TestingBot

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.
Run Selenium on TestingBot
TestingBot supports both

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
testingbot.com / run both
// Cypress
$ npm i -D testingbot-cypress-cli
$ testingbot-cypress run # reads testingbot.json
# Selenium
webdriver.Remote(
command_executor='https://hub.testingbot.com/wd/hub'
)
FAQ

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.

Going deeper? See the dedicated Cypress and Selenium pages.

Sign up for a Free Trial

Run Cypress, Selenium, or both, on TestingBot's cloud. No Cypress Cloud subscription required.

Start a free trial