Вопрос-ответ

Selenium using Java - The path to the driver executable must be set by the webdriver.gecko.driver system property

Selenium с использованием Java - путь к исполняемому файлу драйвера должен быть задан системным свойством webdriver.gecko.driver

Я пытаюсь запустить Mozilla, но по-прежнему получаю эту ошибку:


Исключение в потоке "main" java.lang.Исключение IllegalStateException: путь к исполняемому файлу драйвера должен быть задан системным свойством webdriver.gecko.driver; для получения дополнительной информации см. https://github.com/mozilla/geckodriver . Последнюю версию можно загрузить с https://github.com/mozilla/geckodriver/releases


Я использую Selenium 3.0.01 бета-версию и Mozilla 45. Я тоже пробовал с Mozilla 47. но все то же самое.

Переведено автоматически
Ответ 1

Selenium Клиентские привязки попытаются найти geckodriver исполняемый файл из системы PATH. Вам нужно будет добавить каталог, содержащий исполняемый файл, в системный путь.


  • В системах Unix вы можете сделать следующее, чтобы добавить его в путь поиска вашей системы, если вы используете оболочку, совместимую с bash:


    export PATH=$PATH:/path/to/geckodriver

  • В Windows вам необходимо обновить системную переменную Path, чтобы добавить полный путь к каталогу исполняемого файла. Принцип тот же, что и в Unix.


Вся приведенная ниже конфигурация для запуска последней версии firefox с использованием привязки к любому языку программирования применима для Selenium2 явного включения Marionette. С Selenium 3.0 и более поздних версий вам не нужно ничего делать, чтобы использовать Marionette, поскольку он включен по умолчанию.

Чтобы использовать Marionette в ваших тестах, вам нужно будет обновить желаемые возможности для его использования.

Java :

Поскольку в exception четко указано, что вам нужно загрузить последнюю версию geckodriver.exe из здесь и указать загруженный geckodriver.exe путь, где он существует на вашем компьютере, в качестве системного свойства с переменной webdriver.gecko.driver перед запуском драйвера marionette и firefox, как показано ниже :-

//if you didn't update the Path system variable to add the full directory path to the executable as above mentioned then doing this directly through code
System.setProperty("webdriver.gecko.driver", "path/to/geckodriver.exe");

//Now you can Initialize marionette driver to launch firefox
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new MarionetteDriver(capabilities);

И для Selenium3 использования в качестве :-

WebDriver driver = new FirefoxDriver();

Если у вас все еще возникают проблемы, перейдите по этой ссылке, которая поможет вам решить вашу проблему

.NET :

var driver = new FirefoxDriver(new FirefoxOptions());

Python :

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps = DesiredCapabilities.FIREFOX

# Tell the Python bindings to use Marionette.
# This will not be necessary in the future,
# when Selenium will auto-detect what remote end
# it is talking to.
caps["marionette"] = True

# Path to Firefox DevEdition or Nightly.
# Firefox 47 (stable) is currently not supported,
# and may give you a suboptimal experience.
#
# On Mac OS you must point to the binary executable
# inside the application package, such as
# /Applications/FirefoxNightly.app/Contents/MacOS/firefox-bin
caps["binary"] = "/usr/bin/firefox"

driver = webdriver.Firefox(capabilities=caps)

Ruby :

# Selenium 3 uses Marionette by default when firefox is specified
# Set Marionette in Selenium 2 by directly passing marionette: true
# You might need to specify an alternate path for the desired version of Firefox

Selenium::WebDriver::Firefox::Binary.path = "/path/to/firefox"
driver = Selenium::WebDriver.for :firefox, marionette: true

JavaScript (Node.js) :

const webdriver = require('selenium-webdriver');
const Capabilities = require('selenium-webdriver/lib/capabilities').Capabilities;

var capabilities = Capabilities.firefox();

