Разница между webdriver.браузер firefox.marionette & webdriver.геккон.водитель

теперь я изучаю селен и столкнулся с проблемой.

Я знаю, что Selenium поддерживает старую версию Firefox по умолчанию без драйвера. И для последних версий Firefox, нужно скачать драйвер и определить его с помощью System.setProperty.

по этому ссылке, для Firefox 45 и 46, код запуска драйвера может выглядеть так:

WebDriver driver = new FirefoxDriver();

мой Firefox-это версия 45.5.1. но выше код не будет работать. Итак, согласно этому ссылке, я добавил

System.setProperty("webdriver.firefox.marionette","C:geckodriver.exe");

и это сработало.

затем я понял, что я не установил geckodriver.exe на моем компьютере. Чтобы увидеть, как это происходит, я изменил код ниже.

System.setProperty("webdriver.firefox.marionette","");

он все еще работает.

Итак, вот моя первая проблема: что случилось? Я уверен, что нет geckodriver.exe существует в моей среде. Если ни одно местоположение не было указано, то почему я должен установить собственность?

кроме того, я видел код типа

System.setProperty("webdriver.gecko.driver", "/tools/marionette/wires.exe");

мой второй вопрос заключается в том, в чем разница между webdriver.gecko.driver и webdriver.firefox.marionette или wires.exeи geckodriver.exe?

3 ответов


до версии 45 (до версии 47) драйвер, используемый для автоматизации Firefox, был расширением, включенным в каждый клиент. Но это расширение было удалено, вероятно, из-за изменения политики, которая теперь требует, чтобы все расширения были подписаны Mozilla.

марионеток это новый драйвер, который поставляется / входит в Firefox. Этот драйвер имеет свой собственный протокол, который напрямую не совместим с протоколом Selenium/WebDriver.

в драйвера Гекко (ранее названные провода) - это сервер приложений, реализующий протокол Selenium/WebDriver. Он переводит команды Selenium и пересылает их в драйвер марионеток.

для клиента Java поведение по умолчанию-использовать драйвер Gecko, но его можно переопределить, чтобы использовать устаревшее расширение в качестве драйвера с webdriver.firefox.marionette свойства:

System.setProperty("webdriver.firefox.marionette", "false");

или marionette возможность через FirefoxOptions :

FirefoxOptions options = new FirefoxOptions()
  .setLegacy(true);

WebDriver driver = new FirefoxDriver(options);
// or with a remote server
WebDriver driver = new RemoteWebDriver(remoteUrl, options.toDesiredCapabilities());

или непосредственно в DesiredCapabilities:

DesiredCapabilities capa = DesiredCapabilities.firefox();
capa.setCapability("marionette", false);

WebDriver driver = new FirefoxDriver(capa);
// or with a remote server
WebDriver driver = new RemoteWebDriver(remoteUrl, capa);

и чтобы определить местоположение драйвера Gecko, либо поместите драйвер в папку, присутствующую в PATH переменная окружения или определите местоположение в свойстве webdriver.gecko.driver:

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

или запустить удаленный сервер со свойством, назначенным в командной строке:

java -Dwebdriver.gecko.driver="C:\geckodriver.exe" -jar selenium-server-standalone-3.4.0.jar

До Firefox 47.х выпускает устаревший драйвер был реализован как расширение Firefox. Это расширение было установлено в профиле, используемом драйвером всякий раз, когда WebDriver запускал Firefox.

следовательно мы использовали:

WebDriver driver =  new FirefoxDriver();
driver.navigate().to("https://gmail.com");

Firefox 48 отключил расширение браузера и представил WebDriver. С тех пор GeckoDriver решение на основе марионеток, разрабатываемое и поддерживаемое Mozilla, предназначено для автоматизации Mozilla Firefox Браузер.

марионеток

