К содержанию

Wiki · Технологии разработки

Selenium

Selenium – это открытый проект для автоматизации браузера: программа открывает Chrome, Firefox, Edge или Safari, кликает по кнопкам, вводит текст и проверяет, что получилось. Чаще всего на нём пишут автотесты сайтов и веб-приложений.

Если подрядчик говорит «у нас на проекте автотесты на Selenium», это значит примерно следующее. Есть набор сценариев: открыть каталог, добавить товар в корзину, оформить заказ, войти в личный кабинет. После каждого обновления скрипты прогоняют эти сценарии в настоящем браузере и сообщают, где что сломалось. Человеку не нужно вручную проходить корзину в двадцатый раз.

Не путайте с одноимённым витамином и отелями: в Wordstat запрос «selenium» наполовину про них.

Откуда взялся Selenium и что такое WebDriver

Проект начал Джейсон Хаггинс в 2004 году в компании ThoughtWorks: ему нужно было тестировать внутреннее приложение для учёта рабочего времени. Позже Саймон Стюарт сделал WebDriver, инструмент с отдельным драйвером под каждый браузер, и проекты объединились. Selenium 4 вышел в октябре 2021 года.

WebDriver со временем стал стандартом W3C: в 2018 году консорциум утвердил его как рекомендацию. Это общий протокол, по которому внешняя программа управляет браузером. Поэтому один и тот же тест работает в разных браузерах, а сами производители браузеров поддерживают свои драйверы.

Сейчас в проекте Selenium несколько частей:

  • WebDriver: библиотеки для Java, Python, C#, Ruby и JavaScript, на которых пишут сценарии;
  • Grid: запуск тестов параллельно на нескольких машинах и в разных браузерах;
  • IDE: расширение для браузера, которое записывает действия человека и проигрывает их снова;
  • Selenium Manager: сам скачивает нужный драйвер и браузер, раньше это делали вручную.
Схема работы Selenium: скрипт теста отправляет команды WebDriver драйверу браузера или в Selenium Grid для параллельного запуска
Как тест Selenium управляет браузером

Так выглядит шаг теста на Python: открыть страницу, найти поле поиска и ввести запрос.

driver = webdriver.Chrome()
driver.get('https://example.com/catalog/')
driver.find_element(By.NAME, "q").send_keys('смеситель')

Какие проверки сайта отдают Selenium, а какие нет

Автотесты окупаются на сценариях, которые приносят деньги и ломаются незаметно: оформление заказа, оплата, регистрация, формы заявок, фильтры каталога. Если после обновления 1С-Битрикс перестала отправляться форма, автотест скажет об этом в тот же день, а не через неделю, когда упадут заявки.

  • Регрессия: после каждой доработки проверить, что старое не сломалось.
  • Одинаковые сценарии в Chrome, Firefox, Safari и Edge.
  • Длинные формы и личные кабинеты, которые скучно проходить руками.
  • Удобство и внешний вид: робот не скажет, что кнопку трудно найти. Это задача юзабилити-тестирования.
  • Нагрузка: сотни браузеров на Selenium не заменят нагрузочное тестирование, для него есть свои инструменты.

Слабое место Selenium в хрупкости. Тест ищет кнопку по адресу в вёрстке, верстальщик переименовал класс, и тест падает, хотя сайт работает. Хорошие тесты опираются на устойчивые атрибуты и явные ожидания, а не на паузы «подождать 5 секунд». Как автотесты встраиваются в общую проверку перед запуском, описано в статье Тестирование сайта.

Selenium или Playwright: что выбрать под задачу

Главный соперник Selenium сейчас Playwright от Microsoft. Он моложе, сам ждёт появления элементов на странице и работает с движками Chromium, Firefox и WebKit.

СитуацияSeleniumPlaywright
В компании уже есть тесты и команда на Java или C#подходит, переписывать не нужноесть Java и .NET, но тесты придётся переносить
Нужен настоящий Safari или старые браузерыработает с официальными драйверами браузеровиспользует свои сборки движков, WebKit вместо Safari
Новый проект на JavaScript или TypeScriptподходитобычно быстрее в настройке, меньше ручных ожиданий
Запуск на десятках машинGridпараллельный запуск встроен в тест-раннер

