Основатель белорусского сообщества автоматизаторов COMAQA.BY Антон Семенченко рассказывает о том, что такое Selenium Webdriver и какие преимущества имеет этот инструмент.
Webdriver — популярный инструмент для управления реальным браузером, который можно использовать как для автоматизации тестирования веб приложений, так и для выполнения других рутинных задач, связанных с работой в вебе. Управление происходит как локально, так и удалённо и наиболее близко имитируюет действия пользователя.
Кроме того, Webdriver — проект с открытым исходным кодом, поддерживает множество языков программирования и имеет большое сообщество пользователей.
Selenium 2 (или Webdriver) — последнее пополнение в пакете инструментов Selenium и является основным вектором развития проекта. Это абсолютно новый инструмент автоматизации. По сравнению с Selenium RC Webdriver использует совершенно иной способ взаимодействия с браузерами. Он напрямую вызывает команды браузера, используя родной для каждого конкретного браузера API. Как совершаются эти вызовы и какие функции они выполняют зависит от конкретного браузера.
В то же время Selenium RC внедрял код JavaScript в браузер при запуске и использовал его для управления веб-приложением. Таким образом, Webdriver использует способ взаимодействия с браузером более близкий к действиям реального пользователя.
Самое главное изменение новой версии Selenium — это Webdriver API.
Selenium 1.0 (RC) + WebDriver = Selenium 2.0
По сравнению с более старым интерфейсом он обладает рядом преимуществ:
- интерфейс Webdriver был спроектирован более простым и выразительным;
- Webdriver обладает более компактным и объектно-ориентированным API;
- Webdriver управляет браузером более эффективно, а также справляется с некоторыми ограничениями, характерными для Selenium RC, как загрузка и отправление файлов, попапы и дилоги.
Для работы с Webdriver необходимо три основных программных компонента:
-
Браузер, работу которого пользователь хочет автоматизировать. Это реальный браузер определенной версии, установленный на определенной ОС и имеющий свои настройки (по умолчанию или кастомные). На самом деле Webdriver может работать и с «ненастоящими» браузерами, но подробно о них позже.
- Для управления браузером совершенно необходим драйвер браузера. Driver на самом деле является веб-сервером, который запускает браузер и отправляет ему команды, а также закрывает его. У каждого браузера свой driver. Связано это с тем, что у каждого браузера свои отличные команды управления и реализованы они по-своему. Найти список доступных драйверов и ссылки для скачивания можно на официальном сайте проекта Selenium.
- Скрипт/тест, который содержит набор команд на определённом языке программирования для драйвера браузера. Такие скрипты используют Selenium Webdriver bindings (готовые библиотеки), которые доступны пользователям на различных языках.
Важной особенностью инструмента является используемый им JSON Wire Protocol. Все реализации Webdriver, которые взаимодействуют с браузером, или RemoteWebdriver сервер используют общий протокол, который называется JSON Wire Protocol. Он определяет RESTful веб-сервис, используя JSON по HTTP.
Если клиентская реализация Webdriver предполагает объектно-ориентированный вариант, то JSON Wire protocol представляет из себя более плоский Webdriver API в виде request/response пар команд и ответов.
Такой подход к архитектуре инструмента сделал возможным разработку драйвера каждого отдельного браузера независимой друг от друга и от разработки клиента. Более того, это дало возможность отдать эту задачу самим вендорам браузеров.
На данный момент Json Wire Protocol является рабочим черновиком стандарта, де-факто Webdriver — уже стандарт. Теперь ChromeDriver разрабатывается и поддерживается разработчиками браузера Chrome, команда Firefox также разрабатывает драйвер для своего браузера.
С другой стороны, имея универсальный протокол и клиент к нему, мы можем использовать их для любого бэкенда, имеющего цель автоматизацию функционального управления приложением. Appium (инструмент для автоматизации мобильных приложений) и Winium (инструмент для автоматизации Windows-приложений), оба использующие Webdriver JSON Wire Protocol и клиент — лишь некоторые из многих примеров. Есть и более экзотичные варианты, вроде QTWebdriver, который позволяет автоматизировать QT-приложения, используя Webdriver-клиент и API.
Кроме того, Selenium Webdriver — открытый и очень гибкий инструмент. Он легко интегрируется с различными тестовыми фреймворками и другими инструментами, позволяя создавать на его основе более узконаправленные инструменты для функционального тестирования, тестирования производительности, web crawling и других целей.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.