по данным официальная документация Mozilla on developer.mozilla.org. марионеток - это Драйвер Автоматизации. Он использует удаленный протокол Firefox, который может управлять пользовательским интерфейсом. Марионетка принимает запросы и выполняет их в Гекконе. У него также есть клиент. Клиент отправляет инструкции на сервер, и сервер выполняет инструкции в пределах браузер.

поэтому мы начали использовать марионетку:

System.setProperty("webdriver.firefox.marionette","C:\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");

провода

есть несколько ссылок для переименования исполняемого файла в "провода".exe " и добавьте его в свой путь. Поэтому было использовано следующее:

System.setProperty("webdriver.firefox.marionette","C:\wires.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");

GeckoDriver

GeckoDriver-это исполняемый файл, который нам нужно загрузить в нашей системе и указать его местоположение в наших скриптах/программах при выполнении наших тестовых наборов. GeckoDriver в свою очередь начнет браузер Mozilla Firefox.

эти выдержки были взяты из Джим Эванэпический ответ на вопрос каковы преимущества использования Marionette FirefoxDriver вместо старого Selenium FirefoxDriver для тестера Селена? что дает нам подробное представление о том, как GeckoDriver и марионеток вошел в практику.

отсюда мы начали использовать гекодривер.exe:

System.setProperty("webdriver.gecko.driver", "C:\geckodriver.exe");
WebDriver driver =  new FirefoxDriver();
driver.navigate().to("https://gmail.com");

теперь в текущем сценарии у вас все еще есть возможность выполнить автоматизацию через устаревший Firefox 47.X браузер и недавний Firefox 53.х версиях браузера, а также.

Usecase 1:

в случае использования устаревшего Firefox 47.X браузеры вы должны явно установить "марионетку" в false через класс DesiredCapabilities следующим образом:

DesiredCapabilities dc = DesiredCapabilities.firefox();
dc.setCapability("firefox_binary", "C:\Program Files\Mozilla Firefox47\firefox.exe");
dc.setCapability("marionette", false);
WebDriver driver =  new FirefoxDriver(dc);
driver.navigate().to("https://gmail.com");

Usecase 2:

в случае использования устаревшего Firefox 47.X браузеры, если вы пропустите установку "марионетка" в false или если вы установите "марионетка" в true, вы будете наблюдать IllegalStateException

Usecase 3:

в случае использования Firefox 53.X браузеры вы можете пропустить настройку "марионетка" в true следующим образом, который покажет журналы марионетки информации, например Marionette INFO Listening on port 11105 :

System.setProperty("webdriver.gecko.driver", "C:\Utility\BrowserDrivers\geckodriver.exe");
WebDriver driver =  new FirefoxDriver();
driver.navigate().to("https://gmail.com");

Usecase 4:

в случае использования Firefox 53.X браузеры вы можете явно установить "marionette" в true через Класс DesiredCapabilities, который покажет журналы предупреждений марионетки, например WARN TLS certificate errors will be ignored for this session

System.setProperty("webdriver.gecko.driver", "C:\Utility\BrowserDrivers\geckodriver.exe");
DesiredCapabilities dc = DesiredCapabilities.firefox();
dc.setCapability("marionette", true);
WebDriver driver =  new FirefoxDriver(dc);
driver.navigate().to("https://gmail.com");

Usecase 5:

в случае использования Firefox 53.X браузеры если вы принудительно установите" марионетку " в false через класс DesiredCapabilities, вы увидите UnreachableBrowserException.


Marionette-это новый драйвер, который поставляется / входит в последние версии Firefox.

однако geckodriver является прокси-сервером для использования W3C WebDriver-совместимых клиентов для взаимодействия с браузерами на основе Gecko. Geckodriver предоставляет HTTP API, описанный протоколом WebDriver для связи с браузерами Gecko, такими как Firefox версии выше 47.

System.setProperty("webdriver.gecko.driver","path of/geckodriver.exe");
WebDriver driver = new FirefoxDriver();

Если вы все еще получаете проблемы (из-за несовместимости версий FF), вы можете использовать следующее возможности:

DesiredCapabilities capabilities=DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(capabilities);