David Burns: Marionette скоро придёт на смену драйверу Firefox в Selenium

Выпуск очередной версии Selenium 2.26 задерживается, потому что в ней сделана попытка серьёзно улучшить протоколирование (logging) действий Selenium во всех местах – в клиенте, сервере, браузере. Но переработка системы протоколирования привела к тому, что сервер непрерывной интеграции тоже пришлось перестраивать, а без “зелёного сигнала” очередной релиз не выпускается. Поэтому пока небольшой рассказ не о следующей версии, а о более отдалённом будущем – о том, как дальше будет развиваться драйвер для браузера Firefox.

Автор: David Burns (Mozilla), главный специалист по реализации клиента Selenium на языке python

Оригинал: Marionette - The Future of FirefoxDriver in Selenium

Ни для кого не секрет, что Selenium WebDriver находится на пути к утверждению его в качестве стандарта W3C. Компания Opera первая сделала шаг на пути интеграции этого стандарта в свой браузер, выпустив OperaDriver. Следом за этим команда разработчиков Google Chrome сделала ChromeDriver. Этот драйвер представляет собой исполняемый файл, который загружается отдельно от браузера и клиенских библиотек Selenium. И кто же следующий? Mozilla.

Почему нам нужен новый FirefoxDriver для Selenium?

Mozilla сейчас работает над проектом, который носит название Marionette, это новая версия FirefoxDriver, которая в будущем заменит существующую. Первоначально Marionette был задуман для автоматизации Firefox OS, которая по сути представляет собой ядро, запускающее Gecko, то есть тот же самый движок, на котором реализован Firefox. Я признаю, что это чересчур упрощённое объяснение, но в контексте этой заметки подробности неважны. Когда разработка Marionette начиналась, Firefox OS не позволяла устанавливать расширения Firefox, то есть текущая реализация FirefoxDriver, основанная на установке расширения и модификации настроек во время запуска браузера, не могла быть использована.

Примерно в то же время я работал среди прочего в проекте Mozilla Open Web Apps. Эта штука позволяет инсталлировать веб-приложения в операционную систему и использовать их точно так же, как обычные приложения. Увы, там тоже нет возможности подключать расширения при старте установленного в систему веб-приложения. Поэтому ни Firefox OS, ни Open Web Apps не могли использовать имеющуюся реализацию FirefoxDriver.

И тогда за дело взялась команда Automation and Tools Team, которая внутри Mozilla известна как A-Team. Двое членов этой команды - Malini Das и Jonathan Griffin, начали придумывать способ, как заставить работать фреймворк автоматизации и систему сборки. За основу при создании Marionette они взяли Selenium JSON Wire Protocol, что вполне согласовывалось с планами по утверждению Selenium в качестве стандарта W3C. На текущий момент Malini и Jonathan довели этот проект до вполне стабильного состояния, удовлетворяющего потребностям команды, разрабатывающей Firefox OS. Мне удалось заставить его работать в десктопной версии, теперь Marionette делает то, что мне нужно для Open Web Apps, и в ближайшие полгода мы собираемся довести этот проект до логического завершения.

Как это работает?

Marionette использует в качестве транспорта механизм JavaScript Remote Debugger, который вскоре появится в официальных релизах Firefox. Для этого в браузере открывается сокет, к которому мы можем присоединиться и отправлять команды, которые браузер должен исполнять. Означает ли это, что мы не в точности следуем протоколу JSON Wire Protocol? Да, мы реализовали собственную версию JSON Wire Protocol, главным образом для того, чтобы удовлетворить требованиям того транспортного механизма, который был в нашем распоряжении. Это простой сокет, через него можно установить telnet-соединение и отправлять команды, и не нужен никакой веб-сервер, работающий внутри браузера. Такое решение получается очень лёгким, сначала мы сделали это для мобильных устройств, а потом решили использовать и для десктопных тоже.

Чем можно управлять?

Marionette позволяет работать не только с содержимым страниц, он предоставляет также доступ к функциям защищенного режима chrome. Marionette должен стать центральным звеном во всех фреймворках автоматизации, которые создаются внутри Mozilla. А их довольно много, потому что в каждом проекте свои уникальные требования. И мы будем стремиться к тому, чтобы возможности Marionette полностью, или почти полностью, покрывали потребности этих проектов в автоматизации.

Бонусы

Поскольку Marionette разрабатывается внутри Mozilla, поскольку в его разработке участвуют люди, хорошо знакомые с устройством браузера, поскольку он станет частью производственного процесса Mozilla - все поломки Marionette будут обнаруживаться и устраняться в самые кратчайшие сроки. А для этого FirefoxDriver должен стать неотъемлемой частью производственного процесса Mozilla!

И где всё это можно попробовать? Сейчас для этого нужно использовать отладочные сборки Firefox. Почему только отладочные, неужели Marionette настолько нестабилен? Потому что сначала мы должны пройти внутренний аудит безопасности - открытый сокет и возможность удаленного управления браузером несут в себе определённую опасность: злоумышленник может нарушить работу вашего браузера или получить несанкционированный доступ к данным. Конечно, по умолчанию эти возможности будут отключены, но потенциальная опасность всё таки есть.