Почему это сравнение важно

Выбор фреймворка автоматизации тестирования — одно из наиболее важных технических решений, которое принимает команда QA. Выбранный фреймворк повлияет на продуктивность команды, надёжность тестов, пул кандидатов, скорость CI/CD и затраты на поддержку на годы вперёд. Неправильный выбор ведёт к дорогостоящим миграциям.

Этот урок даёт объективное, функция-за-функцией сравнение трёх самых популярных фреймворков веб-тестирования: Selenium WebDriver, Playwright и Cypress. Вместо объявления единственного победителя мы дадим критерии для принятия правильного решения в вашем конкретном контексте.

Сравнение архитектуры

Selenium WebDriver

Selenium использует протокол W3C WebDriver. Тестовый код отправляет HTTP-запросы драйверу браузера (ChromeDriver, GeckoDriver), который транслирует их в команды браузера. Эта архитектура означает:

  • Языково-независимый: Любой язык с HTTP-клиентом может управлять Selenium
  • Браузерно-независимый: Любой браузер, реализующий WebDriver, поддерживается
  • Сетевые накладные расходы: Каждая команда включает HTTP round trip
  • Отдельные процессы: Тест-раннер, драйвер и браузер — три отдельных процесса

Playwright

Playwright общается с браузерами напрямую через нативные протоколы — Chrome DevTools Protocol (CDP) для Chromium и аналогичные протоколы для Firefox и WebKit. Это означает:

  • Прямая коммуникация: Нет промежуточного процесса драйвера
  • Авто-ожидание: Встроенные проверки готовности элемента перед каждым действием
  • Мультиконтекстность: Управление несколькими экземплярами браузера, вкладками и контекстами одновременно
  • Перехват сети: Нативный перехват и модификация запросов

Cypress

Cypress выполняет тестовый код прямо внутри браузера рядом с приложением:

  • Выполнение в одном процессе: Нулевая сетевая задержка между тестами и приложением
  • Автоматические повторы: Команды повторяются до успеха или таймаута
  • Отладка путешествия во времени: Снимок на каждой команде для визуальной отладки
  • Компромисс: Ограничен одной вкладкой браузера и только JavaScript/TypeScript

Функция-за-функцией

ФункцияSeleniumPlaywrightCypress
ЯзыкиJava, Python, C#, Ruby, JS и др.JS/TS, Python, Java, .NETТолько JS/TS
БраузерыChrome, Firefox, Safari, Edge, IEChromium, Firefox, WebKitChrome, Firefox, Edge, WebKit (экспериментально)
Мульти-вкладкиЧерез window handles (сложно)Нативный API BrowserContextНе поддерживается
Авто-ожиданиеРучные ожиданияУмные ожидания встроеныАвтоматические повторы встроены
Перехват сетиЧерез proxy (сложно)Нативный API route()Нативный cy.intercept()
Мобильный тестингЧерез интеграцию с AppiumТолько эмуляция устройствТолько симуляция viewport
ПараллелизацияSelenium Grid / TestNGВстроенный шардинг тестовЧерез Cypress Cloud или плагины
iframesswitchTo().frame()frameLocator() (просто)Ограниченно, нужны обходные пути
Скачивание файловСложно, зависит от браузераНативная поддержкаНужны плагины
Запись видеоНужны внешние инструментыВстроенный трейсинг и видеоВстроено
Размер сообществаСамое большое (20+ лет)Быстро растётБольшое, JS-ориентированное
Кривая обученияКруче (ожидания, настройка)УмереннаяСамая простая для JS-разработчиков

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

Реальная скорость зависит от многих факторов, но общие закономерности проявляются:

Набор тестов: 100 E2E-тестов на типичном веб-приложении

Cypress:     ~3-5 минут   (выполнение в браузере, без сетевых накладных расходов)
Playwright:  ~4-6 минут   (прямой протокол, параллельные контексты)
Selenium:    ~8-15 минут  (HTTP overhead на каждую команду, время настройки)

Это приблизительные диапазоны. Реальная производительность зависит от приложения, дизайна тестов и инфраструктуры. Cypress и Playwright обычно в 2-3 раза быстрее Selenium для одного и того же набора тестов благодаря архитектурным преимуществам.

Когда выбирать каждый фреймворк

Выбирайте Selenium когда

  • Команда работает в основном на Java, C#, Python или Ruby (не JavaScript)
  • Нужно тестировать Internet Explorer или старые версии браузеров
  • Нужно нативное мобильное тестирование (Selenium + Appium)
  • В организации уже есть инфраструктура и экспертиза Selenium
  • Нужно решение на основе стандарта W3C

Выбирайте Playwright когда

  • Нужно кроссбраузерное тестирование включая WebKit (движок Safari)
  • Нужны мульти-вкладочные, мультиконтекстные или многопользовательские сценарии
  • Хотите лучшее авто-ожидание и надёжность из коробки
  • Команда использует TypeScript, Python, Java или .NET
  • Нужно API-тестирование вместе с UI-тестированием в одном фреймворке