// Tell the Node.js bindings to use Marionette.
// This will not be necessary in the future,
// when Selenium will auto-detect what remote end
// it is talking to.
capabilities.set('marionette', true);

var driver = new webdriver.Builder().withCapabilities(capabilities).build();

Использование RemoteWebDriver

Если вы хотите использовать RemoteWebDriver на любом языке, это позволит вам использовать Marionette в Selenium Grid.

Python:

caps = DesiredCapabilities.FIREFOX

# Tell the Python bindings to use Marionette.
# This will not be necessary in the future,
# when Selenium will auto-detect what remote end
# it is talking to.
caps["marionette"] = True

driver = webdriver.Firefox(capabilities=caps)

Ruby :

# Selenium 3 uses Marionette by default when firefox is specified
# Set Marionette in Selenium 2 by using the Capabilities class
# You might need to specify an alternate path for the desired version of Firefox

caps = Selenium::WebDriver::Remote::Capabilities.firefox marionette: true, firefox_binary: "/path/to/firefox"
driver = Selenium::WebDriver.for :remote, desired_capabilities: caps

Java :

DesiredCapabilities capabilities = DesiredCapabilities.firefox();

// Tell the Java bindings to use Marionette.
// This will not be necessary in the future,
// when Selenium will auto-detect what remote end
// it is talking to.
capabilities.setCapability("marionette", true);

WebDriver driver = new RemoteWebDriver(capabilities);

.NET

DesiredCapabilities capabilities = DesiredCapabilities.Firefox();

// Tell the .NET bindings to use Marionette.
// This will not be necessary in the future,
// when Selenium will auto-detect what remote end
// it is talking to.
capabilities.SetCapability("marionette", true);

var driver = new RemoteWebDriver(capabilities);

Примечание : Как и другие драйверы, доступные для Selenium от других производителей браузеров, Mozilla выпустила исполняемый файл, который будет запускаться вместе с браузером. Следуйте этому для получения более подробной информации.

Вы можете загрузить последнюю версию исполняемого файла geckodriver для поддержки последней версии firefox отсюда

Ответ 2

  1. Загрузите драйвер gecko с веб- сайта seleniumhq (сейчас он есть на GitHub, и вы можете скачать его здесь) .

    1. У вас будет zip (или tar.gz) файл, поэтому извлеките его.

    2. После извлечения у вас будет geckodriver.exe файл (соответствующий исполняемый файл в Linux).

    3. Создайте папку на C: с именем SeleniumGecko (или соответствующим)

    4. Скопируйте и вставьте geckodriver.exe в SeleniumGecko

    5. Задайте путь для драйвера gecko, как показано ниже


.

System.setProperty("webdriver.gecko.driver","C:\\geckodriver-v0.10.0-win64\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
Ответ 3

Код Java Selenium WebDriver:

Загрузите драйвер Gecko с https://github.com/mozilla/geckodriver/releases в зависимости от вашей платформы. Извлеките его в выбранном вами месте. Напишите следующий код:

System.setProperty("webdriver.gecko.driver", "D:/geckodriver-v0.16.1-win64/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.lynda.com/Selenium-tutorials/Mastering-Selenium-Testing-Tools/521207-2.html");
Ответ 4

Каждая служба драйверов в selenium вызывает аналогичный код (ниже приведен специфичный для Firefox код) при создании объекта driver

 @Override
protected File findDefaultExecutable() {
return findExecutable(
"geckodriver", GECKO_DRIVER_EXE_PROPERTY,
"https://github.com/mozilla/geckodriver",
"https://github.com/mozilla/geckodriver/releases");
}

теперь для драйвера, который вы хотите использовать, вам нужно установить системное свойство со значением path к исполняемому файлу драйвера.

для firefox GECKO_DRIVER_EXE_PROPERTY = "webdriver.gecko.driver", и это можно установить перед созданием объекта драйвера, как показано ниже

System.setProperty("webdriver.gecko.driver", "./libs/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
java selenium