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 повторяет проверки пока не пройдут или не истечёт таймаут
- Полный контроль над сетевым слоем (стабирование, перехват, тайминг)
Сравнение Функций
| Функция | Cypress | Selenium |
|---|---|---|
| Языки | JavaScript/TypeScript | Java, 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 тестов)
| Метрика | Cypress | Selenium (Python) |
|---|---|---|
| Общее время | 4м 52с | 11м 18с |
| Среднее на тест | 2.9с | 6.8с |
| Flaky rate | 2% | 8% |
| Время настройки | 15с | 45с |
Cypress в 2.3x быстрее последовательно. Архитектура в браузере устраняет сетевые round-trip, а автоматическое ожидание снижает повторы из-за flaky тестов.
Параллельное выполнение (100 тестов, 4 воркера)
| Метрика | Cypress | Selenium |
|---|---|---|
| Общее время | 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:
- Time-travel: пошагово пройди каждую команду и увидь DOM в тот момент
- Автоматический скриншот: снимается в точке падения
- Видеозапись: полное выполнение теста записывается по умолчанию
- Консольный вывод: все XHR запросы, проверки и ошибки залогированы
- Selector playground: интерактивно найди нужный CSS-селектор
Редко нужен console.log() или breakpoints. Test runner даёт всё.
Отладка в Selenium
Когда тест падает в Selenium:
- Скриншот: нужно настроить (обычно в teardown-хуке)
- Логи: логи консоли браузера через
driver.get_log('browser') - Stack trace: стандартная отладка на уровне языка
- Remote debugging: подключи Chrome DevTools через
--remote-debugging-port
Отладка flaky теста в Selenium часто означает добавление sleep, захват скриншотов и многократный запуск для воспроизведения проблемы.
Сравнение Стоимости
| Пункт | Cypress | Selenium |
|---|---|---|
| Фреймворк | Бесплатный (MIT) | Бесплатный (Apache 2.0) |
| Параллельное выполнение | Cloud: $75-399/мес | Grid: бесплатно (свои серверы) |
| Облачные опции | Только Cypress Cloud | BrowserStack, Sauce Labs, LambdaTest |
| Видеозапись | Бесплатно (локально) | Сторонние инструменты |
| Dashboard | Cypress Cloud (платно) | Allure, ReportPortal (бесплатно) |
Для маленьких команд (< 5 разработчиков) Cypress дешевле в целом. Для энтерпрайза с существующей инфраструктурой Selenium Grid ничего не стоит дополнительно.
Когда Выбрать Cypress
- JavaScript/TypeScript стек — Cypress создан для JS-экосистемы
- Single-page applications — React, Vue, Angular, Next.js
- Приоритет отладки — time-travel экономит часы исследования
- Быстрая обратная связь — в 2-3x быстрее, мгновенные перезагрузки
- Нужен мок API — встроенный
cy.intercept()не имеет аналогов - Component testing — встроенный с v10, тестируй компоненты изолированно
- Малые и средние команды — меньше инфраструктуры для поддержки
Когда Выбрать Selenium
- Мульти-языковые команды — Java, Python, C#, Ruby разработчики
- Мобильное тестирование — Appium использует тот же WebDriver протокол
- Кросс-браузерные требования — Safari, Edge, IE11 или старые браузеры
- Мульти-таб/окно сценарии — Cypress не может их обработать
- Энтерпрайз с Grid — используй существующие инвестиции в инфраструктуру
- Cross-origin тестирование — без ограничений по доменам
- Регуляторные требования — некоторые индустрии требуют тестирование в конкретных браузерах
Миграция: 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, браузерные драйверы и биндинги для разных языков
Смотрите также
- Cypress Deep Dive - Полное руководство по продвинутым паттернам Cypress
- Cypress Tutorial - Пошаговая настройка Cypress и первые тесты
- Selenium Tutorial для начинающих - Полное руководство по Selenium с нуля
- Selenium WebDriver в 2026 - Стоит ли ещё учить Selenium?
- Playwright vs Cypress - Сравнение современных альтернатив
- Selenium Grid 4 - Распределённое тестирование с Selenium
- Test Automation Tutorial - Основы и стратегия автоматизации
