- Настроить браузеры и драйверы слишком сложно (по сравнению с Playwright и Cypress)
- Настройка тест-раннера — это тяжёло, а в Playwright и Cypress он встроен
- Playwright и Cypress могут перехватывать сетевой трафик и позволяют писать событийно-ориентированный код – а Selenium нет
Самый простой способ создать кликбейтный пост про QA — сравнить Selenium с другим инструментом, дав ему броский заголовок (особенно если Selenium оказывается хуже по итогам сравнения).
Эти статьи приводят к заблуждению в отношении того, какие функции доступны в сравниваемых фреймворках, поскольку их авторы часто сравнивают несравнимые вещи.
Selenium всегда был хорошим инструментом для автоматизации браузеров. Он был главным инструментом тестирования веб-приложений на протяжении почти двух десятилетий. Проект Selenium был сфокусирован на сложных задачах автоматизации браузеров. Стабильные API и масштабируемость инфраструктуры выполнения всегда были приоритетом. Мы не уделяли особого внимания мелочам, поскольку существует много других неплохих фреймворков, и необходимость дополнять проект для 5 разных языков — это большая инженерная задача.
Хотелось бы развеять некоторые ошибки, которые регулярно тиражируются в этих вирусных постах.
1. «Настроить браузеры и драйверы слишком сложно» (по сравнению с Playwright и Cypress)
Раньше это действительно было так, поскольку приходилось загружать драйверы. Для GeckoDriver и SafariDriver это не было проблемой – они могли корректно работать с обновлениями браузеров. С другой стороны, для браузеров на основе Chromium необходимо обновлять драйверы с каждым новым выпуском.
Уже больше года Selenium делает это автоматически. Если он не нашёл ChromeDriver или EdgeDriver, он загрузит их с помощью Selenium Manager. С момента своего первого релиза он значительно улучшился, и теперь, вероятно, является лучшим в своём классе, так как последние версии Selenium даже загружают браузеры, если это возможно, и работают с ними. Если сравнивать с Playwright и Cypress, то вам не нужно обновлять зависимости Selenium для обновления браузеров и драйверов; вы по-прежнему используете те же браузеры, что и ваши клиенты, а переключение версий становится проще: вам не нужно менять используемый тестовый фреймворк. И не будем забывать, что он использует браузер, который Google рекомендует использовать для тестирования.
2. «Настройка тест-раннера — это тяжёло, а в Playwright и Cypress он встроен»
Ну… Настройка фреймворков сквозного тестирования с Selenium не так сложна, как некоторые предполагают. Самая сложная задача — убедиться, что драйвер настроен правильно, и мы уже решили эту проблему, как описано выше. Как только это сделано, Selenium позволяет вам использовать тот тест-раннер, с которым вам удобнее. Если вам нужно решение «All Inclusive», с более плотной интеграцией Selenium с тест-раннером, то посмотрите на проекты типа SeleniumBase, Nightwatch, Serenity и так далее, среди них может быть подходящий для вас.
Стоит отметить, что Playwright — второй реально многоязычный фреймворк для автоматизации браузеров (а первый – Selenium). Однако, если вам не нужен TypeScript или JavaScript, вам всё равно придётся самостоятельно настраивать тест-раннер. Некоторые фреймворки имеют плагины, которые автоматически настраивают нужные фикстуры.
Что касается JavaScript/TypeScript, то если вам действительно нужен встроенный тест-раннер, существуют проекты типа NightwatchJS, и ответвления, такие как WebdriverIO. Проекты типа NightwatchJS используют наши библиотеки, а проекты-ответвления имеют свои собственные библиотеки (но следуют стандарту WebDriver).
3. «Playwright и Cypress могут перехватывать сетевой трафик и позволяют писать событийно-ориентированный код – а Selenium нет»
Selenium это умеет с момента выхода 4 версии. Он настолько хорош в этом, что даже команда Playwright рекомендует использовать Selenium для масштабирования ваших тестов (ссылка!). Команда Selenium не будет удалять эту функцию в ближайшее время, поскольку мы зависим от реализации спецификации WebDriver BiDi для замены этих функций.
Команда Selenium всегда старалась гарантировать, что обновления ничего не ломают без предупреждения. Поэтому для каждого языка предусмотрены высокоуровневые оболочки, такие как NetworkInterceptor, которые изолируют тесты от используемой технологии.
Итог
Как мы убедились из вышеизложенного, Selenium так же хорош, как и другие продукты на рынке. Единственное отличие Selenium от Cypress и Playwright заключается в том, что мы являемся волонтерским проектом, а не коммерческим.