Почему Firefox требует GeckoDriver?

Просто простой вопрос, который у меня был сегодня:

Я создал новый проект селена с этим кодом:

FirefoxDriver driver = new FirefoxDriver();
//ChromeDriver driver = new ChromeDriver();
//InternetExplorerDriver driver = new InternetExplorerDriver();

С Chrome и IE работает из коробки, но с Firefox выдает:

Файл geckodriver.exe не существует ни в текущем каталоге, ни в каталоге переменной среды PATH. Драйвер можно загрузить по адресу https://github.com/mozilla/geckodriver/releases.

Почему только для Firefox мы должны загрузить / настроить этот драйвер?

4 ответа

Решение

Позвольте мне попытаться ответить на ваши вопросы один за другим:

  1. Почему Firefox требует GeckoDriver? - Для Mozila Firefox до версии 47.x это был устаревший браузер, и нам не требовался драйвер геккона. Mozila Firefox начиная с версии 47.x поставляется с Marionette, драйвером автоматизации для движка Mozilla Gecko. Он может удаленно управлять пользовательским интерфейсом или внутренним JavaScript на платформе Gecko, такой как Firefox.

  2. С Chrome и IE работает из коробки - в идеале ни Chrome, ни IE не должны были работать. Но поскольку вы сознательно / неосознанно добавили расположение двоичных файлов в Переменные среды при установке / настройке Google Chrome & MS Internet Explorer или других зависимых программ, эти двоичные файлы легко обнаруживаются и используются автоматически.

  3. Почему только для Firefox мы должны загрузить / настроить этот драйвер? - Для работы с Selenium 3.4.0 не только Firefox, но и Google Chrome & MS Internet Explorer необходимо загрузить отсюда драйвер gecko v0.16.0 (или выше), драйвер Chrome или IEDriverServer и сохранить его на своем компьютере. Обновите Mozila Firefox, Google Chrome или MS Internet Explorer до последней стабильной версии. Используйте абсолютный путь к geckodriver/chromedriver/iedriver в вашем коде, пока System.setProperty следующее:

    System.setProperty("webdriver.gecko.driver",  "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
    

Дайте мне знать, если это ответит на ваш вопрос.

FireFox основан на Mozilla, а селену нужен драйвер для взаимодействия с драйверами на основе геккона - см. Файл README на geckodriver

Ваше утверждение действительно неверно, хромедрайвер также должен быть указан в пути. Я думаю, что вы уже устанавливали хромедрайвер, так что он работает из коробки.

Путь для geckodriver / chromedriver также может быть установлен внутри вашего кода

Причина, по которой нам это нужно, AFAIK, поскольку firefox > 47, плагин firefox webdriver не поставляется вместе с браузером, и, следовательно, он должен выполняться из geckodriver и selenium 3+

Marionette в качестве драйвера автоматизации в Firefox поддерживает собственный протокол сокетов, который не совместим со спецификацией WebDriver. В качестве такого geckodriver необходимо использовать, который действует как прокси между Selenium и Firefox. Реализованный как небольшой HTTP-сервер, он принимает команды, соответствующие спецификации WebDriver, и перенаправляет их в Marionette. То же самое относится к ответам от Marionette, которые превращаются обратно в HTTP-ответ, совместимый с WebDriver.

С предстоящей интеграцией Quantum (компоненты Rust) в Firefox, geckodriver не будет необходим в будущем, потому что он будет интегрирован по умолчанию.

Другие вопросы по тегам