У Cypress нет поддержки Safari, а за параллельный запуск в CI выше бесплатного лимита нужно платить: два архитектурных ограничения которые толкают команды к Playwright когда важно покрытие кросс-браузерным тестированием или сьют вырастает за пределы одной машины. Командам которые не упираются в эти стены, миграция с рабочего Cypress-сьюта обходится дороже чем даёт. Эта статья разбирает что каждый фреймворк реально делает хорошо, где каждый ломается, и как думать о миграции с Selenium или Cypress когда компромисс неочевиден.
Коротко о главном
Начинаешь новый проект в 2026: Playwright. Уже на Cypress с рабочим сьютом: оставайся, если нет конкретной причины мигрировать. На Selenium: оцени оправдывает ли стоимость обслуживания дальнейшее использование.
Дальше объясняю почему.
Selenium: ветеран
Selenium самый старый из трёх, и по installed base до сих пор наиболее распространённый. Миллионы строк Selenium-тестов сегодня работают в CI-пайплайнах, и это быстро не изменится.
Что Selenium делает хорошо
Выбор языка настоящий. Java, Python, C#, Ruby, JavaScript: Selenium поддерживает все с зрелыми биндингами. Если команда пишет на Java, Selenium с TestNG или JUnit это законный, хорошо задокументированный выбор.
Кросс-браузерное покрытие полное. Selenium поддерживает любой браузер с реализацией WebDriver, включая Internet Explorer и Edge Legacy. Если тестируешь в браузерах которые Playwright не поддерживает, Selenium может быть единственным вариантом.
Экосистема огромная. Stack Overflow, туториалы, библиотеки, интеграции: у Selenium больше 15 лет инвестиций сообщества.
Что Selenium делает плохо
Управление драйверами: постоянная нагрузка на обслуживание. ChromeDriver должен совпадать с версией Chrome. Когда Chrome автообновляется, тесты ломаются пока не обновишь драйвер. Selenium Manager (появился в Selenium 4) улучшает ситуацию, но не устраняет проблему полностью.
Встроенных ожиданий нет. Код ожидания пишешь вручную: WebDriverWait, ExpectedConditions, собственные утилиты для polling. Каждая команда заново изобретает это колесо.
Накладные расходы на настройку. Selenium это библиотека, не фреймворк. Собираешь тестовый фреймворк из Selenium + тест-раннер (JUnit, pytest, Jest) + библиотека ассертов + репортёр. Playwright поставляется готовым пакетом.
Скорость. Selenium-тесты обычно медленнее Playwright-тестов на эквивалентных сценариях.
// Selenium (Java) — ожидание кнопки
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement btn = wait.until(ExpectedConditions.elementToBeClickable(
By.cssSelector("button[data-testid='submit']")
));
btn.click();
// Playwright (TypeScript) — та же операция
await page.getByRole('button', { name: 'Submit' }).click();Cypress: дружелюбная середина
Cypress запустился около 2017 года и заполнил реальную нишу: тестовый фреймворк который легко настраивается и даёт отличный опыт разработки. Он был современной альтернативой Selenium до появления Playwright.
Что Cypress делает хорошо
Опыт разработки. UI тест-раннера Cypress отличный: выполнение тестов в реальном времени, time-travel дебаггинг со снимками DOM, встроенный replay тестов. Для разработчиков которые не живут в тестовых фреймворках, Cypress легко освоить.
Тестирование компонентов. Cypress поддерживает тестирование React, Vue, Angular и Svelte компонентов в изоляции из коробки. Если команда активно пишет компонентные тесты, Cypress конкурентоспособен.
Сообщения об ошибках. Ошибки Cypress чёткие и подробные. Показывают точно какой элемент найден, какой был таймаут, как выглядит текущий DOM.
Что Cypress делает плохо
Поддержка браузеров. Chromium поддерживается полностью. Firefox поддерживается частично. WebKit (Safari) не поддерживается совсем. Если кросс-браузерное покрытие важно, Cypress его не обеспечит.
Параллельный запуск требует оплаты. Запуск тестов на нескольких машинах в CI требует Cypress Cloud. Бесплатный тариф ограничен. Шардинг Playwright бесплатный и встроенный.
Мульти-доменные и мульти-табовые сценарии. Cypress архитектурно проектировался вокруг тестирования в пределах одного источника. Кросс-доменные редиректы (OAuth-потоки, сторонние платёжные системы) требуют обходных путей. Playwright обрабатывает их нативно.
Мобильная эмуляция отсутствует. Playwright умеет эмулировать устройства, вьюпорты, user-агенты, геолокацию и тач-события. Cypress нет.
Работа с iframe ограничена. Playwright считает iframe полноценными браузерными контекстами. У Cypress есть обходные пути которые не всегда покрывают все случаи.
// Cypress — без await, очередь команд
cy.visit('https://lab.becomeqa.com')
cy.get('[data-cy="login-btn"]').click()
cy.get('input[name="username"]').type('admin@becomeqa.com')
// Playwright — явный async/await
await page.goto('https://lab.becomeqa.com')
await page.getByRole('button', { name: 'Login' }).click()
await page.getByLabel('Username').fill('admin@becomeqa.com')Архитектурное отличие принципиальное: Cypress использует очередь команд (команды ставятся в очередь и выполняются позже, без await). Playwright использует стандартный JavaScript async/await. Если знаешь современный JavaScript, модель Playwright интуитивнее. Если только начинаешь с асинхронным программированием, подход Cypress убирает эту сложность.
Playwright: текущий стандарт
Playwright создан и поддерживается Microsoft, вышел в 2020 году и с тех пор быстро растёт.
Что Playwright делает хорошо
Auto-waiting везде. Каждое взаимодействие с локатором автоматически ждёт пока элемент будет готов к действию. Явные ожидания для стандартных сценариев не нужны.
Настоящий кросс-браузерный запуск. Chromium, Firefox и WebKit выполняют одинаковый тестовый код без браузерной конфигурации. Это реальное покрытие Safari на Windows которого ничто другое не даёт.
Полная поддержка TypeScript. Типы встроены, а не добавлены постфактум.
Перехват сети. page.route() перехватывает, изменяет или мокает любой сетевой запрос. Полезно для тестирования состояний ошибок без изменения бэкенда.
// Мокаем неудачный ответ API
await page.route('**/api/items', route => {
route.fulfill({ status: 500, body: '{"error": "Internal server error"}' });
});Мульти-таб и мульти-контекст. Создать новый браузерный контекст или новую вкладку просто:
const newPage = await context.newPage();
await newPage.goto('https://lab.becomeqa.com/other-page');Шардинг бесплатный. Разбиваешь сьют на N машин без внешних сервисов:
npx playwright test --shard=1/4 # запустить 25% тестов на этой машинеAPI-тестирование встроено. Фикстура request предоставляет полноценный HTTP-клиент который разделяет браузерный контекст:
test('api + ui combined', async ({ page, request }) => {
const resp = await request.get('/api/items');
expect(resp.status()).toBe(200);
});Что Playwright делает хуже
Тестирование компонентов экспериментальное. Playwright поддерживает компонентные тесты, но это менее зрелая функция чем у Cypress.
UI Cypress лучше для интерактивной отладки. UI Mode в Playwright хорош, но live preview Cypress и replay DOM-снимков всё ещё даёт лучший опыт разработчикам которые не в первую очередь тестировщики.
Сообщество моложе. Меньше истории в Stack Overflow, меньше туториалов для нестандартных случаев.
Кому использовать Playwright: Новым проектам, командам которым нужно кросс-браузерное покрытие, командам которым нужны API + UI тесты в одном фреймворке, командам которые хотят бесплатную параллелизацию.Сравнение
| Функция | Selenium | Cypress | Playwright |
|---------|----------|---------|------------|
| Языки | Java, Python, C#, JS, Ruby | JavaScript/TypeScript | JS/TS, Python, Java, .NET |
| Auto-waiting | Вручную | Встроено | Встроено |
| Браузеры | Все + IE | Chromium, Firefox частично | Chromium, Firefox, WebKit |
| Мобильная эмуляция | Нет | Нет | Да |
| Мульти-таб | Неудобно | Обходные пути | Нативно |
| Мок сети | Частично | Встроено | Встроено |
| Параллелизация | Бесплатно | Платно (Cloud) | Бесплатно |
| Сложность настройки | Высокая | Низкая | Низкая |
| Компонентные тесты | Нет | Отлично | Экспериментально |
| API-тестирование | Нет | Нет | Встроено |
| Время настройки | 30–60 мин | 10 мин | 10 мин |
Миграция: когда и стоит ли
Selenium → Playwright: Стоит оценить если твой Selenium-сьют несёт высокую стоимость обслуживания из-за управления драйверами и утилит ожидания. Миграция нетривиальная. Page-объекты и тестовую логику можно перенести, а локаторы нужно переписать. Делай фича за фичей, не всё сразу. Cypress → Playwright: Рассмотри если упираешься в потолок поддержки браузеров, нужна бесплатная параллелизация или регулярно нужны мульти-табовые/мульти-доменные сценарии. Если твой Cypress-сьют работает нормально и ты в эти стены не упираешься, стоимость миграции превышает выгоду. Playwright → что угодно: Тяжело обосновать в 2026. Playwright активно развивается, хорошо поддерживается и не имеет архитектурных ограничений которые вынуждали бы мигрировать.Частые вопросы
Selenium исчезнет?
Нескоро. Слишком много существующих тест-сьютов и слишком много команд вложивших средства в Selenium-инструментарий. Но для новых проектов он уже не первый выбор.
Можно использовать Playwright и Cypress в одном проекте?
Можно, но не нужно. Удваивает поверхность зависимостей и разделяет знания команды. Выбери одно.
Что быстрее?
Playwright обычно быстрее всех, особенно при параллельном шардинге по машинам. Cypress сопоставим в рамках одной машины. Selenium медленнее всего из-за накладных расходов WebDriver-протокола.
Где больше вакансий?
Selenium доминирует по абсолютному числу за счёт legacy корпоративных кодовых баз. Вакансии на Playwright растут быстро и сконцентрированы в компаниях строящих новые проекты. Если целишься в современные tech-компании, Playwright всё чаще ожидаемый навык.
→ See also: Начало работы с Playwright: первые тесты за 30 минут | Локаторы Playwright: getByRole, getByLabel, getByText, getByTestId — сравнение | Playwright в 2026 году: почему он стал фреймворком номер один | Миграция с Selenium (или Cypress) на Playwright: практический план