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 。但还是一样。

原文由 Reema 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

Selenium 客户端绑定将尝试从系统中找到 geckodriver 可执行文件 PATH 。您需要将包含可执行文件的目录添加到系统路径。

  • Unix 系统上,如果您使用的是 bash 兼容的 shell,您可以执行以下操作将其附加到系统的搜索路径中:
   export PATH=$PATH:/path/to/geckodriver

  • Windows 上,您需要更新 Path 系统变量以将完整目录路径添加到可执行文件。原理与 Unix 相同。

以下所有使用任何编程语言绑定启动最新 Firefox 的配置都适用于 Selenium2 以显式启用 Marionette。使用 Selenium 3.0 及更高版本,您无需执行任何操作即可使用 Marionette,因为它默认启用。

要在测试中使用 Marionette,您需要更新所需的功能才能使用它。

爪哇

由于例外情况很明显,您需要从 此处 下载最新的 geckodriver.exe 并设置下载的 geckodriver.exe 它作为系统属性存在于您的计算机中的路径,带有变量 webdriver.gecko.driver 之前启动木偶驱动程序并启动 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());

蟒蛇

 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)

红宝石

 # 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 ,这将允许您在 Selenium 网格中使用 Marionette —。

蟒蛇

 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)

红宝石

 # 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

爪哇

 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);

。网

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

原文由 Saurabh Gaur 发布,翻译遵循 CC BY-SA 3.0 许可协议

  1. 从 seleniumhq 网站下载 gecko 驱动程序(现在它在 GitHub 上,你可以从 这里 下载)。
    1. 您将获得一个 zip(或 tar.gz)文件,因此请解压它。
    2. 提取后,您将拥有 geckodriver.exe 文件(Linux 中的适当可执行文件)。
    3. 在 C 中创建文件夹:命名为 SeleniumGecko(或适当的)
    4. 将 geckodriver.exe 复制并粘贴到 SeleniumGecko
    5. 设置壁虎驱动程序的路径如下

.

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

原文由 Kanth25 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题