线程“主”中的异常java.lang.IllegalStateException:驱动程序可执行文件的路径必须由webdriver设置.gecko.driver系统属性;有关更多信息,请参见https://github.com/mozilla/geckodriver。可以从https://github.com/mozilla/geckodriver/releases下载最新版本。我正在使用
Selenium 3.0.01
Beta版本和Mozilla 45
。我也尝试过Mozilla 47
。但还是一样。#1 楼
Selenium
客户端绑定将尝试从系统geckodriver
定位PATH
可执行文件。您需要将包含可执行文件的目录添加到系统路径。在Unix系统上,您可以执行以下操作将其追加到系统的搜索路径中(如果要添加)正在使用兼容bash的shell:
export PATH=$PATH:/path/to/geckodriver
在Windows上,您需要更新Path系统变量以将完整目录路径添加到可执行文件中。原理与Unix上相同。
下面的所有配置,使用任何编程语言绑定来启动最新的firefox,都适用于
Selenium2
以显式启用Marionette。在Selenium 3.0及更高版本中,您不需要做任何事情来使用Marionette,因为默认情况下已启用它。要在测试中使用Marionette,您需要更新所需的功能才能使用它。
Java:
作为例外,很明显,您需要从这里下载最新的
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());
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
。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
评论
非常感谢。这很完美。但是,仅作为参考,这只壁虎驱动程序的全部作用是什么?我从事硒工作已经有一段时间了,之前我从未遇到过。但是现在我刚刚更换了机器,却出现了这个错误。
– Reema
16 Jul 30'23:12
与其他浏览器供应商提供给Selenium的其他驱动程序一样,Mozilla现在发布了一个可执行文件,它将与浏览器一起运行。请查看更多详细信息。.developer.mozilla.org/ en-US / docs / Mozilla / QA / Marionette / ...
–索拉布·高尔(Saurabh Gaur)
16 Jul 31'0:52
我决定找到另一个很少进行此类重大更改的库。严重的是,在我更新了Firefox或库之后,通常它将不再起作用。更糟的是,最新的Windows版geckodriver.exe仅适用于64位系统。是时候跟硒说再见了。
– Thariq Nugrohotomo
16年8月15日在9:49
我真的很困惑“ Selenium客户端绑定将尝试找到geckodriver” WebDriver是否变成Geckdriver?这里发生了什么?
– 8质子
16年8月31日在20:17
@ 8protons在这里看看developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/…Mozilla提供的geckodriver,.. geckodriver实现了WebDriver,因此,硒客户端绑定试图找到geckodriver以支持最新的firefox上的自动化
–索拉布·高尔(Saurabh Gaur)
16年8月31日23:00
#2 楼
从seleniumhq网站上下载gecko驱动程序(现在在GitHub上,您可以从此处下载)。
您将拥有一个zip(或tar.gz),因此提取它。
提取之后,您将拥有geckodriver.exe文件(在Linux中适当的可执行文件)。
在C中创建文件夹:名为SeleniumGecko(或适当的方法)
将geckodriver.exe复制并粘贴到SeleniumGecko中
按如下所示设置壁虎驱动程序的路径
。
System.setProperty("webdriver.gecko.driver","C:\geckodriver-v0.10.0-win64\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
评论
我错过了此驱动程序的路径,现在工作正常
–尤沙·本·阿里夫(Yousha Bin Arif)
2月16日在16:03
#3 楼
Selenium WebDriver Java代码:根据您的平台从https://github.com/mozilla/geckodriver/releases下载Gecko驱动程序。根据您的选择将其提取。编写以下代码:
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");
评论
位置可能因人而异。我将其提取到D盘上
– Ripon Al Wasim
17年5月13日在8:01
#4 楼
硒中的每个驱动程序服务在创建驱动程序对象时都会调用类似的代码(以下是Firefox特定代码) @Override
protected File findDefaultExecutable() {
return findExecutable(
"geckodriver", GECKO_DRIVER_EXE_PROPERTY,
"https://github.com/mozilla/geckodriver",
"https://github.com/mozilla/geckodriver/releases");
}
现在为要使用的驱动程序,您必须使用驱动程序可执行文件的路径值来设置系统属性。
对于Firefox GECKO_DRIVER_EXE_PROPERTY =“ webdriver.gecko.driver”,可以在创建驱动程序对象之前按以下方式进行设置
System.setProperty("webdriver.gecko.driver", "./libs/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
#5 楼
就我而言,我必须在属性文件中设置路径,很多时候我都找到了方法:application.properties文件:
webdriver.gecko.driver="/lib/geckodriver-v0.26.0-win64/geckodriver.exe"
在Java代码中:
private static final Logger log = Logger.getLogger(Login.class.getName());
private FirefoxDriver driver;
private FirefoxProfile firefoxProfile;
private final String BASE_URL = "https://www.myweb.com/";
private static final String RESOURCE_NAME = "main/resources/application.properties"; // could also be a constant
private Properties properties;
public Login() {
init();
}
private void init() {
properties = new Properties();
try(InputStream resourceStream = getClass().getClassLoader().getResourceAsStream(RESOURCE_NAME)) {
properties.load(resourceStream);
} catch (IOException e) {
System.err.println("Could not open Config file");
log.log(Level.SEVERE, "Could not open Config file", e);
}
// open incognito tab by default
firefoxProfile = new FirefoxProfile();
firefoxProfile.setPreference("browser.privatebrowsing.autostart", true);
// geckodriver driver path to run
String gekoDriverPath = properties.getProperty("webdriver.gecko.driver");
log.log(Level.INFO, gekoDriverPath);
System.setProperty("webdriver.gecko.driver", System.getProperty("user.dir") + gekoDriverPath);
log.log(Level.INFO, System.getProperty("webdriver.gecko.driver"));
System.setProperty("webdriver.gecko.driver", System.getProperty("webdriver.gecko.driver").replace("\"", ""));
if (driver == null) {
driver = new FirefoxDriver();
}
}
#6 楼
我在Windows 10中从selenium-java-3.141.59使用并使用以下代码解决了我的问题:System.setProperty("webdriver.gecko.driver", "C:\gecko\geckodriver.exe");
System.setProperty("webdriver.firefox.bin","C:\Program Files\Mozilla Firefox\firefox.exe");
WebDriver driver = new FirefoxDriver();
评论
我认为这不是重复的问题,它发生在硒3中,是一个新问题,stacktrace也有所不同。谢谢.. :)您需要geckodriver在Firefox中启动硒3测试。