Ferrum — мощный Ruby-драйвер для Chrome

26 ноября 2020, 17:18
0

Ferrum — мощный Ruby-драйвер для Chrome

Команда Evrone всегда за опенсорс-инициативы: мы публикуем свои инструменты, поддерживаем начинания сотрудников и помогаем перспективным проектам вроде Ferrum найти свой стиль и айдентику.
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, напишите нам, мы поделимся своим опытом, создадим фирменный стиль, сайт и логотип, чтобы он получил должное внимание.

Ответить?
Введите капчу

✉️✨
Письма Коссы — лаконичная рассылка для тех, кто ценит своё время: cossa.pulse.is