.
В 2020 году Cypress был лидером в своем сегменте, и крайне популярной вещью — имея уникальные, как для 2020 года, функции. Но были и минусы, а обещанные усовершенствования так и не заработали, как обещали клиентам. Перешедшие на Cypress клиенты, тем не менее, не были готовы возвращаться назад на Selenium, ожидали улучшений в Cypress или похожие альтернативные решения. А их долго не было, да и возникла привычка, в конце концов.
А сейчас, осенью 2021, есть Playwright, и это весьма крепкий конкурент Cypress. Несмотря на то что вышел тоже в прошлом году, Playwright активно обновляется, имеет широкий функционал, в нем не наблюдается характерных минусов Cypress’а. Правильно будет сказать, что Playwright сейчас в тренде, и выглядит так, что это будущий основной фреймворк автоматизации.
Что плохо в Cypress
Проблемы с iFrame. Возможно, Cypress хорошо приспособлен для тестирования современных приложений, но многие компании все еще работают “в гибридной модели”, то есть им нужен один фреймворк, работать в нескольких сложно. Cypress не поддерживает iFrame в полной мере, а достичь этого, похоже, нереально.
Проблемы со сторонней авторизацией. То, о чем на форумах говорят как о Cross-Origin/Third Party Login Issue. В Cypress пытались объяснять свой отказ поддерживать такие сценарии автоматизации, но как-то неубедительно. В этой сфере как правило применяется E2E-тестирование, а в Cypress призывают тестировать такие сценарии через тестирование API, или еще как-то по другому. Это приводит к ситуациям, когда компания вынуждена модифицировать свою систему авторизации лишь для автоматизации тестирования, и вообще интегрировать Cypress у себя в процессы, чего может быть хотят не все. Это всего лишь тестирование, и многие компании не хотят инвестировать в такие узкие сферы, кастомизировать всю свою авторизацию лишь для Cypress.
Если в компании пользуются решениями авторизации типа SSO или подобными, автоматизация таких вещей достаточно сложное дело: Cypress не поддерживает несколько Cross-Origin domain в одном скрипте.
Нет поддержки нескольких окон и вкладок. Cypress не поддерживает мультивкладки и окна, но дали обходной путь — удалить target-атрибут. Тестировщику может понадобиться реплицировать какой-то сценарий как это делают конечные пользователи, но это выглядит “неправильным хаком”, многим не нравятся такие обходные пути.
Поддержка браузеров. Cypress все еще не поддерживает Safari. Большинство владельцев Маков сидят в Safari, а тестировщик обязан прогонять тесты на всех популярных браузерах.
Не поддерживается параллельное тестирование в браузере. На локальной машине можно запустить лишь один браузер с Cypress, параллельное тестирование заблокировано. Многие тестировщики не хотят тратить время на последовательное выполнение тестов.
Паттерн Page Object. Применяется во многих компаниях и в различных инструментах для автоматизированного тестирования, однако Cypress это не одобряет. Что не мешает тестировщикам применять паттерн, несмотря на позицию владельцев Cypress. А владельцы продвигают, вместо Page Objects, свой якобы перспективный паттерн App Actions.
Проблемы с интеграцией CI/CD. Если в компании применяется сторонний софт, нужно ставить Cypress на каждую прогонку тестов. Время на установку иногда достигает 10-15 минут, а если компания платит за софт для билда по времени пользования, то получается теряет что-то на каждой установке Cypress.
Проблемы с async/await. Применение в Cypress заставляет тесты вести себя непредсказуемо, что неприемлемо для современного фреймворка.
Проблемы с созданием тест-сьютов. Если тестировщик не хочет создавать наборы, если он планирует переходить с Protractor и хочет иметь те же функции в Cypress, то его ждет разочарование — в Cypress все еще не сделали такую простую функцию, будучи на рынке много лет.
XPath. Cypress поддерживает локаторы, пользоваться удобно, но, опять же, работа с XPath требует установки дополнительного плагина.
Зависимости. Тестировщик в Cypress вынужден добавлять в него все больше сторонних плагинов — множество функций из коробки не поддерживаются, и это не нравится тестировщикам. Причем клиент вряд ли знает заранее, существует ли плагин под его задачи, а постоянное обновление плагинов несколько утомляет.
Дебаг. Cypress удалил прямую поддержку дебага из Visual Studio Code, так что надо работать с developer tools и дебаггером. Не всем это нравится.
Автоматическое ожидание. В документации Cypress говорится, что он ожидает загрузки всех элементов до начала любого действия, но существует много ситуаций когда это не подходит.
Что касается E2E-тестирования, много кто хотел бы иметь функциональность “как в Селениуме”, однако Cypress все еще отстает.
Cypress был лидером в своем сегменте пару лет, и за это время разработчики “полировали” проблемы с Github-ом, а лучше бы (как считают многие) сосредоточились на перечисленных выше проблемах.
Итак, сейчас у пользователей Cypress есть хорошая альтернатива в виде Playwright.
Этот продукт агрессивно вошел на рынок, обладая приличной функциональностью. Не прекратил развитие после презентации и выхода, и сейчас это вполне состоявшийся продукт. И да, он опенсорсный, хотя и принадлежит Microsoft.
Почему Playwright хорошо зашел
Нет проблем с iFrame. То есть нет ограничений в Playwright на действия с iFrame.
Нет проблем с Cross-Origin-входом. Playwright не привязывает к одному домену; можно запустить несколько экземпляров браузера и автоматизировать тестирование таких сценариев.
Браузеры. Поддерживает Chromium, Firefox, и Safari (и все браузеры iOS-платформы WebKit).
Параллельное выполнение. Поддерживает параллельное выполнение тестов.
XPath. Не нужно ставить дополнительные плагины для XPath, все нормально работает из коробки.
Дебаг в Visual Studio Code. Playwright хорошо работает с VS Code, поддерживается дебаг и все инструменты.
Интеграция CI/CD. Стандартная, как в любом современном фреймворке тестирования, реализовано весьма неплохо.
Автоматическое ожидание. Есть встроенный механизм, который может настраиваться, с возможностью задавать время ожидания.
Поддержка нескольких окон и табов. Можно работать в нескольких окнах/вкладках, конфигурировать их.
Загрузка и передача файлов. Много опций управления передачей и загрузкой, для этого не нужны дополнительные плагины.
Паттерн Page Object. В отличие от Cypress полностью поддерживает паттерн, если разобраться с документацией, можно все сделать еще лучше.
Фичи Playwright, которые лучше чем в Cypress
Добавим, не только в Cypress, а вообще свежо, для 2020-21 года.
Поддержка нескольких языков. А именно JavaScript, Java, C#, и Python.
Генерация кода в CodeGen. Тесты можно записывать в Playwright CodeGen, и этот инструмент генерирует код тестовых скриптов.
Тестирование Safari на Windows. При установке фреймворка также ставится целый набор браузеров — Chrome, Firefox, Webkit. Последний представляет собой опенсорсную версию Safari, способную запускаться на Windows, в целях тестирования.
Эмуляция девайсов. Выполнение тестов на эмулированных девайсах, запускается одной командой из оболочки Playwhight.
Генерация PDF-документов. Хорошая фича, в других фреймворках пока не реализована.
Перезапуск тестов. Можно указать количество перезапусков, это стандартная функция но реализована чуть удобнее.
Отчеты Allure. Функция интегрирована лучше чем у конкурентов.
По общему впечатлению в комьюнити, у Playwright богатый функционал, особенно в сравнении с конкурентами. Разработка активно продолжается, баги устраняются оперативно, так что можно ожидать дальнейшего расширения функциональности.
Итак
Переходить ли со знакомого Cypress, решает компания. Это разумеется зависит от задач в QA-отделе, и личных предпочтений.