python-альтернатива selenium grid'у через ansible и webdriver

Всем привет!

Хотел бы рассказать про проект-альтернативу selenium grid’у на python’e. Под капотом используется ansible для оркестрации нод и selenium webdriver для управления браузером (не путать с проектом GitHub - SeleniumHQ/ansible-selenium: Module for managing a grid / nodes using Ansible).

Проект очень молодой и пока развивается одним человеком, но возможно адептам python’a будет интересно подключиться :slight_smile:

Суть проекта:

  • ansible используется для настройки нод (видео запись, виртуальный буфер, установка пакетов и т.п.), в том числе запускает и останавливает webdriver, к которому можно подключаться удаленно. (Технически это должно работать также как и на localhost’e, если только разработчики webdriver’a специально не ограничили удаленные подключения. Н-р в chromedriver нужно выставлять специальный флаг --whitelisted-ips="".)
  • webdriver используется напрямую через удаленное подключение, для этого нужно переопределить классы браузеров из текущего пакета selenium’a.

Исходники GitHub - schipiga/dilium: Distrubited selenium
Документация http://dilium.readthedocs.io/

Зачем это нужно

  • Это весело и интересно. Проект развивается в свободное время. Есть повод углубиться в код ansible, tornado, selenium и порешать задачи удаленного менеджмента и оркестрации машин.
  • Selenium grid не позволяет менеджить ноду. Он нужен, чтобы предоставлять доступ к webdriver API. И дополнительные возможности по записи видео, запуску виртуального буфера и прочее, требуют дополнительного прокси, который должен быть реализован на стороне ноды. Ansible в свою очередь вообще не требует дополнительных настроек ноды, лишь доступ по ssh (и установленный python, судя по тому как работают ansible modules). При этом ansible специально заточен под оркестрацию нод.
  • Selenium grid написан на Java. И чтобы его поддерживать и расширять, нужно изучать Java. При этом кажется, что selenium grid на стороне клиента в целом и не нужен, т.к. webdriver слушает запросы по сети и к нему можно обращаться удаленно.

Какие актуальные задачи в проекте

  • Подключение браузеров на различных операционках. Сейчас пока проверена работа на одной ноде ubuntu-14.04 с google-chrome.
  • Разобраться с устройством ansible module, чтобы гарантировать ошибку в случае фейла запуска shell-команды как daemon’a на ноде.
  • Расширение API сервера по node-менеджементу (обновление конфига с нодами, улучшение кода распредения хостов, установка браузеров и вебдрайверов на ноды и т.п.)