В рамках проекта
Selenium разрабатываются драйверы для браузеров Firefox, Internet Explorer и Safari, а также драйверы для мобильных браузеров Android и iOS. Драйвер для браузера Google Chrome разрабатывается в рамках проекта Chromium, а драйвер для браузера Opera (включая мобильные версии) разрабатывается компанией Opera Software. Поэтому они формально не являются частью проекта
Selenium, распространяются и поддерживаются независимо. Но логически, конечно, можно считать их частью семейства продуктов Selenium. Аналогичная ситуация и с клиентскими библиотеками – в рамках проекта
Selenium разрабатываются библиотеки для языков
Java, .
Net (C#),
Python,
Ruby,
JavaScript. Все остальные реализации не имеют отношения к проекту Selenium, хотя, возможно, в будущем, какие-то из них могут влиться в этот проект.
Исходя их этого, становится очевидным, что
Selenium WebDriver по сути не является готовым инструментом для автоматизации тестирования. По своей сущности
Selenium WebDriver представляет собой:
- спецификацию программного интерфейса для управления браузером,
- референсные реализации этого интерфейса для нескольких браузеров,
- набор клиентских библиотек для этого интерфейса на нескольких языках программирования.
WebDriver – это драйвер браузера, то есть не имеющая пользовательского интерфейса программная библиотека, которая позволяет различным другим программам взаимодействовать с браузером, управлять его поведением, получать от браузера какие-то данные и заставлять браузер выполнять какие-то команды. Исходя из этого определения, ясно, что
WebDriver не имеет прямого отношения к тестированию. Он всего лишь предоставляет автотестам доступ к браузеру. На этом его функции заканчиваются.
Кто занимается остальным?
- Структурирование, группировку и запуск тестов, а также генерацию отчётов о тестировании, обеспечивает фреймворк тестирования, такой как JUnit или TestNG для Java, NUnit или Gallio для .Net, RSpec или Cucumber для Ruby и так далее.
- Разработка тестов ведётся в среде Eclipse, Intellij IDEA, Visual Studio, RubyMine и так далее.
- Сборка осуществляется посредством Maven, Gradle, Ant, NAnt,Rake и так далее.
- Запуск тестов по расписанию и публикацию отчётов выполняет сервер непрерывной интеграции – Jenkins, CruiseControl, Bamboo, TeamCity и так далее.
И всё это – самостоятельные инструменты, не имеющие отношения к проекту
Selenium. Разумеется,
WebDriver может использоваться не только при тестировании. Ему вообще безразлично, кто и зачем хочет управлять браузером. Вы можете автоматизировать какие-то рутинные задачи. Можете сделать ботов, которые будут флудить в форумах. Можете сделать скрипт, который автоматически снимает скриншоты для документации. Всё что угодно. Драйверу всё равно. Он всего лишь предоставляет доступ к браузеру.
При этом интерфейс самого
WebDriver довольно скуден. Почему? Потому, что
WebDriver – это:
- драйвер браузера, то есть библиотека достаточно низкого уровня абстракции,
- стандарт на интерфейс управления браузером, то есть минимальный набор команд, который должен быть реализован в каждом браузере.
При разработке
Selenium WebDriver изначально была поставлена цель – не включать в него ничего лишнего. Стандартный интерфейс управления браузером должен быть простым и стабильным. Набор команд последовательно сокращался, были выброшены такие «повышающие удобство использования» команды как
check,
uncheck (для чекбоксов),
select (для выпадающих списков). Все они сводятся к более простой команде
click, и поэтому они лишние.
Но зато благодаря этой примитивности интерфейса сейчас для интерфейса
WebDriver имеются реализации клиентских библиотек на
Java,
C#,
Ruby,
Python,
JavaScript,
PHP,
Perl. И благодаря той же самой простоте
WebDriver прекрасно интегрируется с любыми другими инструментами, встраивается в любой стек. В этом секрет его популярности и быстрого распространения – он не пытается «победить» другие инструменты, вместо этого он интегрируется с ними.
Задачу же удобства использования должны решать расширения, построенные на базе
Selenium WebDriver. Именно они должны предоставлять расширенный набор команд, реализуя эти команды через примитивный интерфейс
WebDriver. В дистрибутиве
Selenium имеется класс
Select, предназначенный для работы с выпадающими списками, который является наглядной демонстрацией того, как должны строиться расширения.
Постепенно появляются библиотеки, которые строятся на базе
Selenium WebDriver и предоставляют более высокий уровень абстракции:
Selenide,
fluent-selenium,
watir-webdriver,
Thucidides. Популярные фреймворки для проектирования тестов позволяют наряду с другими драйверами использовать
WebDriver. Среди таких фреймворков можно упомянуть
Robot Framework,
Capybara и тот же
Thucidides. Число таких расширений и инструментов будет расти, сложность тоже. Так что вскоре может так случиться, что вы, используя какой-то инструмент, будете выполнять тесты, даже не подозревая о том, что взаимодействие с браузером осуществляется через драйвер
Selenium WebDriver.