TL;DR

  • Cypress: Только JavaScript, работает в браузере, time-travel отладка, автоматическое ожидание
  • Selenium: Мульти-язык, протокол WebDriver, более широкая поддержка браузеров, мобильный через Appium
  • Скорость: Cypress в 2-3x быстрее последовательно; параллелизм нужен платный Cloud ($75+/мес)
  • Отладка: Cypress выигрывает однозначно — time-travel, DOM-снимки, автоматические скриншоты
  • Выбирай Cypress для: JS команд, SPA, быстрой разработки тестов, приоритета отладки
  • Выбирай Selenium для: мульти-языковых команд, мобильного тестирования, legacy браузеров, Grid в энтерпрайзе

Моё мнение: Если начинаешь с нуля на JavaScript стеке — бери Cypress. Если нужен мульти-язык или мобильное тестирование, Selenium по-прежнему правильный выбор.

Время чтения: 15 минут

Cypress и Selenium — два доминирующих фреймворка для автоматизации web-тестирования, представляющих принципиально разные философии. В 2026 году у Cypress более 47 000 звёзд на GitHub и 5 миллионов еженедельных загрузок из npm, у Selenium — 31 000 звёзд и более 10 миллионов ежемесячных загрузок из Maven. По данным опроса JetBrains Developer Ecosystem 2024, Selenium остаётся наиболее широко используемым инструментом тестирования в целом, тогда как Cypress лидирует среди JavaScript-разработчиков, тестирующих SPA. Ключевое различие — в архитектуре: Selenium работает вне браузера через протокол W3C WebDriver, что делает его независимым от языка, но добавляет сетевую задержку на каждое действие. Cypress работает внутри JavaScript-рантайма браузера, обеспечивая автоматическое ожидание, time-travel отладку и скорость в 2–3 раза выше. Эта архитектурная разница объясняет все компромиссы — скорость, отладку, поддержку браузеров и мобильное тестирование.

Архитектура: Фундаментальное Различие

Это самое важное, что нужно понять. Всё остальное — скорость, отладка, ограничения — вытекает из архитектуры.

Архитектура Selenium

Selenium работает вне браузера через протокол W3C WebDriver:

Тестовый код → HTTP запрос → WebDriver сервер → Драйвер браузера → Браузер

Тест отправляет JSON-команды по HTTP к процессу драйвера (chromedriver, geckodriver), который переводит их в нативные команды браузера. Каждое действие — клик, ввод, проверка — это сетевой round-trip.

Что это значит на практике:

  • Независимость от языка: подходит любой язык с HTTP-клиентом
  • Независимость от браузера: подходит любой браузер с WebDriver
  • Сетевая задержка на каждой операции (1-5мс на команду)
  • Нестабильные ожидания: ты никогда точно не знаешь, когда браузер закончил рендеринг

Архитектура Cypress

Cypress работает внутри браузера в том же event loop, что и твоё приложение:

Тестовый код → Браузер (тот же JavaScript runtime что и приложение)

Cypress инжектит себя в браузер через прокси. Тестовый код и код приложения работают в одном процессе. Cypress перехватывает и контролирует всё: сетевые запросы, изменения DOM, таймеры.

Что это значит на практике:

  • Только JavaScript/TypeScript (работает в Node.js + браузер)
  • Прямой доступ к DOM: без сериализации, без сетевой задержки
  • Автоматическое ожидание: Cypress повторяет проверки пока не пройдут или не истечёт таймаут
  • Полный контроль над сетевым слоем (стабирование, перехват, тайминг)

Сравнение Функций

ФункцияCypressSelenium
ЯзыкиJavaScript/TypeScriptJava, Python, C#, JS, Ruby, Kotlin
Поддержка браузеровChromium, Firefox, WebKitВсе основные + IE11
Мобильное тестированиеНетДа (через Appium)
Параллельное выполнениеCloud (платно, $75+/мес)Grid (бесплатно)
ОтладкаTime-travel, DOM-снимкиScreenshots/logs
Network controlВстроенный intercept/stubНужна настройка прокси
Shadow DOMНативный cy.shadow()Сложные обходные пути
iframesОграниченно (плагин)Полная поддержка
Мульти-таб/окнаНе поддерживаетсяПолная поддержка
Cross-originОграниченно (улучшено в v12+)Без ограничений
Component testingВстроенный (v10+)Нет

