Использование Watir для автоматизации веб-браузеров с помощью Ruby
Уже много лет существует возможность автоматизировать выполнение простых задач на компьютере, когда эти задачи выполняются с помощью командной строки. Это известно как парсинг. Однако более сложной задачей является управление браузером, поскольку графический интерфейс предоставляет гораздо больше возможностей для изменения поведения элементов.
Автоматизация браузера описывает процесс программного выполнения определенных действий в браузере (или передачи этих действий роботам), которые в противном случае могли бы быть достаточно утомительными или повторяющимися для выполнения человеком вручную.
Одним из инструментов, созданных для решения этой задачи и используемых Ruby-разработчиками, является Watir.
Что такое автоматизация браузера?
Автоматизация браузера полезна для различных сценариев использования, таких как ввод данных, извлечение данных или загрузка файлов на удаленные серверы. Она позволяет выполнять такие действия, как ввод текста и нажатие кнопок на веб-страницах, с большей скоростью, точностью и в больших масштабах, чем это возможно при ручном управлении.
Представьте себе государственный сайт, содержащий социально-демографические данные, но не имеющий API. Таких сайтов существует множество. С помощью автоматизации браузера можно спарсить данные с такого сайта (разумеется, на законных основаниях) и очистить их для собственного использования.
Автоматизация браузера также может быть использована для автоматического заполнения форм и документов, что может оказаться весьма полезным при необходимости выгрузки информации для большого количества клиентов.
Автоматизация может применяться как для тестирования локальных приложений, так и для проведения полномасштабных тестов на нескольких платформах и браузерах. Например, вы можете проверить, насколько хорошо работает созданный вами сайт в различных браузерах (например, Chrome, IE, Firefox, Safari) или на различных операционных системах (например, Linux, Mac, Windows). Ручной подход будет медленным и чреватым ошибками, а автоматизация браузера облегчит процесс обнаружения и устранения неработающих ссылок, выявления ошибок, выявления несовместимости браузеров, измерения времени отклика и т.д.

Реализация Watir
Watir расшифровывается как Web Application Testing In Ruby. Это набор библиотек Ruby с открытым исходным кодом, используемых для автоматизации работы веб-браузеров. Watir представляет собой обертку вокруг другого популярного фреймворка Selenium. Watir содержит некоторые усовершенствования и открывает разработчикам возможность использовать язык Ruby для решения задач автоматизации.
В этом учебном пособии фреймворк Watir будет использован для изучения популярного сайта с открытым исходным кодом Wikipedia. Вы создадите экземпляр браузера, посетите целевую страницу Wikipedia и перейдете на англоязычную версию сайта. На целевой странице вы найдете и заполните строку поиска, отправите запрос и перейдете на страницу с результатом. Попутно будут получены некоторые данные и отправлен вывод на терминал. Наконец, вы сохраните снимок экрана с результатом поиска и закроете браузер.
Установка Gems
В данном руководстве предполагается, что на вашем компьютере уже установлен Ruby, вы знакомы с командной строкой и IRB.
В первую очередь необходимо открыть консоль и проверить, установлены ли в вашей системе гемы watir и webdrivers. Чтобы просмотреть все имеющиеся на компьютере гемы, выполните следующую команду:
gem list
Изучите вывод на консоли. Если watir или webdrivers (или оба) недоступны, установите их:
gem install watir
gem install webdrivers
Далее запустите IRB на Linux или Mac, или запустите интерактивную сессию Ruby на Windows. Вы можете набрать приведенный ниже код построчно или запустить его как сценарий. Ввод кода в сеансе IRB позволяет наблюдать за изменениями в реальном времени.
Настройка Watir
Для начала работы подключите гемы watir и webdrivers:
#watir_testfile.rb
require 'watir'
require 'webdrivers'
Watir предоставляет необходимые библиотеки автоматизации, а webdrivers позволяет watir легко интегрироваться с любым поддерживаемым браузером. Без гема webdrivers пришлось бы загружать различные пакеты для каждого браузера, который вы хотите использовать.
Запуск браузера
Чтобы запустить браузер, выполните следующие команды:
browser = Watir::Browser.new
browser.goto ("wikipedia.org")
Здесь команда Watir Browser.new инициализирует экземпляр браузера и запускает так называемый "браузер-призрак", а команда goto направляет новый экземпляр браузера на указанный вами URL.
По умолчанию команда new открывает браузер Chrome, но можно использовать и другие браузеры, если они указаны в качестве опций. Совместимыми браузерами являются Firefox, Internet Explorer, Edge и Safari. Например, данная команда открывает Firefox: Watir::Browser.new :firefox.
В экземпляре Chrome отображается полезное сообщение "Chrome is being controlled by automated test software".
Поиск и взаимодействие с элементами
Метод links может быть использован для получения всех ссылок, присутствующих на странице (в отличие от метода link, получающего только первую ссылку). Операция сбора данных выполняется путем цепочки ссылок к методу Ruby count и вывода результата:
puts browser.links.count
english_link = browser.div(class: "lang1")
english_link.present?
english_link.click
puts browser.url
Целевая страница Википедии содержит ссылки на различные языковые версии сайта. Для поиска класса и атрибутов ссылки на англоязычную версию необходимо использовать целевую ссылку (для поиска классов и атрибутов можно воспользоваться средствами разработчика браузера). Щелчок по целевой ссылке приводит к переходу на главную страницу Википедии. Здесь и в последующих случаях ориентацию можно поддерживать с помощью обращений браузера к методу url программы watir, который возвращает URL текущей страницы.
Извлечение данных из веб-страницы
Найти элементы на странице можно с помощью метода element для обращения к CSS-селекторам. В данном случае вас интересует идентификатор с именем "articlecount".
puts browser.element(id:'articlecount').text.strip
Когда интересующий элемент найден, можно выполнить операцию захвата данных с помощью метода text, чтобы получить текст, связанный с помеченным элементом. В завершение, вызвав функцию strip, можно удалить из полученного результата все завершающие новые строки.

Нахождение текстового поля
Нахождение полей формы осуществляется с помощью метода text-field, который работает аналогично методу element, рассмотренному выше. Text_field позволяет нацеливаться на поля формы с помощью селекторов. В данном случае вас интересует класс с именем "vector-search-box-input".
search_box = browser.text_field(class: "vector-search-box-input")
Эта информация фиксируется и хранится в переменной search-box, которую можно использовать в последующих операциях.
Задание текста и ожидание
Теперь, когда у вас есть возможность принимать данные, пришло время их передавать. Watir предоставляет не только API для передачи желаемых данных, но и обеспечивает выполнение условий, прежде чем они будут обработаны.
search_box


