Требуется ли geckodriver для Selenium 3.7 и Firefox ESR 52.4.1?

Насколько я понимаю, при использовании Selenium.WebDriver v3.7 от NuGet мне требуется текущая версия geckodriver для взаимодействия с Firefox ESR v52.4.1. Однако мне удалось запустить и успешно пройти тесты без вообще никакого участия geckodriver.

Я полагаю, это потому, что я включил устаревшую опцию реализации при создании экземпляра RemoteWebDriver, как показано ниже.

FirefoxOptions options = new FirefoxOptions
{
    UseLegacyImplementation = true,   // means that geckodriver is not required
    BrowserExecutableLocation = ...,  // ensures authorised Firefox version used
    Profile = ...                     // an instance of FirefoxProfile
};

RemoteWebDriver remoteWebDriver = new FirefoxDriver(options);

Ряд вопросов, чтобы помочь мне понять детали:

  1. Означает ли это, что Selenium.WebDriver общается напрямую с браузером Firefox, используя протокол Marionette?
  2. Если да, то основывается ли эта установка на библиотеках, распространяемых в настоящее время с пакетом NuGet, которые могут быть (будут ли?) удалены в следующем выпуске?
  3. Если да, то есть идеи, какой релиз или когда он, скорее всего, будет?

Спасибо!


person Mark    schedule 08.11.2017    source источник


Ответы (1)


Означает ли это, что Selenium.WebDriver взаимодействует напрямую с браузером Firefox, используя протокол Marionette?

Насколько я понимаю, когда вы устанавливаете System.setProperty("webdriver.firefox.marionette", "false"); в false или делаете FirefoxOptions options = new FirefoxOptions() .setLegacy(true);, это означает, что он использует устаревшее расширение (не марионетку и геккона), как описано в свойствах Firefox здесь

Marionette нельзя использовать без использования gecko (вернее, если вы хотите взаимодействовать с браузерами на основе gecko, вы должны использовать marionette ). В Marionette есть компонент gecko, который является сервером марионеток, как указано здесь< /а>

geckodriver, как написано на github, предоставляет API для связи с Браузеры Gecko

Эта программа предоставляет HTTP API, описанный протоколом WebDriver, для связи с браузерами Gecko.

для selenium 3.0 и более поздних версий марионетка включена по умолчанию, как указано здесь

Для получения дополнительной информации см. этот вопрос.

Если вам интересно узнать больше о взаимодействии клиент-сервер-геккон марионетки, посмотрите здесь

ИЗМЕНИТЬ:

исходный код geckodriver ниже указывает на geckodriver в разных местах в readme.md

  1. geckodriver — это прокси для использования клиентов, совместимых с W3C WebDriver, для взаимодействия с браузерами на базе Gecko.

  2. Привязки клиента Selenium получат двоичный исполняемый файл geckodriver из вашей [переменной окружения PATH системы][PATH].

3. Поскольку geckodriver — это отдельный HTTP-сервер, который представляет собой полную удаленную реализацию [WebDriver], можно избежать использования удаленного сервера Selenium.

  1. geckodriver переводит [команды], [ответы] и [ошибки] WebDriver в [протокол Marionette] и действует как прокси-сервер между [WebDriver] и [Marionette].

  2. По умолчанию geckodriver пытается найти и использовать системную установку Firefox.

Итак, чтобы ответить на ваши вопросы, вот как это все работает

Языковые привязки Selenium reaches to --> geckodriver.exe finds --> системная установка Firefox (хотя это можно изменить) reaches to inbuilt --> клиент-марионетка reaches to --> сервер-марионетка reaches to --> движок gecko браузера which inturn calls out --> element.js,interaction.js,action.js,evaluate.js в движке gecko в зависимости от того, что запрашивается привязками или клиентом.

person user1207289    schedule 08.11.2017
comment
Ссылка, которой вы поделились в конце, — настоящая жемчужина! Понимание именования помогло мне немного лучше понять логическую архитектуру. Все еще не уверен, управляет ли geckodriver.exe сервером Marionette (внутри Gecko) или Marionette вызывает geckodriver.exe, а последний управляет Gecko. Кроме того, если бы вы знали ответы и на мои вторые два вопроса, это было бы здорово! - person Mark; 09.11.2017
comment
@Mark Я отредактировал выше, чтобы ответить на ваши вопросы. Надеюсь, поможет - person user1207289; 09.11.2017