Бенчмарки Скорости

Один и тот же тестовый набор (логин, CRUD операции, поиск, оформление заказа) на обоих фреймворках. Окружение: GitHub Actions, Ubuntu runner, Chrome.

Последовательное выполнение (100 тестов)

МетрикаCypressSelenium (Python)
Общее время4м 52с11м 18с
Среднее на тест2.9с6.8с
Flaky rate2%8%
Время настройки15с45с

Cypress в 2.3x быстрее последовательно. Архитектура в браузере устраняет сетевые round-trip, а автоматическое ожидание снижает повторы из-за flaky тестов.

Параллельное выполнение (100 тестов, 4 воркера)

МетрикаCypressSelenium
Общее время1м 40с3м 20с
ИнфраструктураCypress Cloud ($75+/мес)Selenium Grid (бесплатно)
Сложность настройкиНулевая (SaaS)Средняя (Docker Compose)

Преимущество в скорости сохраняется в параллельном режиме, но модель оплаты различается. Cypress Cloud — просто, но платно. Selenium Grid — бесплатен, но ты поддерживаешь инфраструктуру.

«Я мигрировал 400+ Selenium-тестов на Cypress в одной компании и оставил Selenium в другой — потому что Cypress не справлялся с нашими multi-tab workflow. Выбор фреймворка имеет меньшее значение, чем принято думать — оба инструмента способны справиться с задачей. Важно соответствие фреймворка твоему стеку, языку команды и конкретным сценариям тестирования.» — Yuri Kan, Senior QA Lead

Developer Experience

Cypress: Пиши меньше, отлаживай быстрее

// Тест логина — Cypress
describe('Login', () => {
  it('should log in with valid credentials', () => {
    cy.visit('/login')
    cy.get('[data-testid="email"]').type('user@example.com')
    cy.get('[data-testid="password"]').type('P@ssw0rd!')
    cy.get('[data-testid="submit"]').click()

    // Автоматический повтор пока URL не изменится или таймаут
    cy.url().should('include', '/dashboard')
    cy.get('[data-testid="welcome"]').should('contain', 'Welcome')
  })
})

Что делает Cypress DX исключительным:

  • Time-travel отладка: наведи на любую команду в test runner — увидишь точное состояние DOM
  • Автоматическое ожидание: не нужны явные waits — Cypress повторяет проверки 4 секунды по умолчанию
  • Мгновенные перезагрузки: сохранил файл теста — он перезапустился
  • Network stubbing: перехвати любой API вызов без настройки прокси
// Network stubbing — встроенный
cy.intercept('POST', '/api/login', {
  statusCode: 200,
  body: { token: 'fake-jwt', user: { name: 'Test' } }
}).as('loginRequest')

cy.get('[data-testid="submit"]').click()
cy.wait('@loginRequest')

Selenium: Многословный, но гибкий

# Тест логина — Selenium (Python)
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(driver):
    driver.get(f"{BASE_URL}/login")

    wait = WebDriverWait(driver, 10)

    email = wait.until(
        EC.presence_of_element_located((By.CSS_SELECTOR, '[data-testid="email"]'))
    )
    email.send_keys("user@example.com")

    password = driver.find_element(By.CSS_SELECTOR, '[data-testid="password"]')
    password.send_keys("P@ssw0rd!")

    driver.find_element(By.CSS_SELECTOR, '[data-testid="submit"]').click()

    wait.until(EC.url_contains("/dashboard"))
    welcome = driver.find_element(By.CSS_SELECTOR, '[data-testid="welcome"]')
    assert "Welcome" in welcome.text

