Ferrum — мощный Ruby-драйвер для Chrome
Дмитрий Волотилин, один из разработчиков Evrone, разработал Ferrum, Ruby-драйвер для Chrome, с целью более эффективного проведения интеграционного тестирования. Наша команда помогла Дмитрию с управлением проектом, разработала запоминающуюся айдентику и создала веб-сайт.
Новый подход к тестированию
Когда команда доходит до этапа интеграционного тестирования сайта, то обычно выбор встает между Poltergeist и Selenium. Poltergeist — функциональный драйвер, но сообщество постепенно переходит на другие инструменты, потому что этот уже устарел. У Selenium свои недостатки: для эффективной работы необходимо устанавливать расширения, драйвер не даёт полного контроля над браузером и уступает в производительности.
Ferrum — новое решение. Это опенсорс-драйвер для управления Chrome через WebSocket с использованием протокола Chrome DevTools. Скорость работы драйвера превышает производительность Selenium, Ferrum даёт высокоуровневый API к браузеру и не требует подключения дополнительного ПО.
Характеристики и сценарии использования
Ferrum прост в использовании. По умолчанию драйвер идёт в headless-режиме, однако это можно изменить в настройках. Помимо headless есть несколько атрибутов, чтобы кастомизировать работу драйвера.
Всё, что необходимо, чтобы приступить к тестированию, — драйвер, Chrome или Chromium. Ferrum подключается к браузеру через протокол Chrome DevTools Protocol (CDP) и не имеет зависимости от Selenium, WebDriver или ChromeDriver. Сам по себе Chrome позволяет выполнять множество операций, которые практически не поддерживаются WebDriver.
Вот пример того, как можно сделать снимок главной страницы Google:
browser = Ferrum::Browser.new
browser.goto("https://google.com")
browser.screenshot(path: "google.png")
browser.quit
Пусть простота не вводит вас в заблуждение: Ferrum закрывает большое количество задач помимо базовой навигации, поиска данных и снятия скриншотов. С помощью драйвера можно:
перехватывать данные по сети;
подменять реальные ответы «заглушками»;
управлять аутентификацией пользователей;
изменять файлы cookie, заголовки и сценарии тестирования;
эмулировать нажатия на клавиатуре или мыши.
Ferrum создавался как многопоточный инструмент, что позволяет параллельно работать с большим количеством открытых в одном процессоре вкладок. Каждое соединение поддерживается в отдельном WebSocket. Если вкладки должны обмениваться данными — например, историей, вы можете объединить их в одном контексте.
Дополнительные инструменты
Ferrum развивается дальше, и на его основе уже работают другие инструменты:
Драйвер Cuprite для софта Capybara. С помощью Ferrum вы можете управлять браузером без дополнительных API и ПО.
Поисковый фреймворк Vessel для автоматического сканирования и получения данных с веб-страниц. Фреймворк напоминает Scrapy, однако для веб-скрейпинга Vessel использует реальный браузер.
Если хотите интегрировать Ferrum в свой проект, переходите на GitHub страницу, а чтобы узнать все нюансы работы с драйвером, посмотрите выступление Дмитрия, создателя Ferrum, на конференции ParisRB.
Не все компании разделяют наш подход к опенсорс-проектам. Главный аргумент — зачем публиковать в открытом доступе инструменты, над которыми трудилась команда и которые используются в коммерческой разработке.
Мы же видим в этом множество бонусов. Контрибьюторы могут усовершенствовать ваш проект, расширить функционал. Компания же получает дополнительное внимание от разработчиков и потенциальных клиентов. Если вы решите опубликовать свой проект в open-source, напишите нам, мы поделимся своим опытом, создадим фирменный стиль, сайт и логотип, чтобы он получил должное внимание.