Выбирайте Cypress когда

  • Команда сфокусирована на JavaScript/TypeScript
  • Приоритет — опыт разработки и отладка
  • Приложение — single-page application (SPA)
  • Хотите самый быстрый старт
  • Отладка «путешествие во времени» важна для рабочего процесса

Матрица принятия решений

Используйте эту матрицу для оценки фреймворков под ваш проект. Оцените каждый критерий от 1 до 5 по вашим требованиям, затем умножьте на вес.

КритерийВесSeleniumPlaywrightCypress
Поддержка языков?542
Покрытие браузеров?543
Скорость?245
Надёжность (авто-ожидание)?254
Опыт отладки?245
Мульти-вкладки/контексты?351
Контроль сети?255
Мобильная поддержка?521
Сообщество/экосистема?544
Интеграция CI/CD?454
Кривая обучения?245

Как использовать: Назначьте веса (1-5) на основе приоритетов проекта, затем рассчитайте итоговые баллы.

Пример — SPA-стартап с JS-командой:

  • Поддержка языков: вес 1 (только JS — нормально)
  • Скорость: вес 5 (быстрый CI критичен)
  • Отладка: вес 4 (маленькая команда, нужны быстрые исправления)
  • Результат: побеждает Cypress

Пример — Энтерпрайз с Java-командой, legacy-браузеры:

  • Поддержка языков: вес 5 (обязательна поддержка Java)
  • Покрытие браузеров: вес 5 (требуется IE11)
  • Мобильный: вес 4 (нужен Appium)
  • Результат: побеждает Selenium

Пример — Современное веб-приложение, нужен кроссбраузер:

  • Покрытие браузеров: вес 5 (тестирование Safari критично)
  • Надёжность: вес 5 (CI должен быть зелёным)
  • Мульти-вкладки: вес 3 (некоторые мульти-пользовательские тесты)
  • Результат: побеждает Playwright

Соображения по миграции

Selenium на Playwright

Playwright предлагает наиболее естественную миграцию с Selenium, потому что оба используют похожую архитектуру внешнего управления. Ключевые изменения:

  • Заменить явные ожидания на авто-ожидание Playwright
  • Заменить findElement на locator (ленивая оценка)
  • Заменить switchTo().frame() на frameLocator()
  • Убрать логику повторов (встроена в Playwright)

Selenium на Cypress

Более значительная переработка из-за архитектурных различий:

  • Весь тестовый код должен быть на JavaScript/TypeScript
  • Заменить page objects кастомными командами или app actions
  • Network mocking заменяет многие test fixtures
  • Нет мульти-вкладок — переработать затронутые тесты

Cypress на Playwright

Умеренные усилия:

  • Заменить cy.get() на page.locator()
  • Заменить cy.intercept() на page.route()
  • Заменить кастомные команды методами page object
  • Получить поддержку мульти-вкладок и мультиконтекстов

Реальные кейсы

Кейс 1: Миграция платформы электронной коммерции

Команда из 200 инженеров мигрировала с Selenium (Java) на Playwright (TypeScript). Результаты через 6 месяцев:

  • Выполнение тестовой сюиты: 45 минут сократилось до 12 минут
  • Доля нестабильных тестов: 8% снизилось до 1.5%
  • Время создания нового теста: 2 часа сократилось до 45 минут
  • Усилия на миграцию: 4 инженера, 3 месяца на 800 тестов

Кейс 2: Стартап выбирает первый фреймворк

Стартап из 10 человек выбрал Cypress для своего React SPA. Через 18 месяцев:

  • 300 E2E-тестов выполняются за 6 минут
  • Принятие разработчиками: 100% — все разработчики пишут тесты
  • Столкнулись с ограничением при необходимости тестов OAuth-потока в нескольких вкладках
  • Добавили Playwright для 15 тестов, требующих мульти-вкладок

Упражнения

Упражнение 1: Оценка фреймворка

Для вашего текущего проекта (или гипотетического) заполните матрицу решений:

  1. Перечислите технические требования команды (языки, браузеры, мобильные потребности)
  2. Назначьте веса каждому критерию на основе приоритетов проекта
  3. Рассчитайте баллы и рекомендуйте фреймворк с обоснованием
  4. Определите риски и стратегии их снижения для вашего выбора

Упражнение 2: Proof of Concept

Выберите фреймворк с наивысшим баллом:

  1. Реализуйте одни и те же 5 тестовых сценариев во всех трёх фреймворках
  2. Измерьте время настройки, время создания тестов и скорость выполнения
  3. Оцените опыт отладки, намеренно внеся ошибки
  4. Задокументируйте выводы в отчёте сравнения

Упражнение 3: План миграции

Создайте план миграции с Selenium на выбранный современный фреймворк:

  1. Инвентаризируйте существующие тесты по сложности (простые, средние, сложные)
  2. Определите тесты, которые нельзя мигрировать (мульти-вкладки, специфичные потребности браузера)
  3. Оцените трудозатраты для каждого уровня сложности
  4. Предложите поэтапный план миграции с сохранением покрытия CI на протяжении всего процесса