Тот же тест занимает в 2 раза больше кода. Каждое взаимодействие требует явных waits. Но ты получаешь:

  • Любой язык: Java, Python, C#, Ruby, Kotlin — используй то, что знает команда
  • Любой браузер: включая Safari, Edge и legacy браузеры
  • Полный контроль: мульти-таб, мульти-окно, скачивание файлов — без ограничений
  • Богатая экосистема: сотни библиотек и интеграций за 20 лет развития

Сравнение Отладки

Здесь Cypress отрывается от Selenium сильнее всего.

Отладка в Cypress

Когда тест падает в Cypress:

  1. Time-travel: пошагово пройди каждую команду и увидь DOM в тот момент
  2. Автоматический скриншот: снимается в точке падения
  3. Видеозапись: полное выполнение теста записывается по умолчанию
  4. Консольный вывод: все XHR запросы, проверки и ошибки залогированы
  5. Selector playground: интерактивно найди нужный CSS-селектор

Редко нужен console.log() или breakpoints. Test runner даёт всё.

Отладка в Selenium

Когда тест падает в Selenium:

  1. Скриншот: нужно настроить (обычно в teardown-хуке)
  2. Логи: логи консоли браузера через driver.get_log('browser')
  3. Stack trace: стандартная отладка на уровне языка
  4. Remote debugging: подключи Chrome DevTools через --remote-debugging-port

Отладка flaky теста в Selenium часто означает добавление sleep, захват скриншотов и многократный запуск для воспроизведения проблемы.

Сравнение Стоимости

ПунктCypressSelenium
ФреймворкБесплатный (MIT)Бесплатный (Apache 2.0)
Параллельное выполнениеCloud: $75-399/месGrid: бесплатно (свои серверы)
Облачные опцииТолько Cypress CloudBrowserStack, Sauce Labs, LambdaTest
ВидеозаписьБесплатно (локально)Сторонние инструменты
DashboardCypress Cloud (платно)Allure, ReportPortal (бесплатно)

Для маленьких команд (< 5 разработчиков) Cypress дешевле в целом. Для энтерпрайза с существующей инфраструктурой Selenium Grid ничего не стоит дополнительно.

Когда Выбрать Cypress

  1. JavaScript/TypeScript стек — Cypress создан для JS-экосистемы
  2. Single-page applications — React, Vue, Angular, Next.js
  3. Приоритет отладки — time-travel экономит часы исследования
  4. Быстрая обратная связь — в 2-3x быстрее, мгновенные перезагрузки
  5. Нужен мок API — встроенный cy.intercept() не имеет аналогов
  6. Component testing — встроенный с v10, тестируй компоненты изолированно
  7. Малые и средние команды — меньше инфраструктуры для поддержки

Когда Выбрать Selenium

  1. Мульти-языковые команды — Java, Python, C#, Ruby разработчики
  2. Мобильное тестирование — Appium использует тот же WebDriver протокол
  3. Кросс-браузерные требования — Safari, Edge, IE11 или старые браузеры
  4. Мульти-таб/окно сценарии — Cypress не может их обработать
  5. Энтерпрайз с Grid — используй существующие инвестиции в инфраструктуру
  6. Cross-origin тестирование — без ограничений по доменам
  7. Регуляторные требования — некоторые индустрии требуют тестирование в конкретных браузерах

Миграция: Selenium → Cypress

Если рассматриваешь миграцию, вот реалистичная оценка:

Оценка трудозатрат: 2-4 часа на тест для ручной конвертации. Автоматические инструменты конвертации существуют, но выдают хрупкие тесты, которые нужно дорабатывать.

Что мигрирует хорошо:

  • Простые взаимодействия со страницей (клик, ввод, проверка)
  • API-driven подготовка тестовых данных
  • Page Object паттерны (переводятся в custom commands Cypress)

Что не мигрирует:

  • Мульти-таб сценарии (нужен редизайн)
  • Верификация скачивания файлов (нужен плагин)
  • Cross-origin сценарии (могут понадобиться обходные пути)

