Selenium за работа с Firefox започна да изисква geckodriver • Ако искате, ще ви кажа

Малко история

Ако анализирате историята на изданията на изданията на Selenium, ще забележите, че почти винаги появата на нова версия е свързана с пускането на нова версия на браузъра Firefox.

Причината е, че драйверът за Firefox е внедрен като добавка към браузъра. Selenium, когато браузърът беше стартиран, автоматично „залепи“ тази добавка в него и чрез него се осъществи цялото по-нататъшно взаимодействие между Selenium и браузъра.

Пускането на нова версия на Firefox често причинява спиране на работата на добавката. Или някой интерфейс на браузъра ще се промени, след това ще се появи нова политика за сигурност, след това грешките в браузъра пречат и трябва да измислите решение за тях. Като цяло, веднага щом Firefox се актуализира, трябва да направите нова версия на добавката.

За по-лесно внедряване преди много време беше решено тази добавка да се включи директно в клиентските библиотеки. Разработчик на Java свързва зависимост към пакет, който е в хранилището на Maven, и го използва - и драйверът вече седи там вътре. Или C# разработчик инсталира пакет от хранилище на NuGet. Или разработчик на Python от хранилището на pypi. Една опаковка, нищо повече.

Уви, тази простотия има обратен ефект другаде. Излиза нова версия на Firefox, последвана от нова версия на Selenium - и след това потребителите трябва да актуализират всички клиентски библиотеки за всички използвани езици за програмиране и всички Selenium Grid възли. неприятно...

Драйверът за браузъра Internet Explorer веднъж падна в същия капан, само че там, вместо добавка, имаше dll, който също беше включен в дистрибуцията на Selenium и беше невъзможно да се актуализира отделно. И също се чупи доста често.

Изходът бешесъздаване на отделен изпълним файл, който действа като посредник при взаимодействие с браузъра и който може да се инсталира и актуализира отделно и независимо от клиентските библиотеки.

Пуска се нова версия на браузъра, заедно с нея се пуска нова версия на междинния драйвер, който трябва да се актуализира - но Selenium Grid възлите и клиентските библиотеки не трябва да се актуализират. Обемът на работата по поддръжката на инфраструктурата е драстично намален.

Друг плюс на подобна схема е, че разработването на такъв посредник може да бъде „избутано“ до производителя на браузъра. Нека използва всякакви недокументирани функции там, дори и да не отваря кода, ако не иска - стига да работи в съответствие със стандарта.

Първоначално такава схема беше успешно тествана в браузъра Google Chrome. След това в браузъра Microsoft Edge.

И накрая стигнахме до браузъра Firefox.

Сега има и спомагателен изпълним файл за него.

Нарича се geckodriver (браузърът Firefox е изграден върху двигателя Gecko, откъдето идва и името).

И старият драйвер в новите версии на браузъра вече не работи. Така стоят нещата…

Кратки изводи

За да стартирате тестове във Firefox версия 48 или по-нова:

  • изтеглете geckodriver за вашата платформа и го поставете в PATH,
  • използвайте версията на Selenium 3.0, която все още е в бета статус, тоест може да не е много стабилна, но който не рискува, че не пие шампанско, не може да тества в новите версии на Firefox.

Какво стана с Марионетката?

Тези, които следят новините за проекта Selenium, вероятно са чували, че Mozilla работи от 2012 г. върху създаването на нова технология Marionette за дистанционно управление на браузъра, която трябва да замени FirefoxDriver.

Нищо не й се е случило, точно тази технология е в основата на geckodriver.

Marionette е името на протокола и сървъра, вграден в браузъра за отдалечено отстраняване на грешки. Това е вътрешен протокол, който не е съвместим със стандарта W3C WebDriver, въпреки че съдържа подобен набор от операции (което не е изненадващо, тъй като и двата протокола са предназначени да решават една и съща задача - контрол на браузъра).

Geckodriver е адаптер, конвертор от протокола W3C WebDriver към протокола Marionette.

Наборът от функции на Marionette е по-широк от текущия набор от функции на WebDriver. Някои от тях вероятно ще се появят в следващата версия на WebDriver 4, като поддръжката на Shadow DOM. Това обаче е съвсем различна история.

започна

Автор: Алексей Баранцев