使用Selenium 3.0启动Firefox 46.0.1时获取IllegalStateException

我有Selenium 3.0.1版和Firefox版46.0.1。 在selenium 3.0.1 changelog中提到:

Geckodriver现在是自动化Firefox的默认机制。 这是Mozilla为该浏览器实现的驱动程序,并且是自动化Firefox 48及更高版本所必需的

虽然我收到错误:

java.lang.IllegalStateException:驱动程序可执行文件的路径必须由webdriver.gecko.driver系统属性设置; 有关更多信息,请参阅https://github.com/mozilla/geckodriver 。 最新版本可以从https://github.com/mozilla/geckodriver/releases下载

执行以下代码时:

@Test public void test() { WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com"); driver.quit(); } 

为什么我会收到此错误但是我使用的是Firefox版本<48.0? 是否必须将Geckodriver与Selenium 3.0.1一起使用?

如果我进行以下更改,上面的代码工作正常:

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

必须为所有Firefox浏览器设置以下属性,而不管selenium 3.0以上的版本如何:

 System.setProperty("webdriver.gecko.driver","path to geckodriver"); 

Geckodriver现在是自动化Firefox的默认机制。 这是Mozilla为该浏览器实现的驱动程序,并且是自动化Firefox 48及更高版本所必需的

设置路径是强制性的。

如果要在Firefox 47或之前运行测试,请将Firefox驱动程序function“marionette”设置为false。

 DesiredCapabilities d = new DesiredCapabilities(); d.setCapability("marionette", false); // to disable marionette. WebDriver driver = new FirefoxDriver(d); 

您提到的更改日志链接是针对dotnet的。 这是Java的Changelog

  • Firefox 47.0.1或更早版本仅完全支持Firefox。 geckodriver提供了对更高版本的firefox的支持,它基于不断发展的W3C WebDriver规范,并使用该规范中的有线协议,该协议可能随时更改,恕不另行通知。
  • 您可能希望选择ESR版本,例如45.4.0esr或更早版本。
  • 根本不支持Firefox 47.0.0。