Мой совет: не мигрируй всё разом. Начни новые тесты на Cypress, сохрани существующие на Selenium, и постепенно мигрируй самые поддерживаемые тесты.

AI в тестировании

AI-инструменты изменили процесс написания и поддержки тестов на обоих фреймворках.

Что AI делает хорошо:

  • Конвертация тестового кода между Cypress и Selenium
  • Генерация Page Objects из HTML-структуры
  • Предложение лучших селекторов (data-testid вместо CSS-классов)
  • Написание шаблонного setup и teardown
  • Выявление потенциально flaky паттернов

Что по-прежнему нужно человеку:

  • Решение о том, что тестировать (стратегия тестирования)
  • Оценка пригодности фреймворка для команды
  • Инфраструктурные и бюджетные решения
  • Интерпретация причин flaky тестов

Полезный промпт для оценки фреймворка:

“У меня [React/Vue/Angular] приложение с [X] разработчиками. Нужно тестировать [конкретные сценарии]. CI работает на [GitHub Actions/Jenkins]. Сравни Cypress и Selenium для нашего случая с учётом времени настройки, стоимости поддержки и навыков команды.”

FAQ

Cypress лучше чем Selenium?

Ни один не лучше универсально. Для JavaScript команд, тестирующих современные SPA, Cypress даёт лучший developer experience с time-travel отладкой, автоматическим ожиданием и настройкой из коробки. Selenium остаётся сильнее для мульти-языковых команд, мобильного тестирования через Appium и поддержки legacy браузеров. Я бы выбрал Cypress для нового React проекта и Selenium для Java энтерпрайз-монолита.

Cypress быстрее Selenium?

Да, в 2-3x быстрее при последовательном выполнении. Cypress работает внутри браузера, устраняя overhead сетевого round-trip протокола WebDriver. В моих бенчмарках 100 тестов заняли 5 минут на Cypress vs 11 минут на Selenium. Однако параллельное выполнение в Cypress требует платной подписки Cloud ($75+/мес), тогда как Selenium Grid бесплатен.

Может ли Cypress заменить Selenium?

Для web-only тестирования современных приложений, да. Cypress не может заменить Selenium когда нужно мобильное тестирование (Appium), поддержка legacy браузеров (IE11), мульти-таб/окно сценарии или мульти-языковая разработка тестов. Примерно 60% команд, с которыми я работал, могли бы полностью перейти на Cypress; у остальных 40% есть минимум один блокер.

Что легче изучить?

Cypress проще для JavaScript разработчиков — первый тест можно написать меньше чем за 10 минут. Chainable API читается как английский, а интерактивный test runner даёт мгновенную визуальную обратную связь. Selenium имеет более крутую кривую обучения из-за явных waits, управления драйверами и большего количества шаблонного кода. Но если команда знает Java или Python лучше JavaScript, Selenium будет естественнее.

Стоит ли мигрировать с Selenium на Cypress?

Только если три условия верны: стек в основном на JavaScript, тестируешь только веб (без мобильного), и многословность Selenium реально замедляет команду. Стоимость миграции высока — каждый тест нужно переписать. Закладывай 2-4 часа на тест. Рассмотри постепенный подход: пиши новые тесты на Cypress, сохраняя существующие на Selenium. Также оцени Playwright как альтернативу, которая сочетает гибкость Selenium с DX как у Cypress.

Можно ли использовать Cypress и Selenium вместе?

Да, и некоторые команды делают это успешно. Распространённый паттерн: Cypress для быстрых компонентных и интеграционных тестов (запуск на каждый PR), Selenium для кросс-браузерных и мобильных тестов (ночной запуск). Минус — поддержка двух тестовых фреймворков, двух наборов паттернов и двух конфигураций CI. Делай это только если реально нужны возможности обоих.

Официальные ресурсы

  • Документация Cypress — официальные руководства по установке, основным концепциям, справочник API и лучшие практики
  • Документация Selenium — спецификация WebDriver, браузерные драйверы и биндинги для разных языков

Смотрите также