Для заказчика важнее другое: тесты должны лежать в репозитории проекта, запускаться одной командой и передаваться вместе с кодом. Тогда новая команда их подхватит, на каком бы инструменте они ни были написаны.

Selenium, парсинг и защита сайта от ботов

Раз Selenium управляет настоящим браузером, его используют и для сбора данных со страниц, которые подгружают цены и остатки скриптами. Про сам сбор данных и его правовые рамки читайте в статье Парсинг.

Со стороны владельца сайта такой бот выглядит как обычный посетитель, но есть отличия. Стандарт WebDriver прямо предусматривает свойство navigator.webdriver: браузер под удалённым управлением сообщает странице, что им управляет программа. Добросовестные инструменты этот флаг не скрывают. Другие признаки ботов видны в логах сервера: слишком ровный темп запросов, обход сотен карточек подряд, много сессий с одного адреса.

Признаки автоматизированного браузера в логах и на странице и меры защиты сайта от ботов без блокировки поисковых роботов
Как сайт отличает бота от посетителя

Защита строится слоями: ограничение частоты запросов на сервере, фильтр трафика у хостинга или CDN, капча на формах. Перекрывать всё подряд не стоит: если ограничения задевают роботов Яндекса и Google, страдает индексация. Поэтому правила настраивают по логам и проверяют, что поисковые роботы проходят.

Автотесты на Selenium, WebDriver и боты на сайте

Чем Selenium отличается от WebDriver?

WebDriver – это стандарт W3C и протокол, по которому программа управляет браузером, а Selenium – проект, который этот протокол использует и добавляет к нему библиотеки для языков программирования, Grid и IDE. Selenium WebDriver называют часть проекта, на которой пишут тесты.

На каком языке пишут тесты Selenium?

Тесты Selenium пишут на Java, Python, C#, Ruby или JavaScript. Обычно берут язык команды, которая будет их поддерживать.

Почему автотесты на Selenium падают, хотя сайт работает?

Чаще всего тест ищет элемент по классу или пути в вёрстке, а их поменяли. Вторая причина в ожиданиях: скрипт кликает раньше, чем кнопка появилась. Лечится устойчивыми атрибутами для тестов и явным ожиданием нужного состояния страницы.

Как сайт понимает, что им управляет Selenium?

Браузер под управлением WebDriver выставляет свойство navigator.webdriver, и скрипт на странице может его прочитать. Ещё ботов выдают ритм запросов, однотипные маршруты по сайту и много сессий с одного IP-адреса в логах.

Где запускают автотесты Selenium после каждого обновления сайта?

Обычно на сервере сборки: после каждого изменения кода система CI поднимает браузеры, прогоняет сценарии и присылает отчёт. Для параллельного запуска в разных браузерах используют Selenium Grid или облачные фермы браузеров.

Когда автотесты для сайта не окупаются?

Для небольшого сайта-визитки, который меняют пару раз в год, ручная проверка обходится дешевле, чем написание и поддержка тестов. Автотесты оправданы там, где часто выходят доработки и есть сценарии с деньгами: корзина, оплата, заявки, личный кабинет. Начинать лучше с трёх-пяти главных сценариев: каждый тест потом придётся обновлять вместе с вёрсткой, а широкое покрытие быстро становится отдельной статьёй расходов.

Если у вас уже есть сайт с автотестами или без них, берём его на техническую поддержку: проверяем главные сценарии после обновлений. Настройка защиты от ботов и ограничений по логам входит в услугу информационной безопасности сайтов.

Источники

  • Документация Selenium: разделы WebDriver, Grid, IDE, Selenium Manager
  • Selenium: история проекта и анонс Selenium 4
  • W3C WebDriver: спецификация и сообщение о статусе рекомендации
  • Документация Playwright

Остались вопросы по теме «Selenium»?

Напишите нам в Telegram или MAX. Ответит специалист, который отвечает за эту тему, или руководитель проектов в рабочее время.

Сергей ЧерняковОтвечает по темеСергей ЧерняковWeb-разработчик

Посчитайте стоимость проекта за 2 минуты

Калькулятор соберёт смету по нашим тарифам: сайт, дизайн, интеграции и поддержка.