为了账号安全,请及时绑定邮箱和手机立即绑定

webdriver.firefox.marionette和webdriver.gecko

webdriver.firefox.marionette和webdriver.gecko

翻翻过去那场雪 2019-11-28 10:05:45
我现在正在学习硒,遇到了问题。我知道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 and webdriver.firefox.marionette和wires.exeand和有geckodriver.exe什么区别?
查看完整描述

3 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

在版本45(推送至版本47)之前,用于自动化Firefox的驱动程序是每个客户端附带的扩展。但是,此扩展名已被删除,可能是由于政策更改所致,该政策现在要求所有扩展名均由Mozilla签名。


Marionette是Firefox附带/随附的新驱动程序。该驱动程序具有自己的协议,该协议与Selenium / WebDriver协议不直接兼容。


的壁虎驱动器(以前称为导线)是实施硒/ webdriver的协议的应用服务器。它转换Selenium命令并将其转发给Marionette驱动程序。


对于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


查看完整回答
反对 回复 2019-11-28
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

Marionette是最新Firefox版本附带/附带的新驱动程序。


但是,Geckodriver是使用W3C WebDriver兼容客户端与基于Gecko的浏览器进行交互的代理。Geckodriver提供了由WebDriver协议描述的HTTP API,以与Gecko浏览器进行通信,例如47以上的Firefox版本。


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


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 1116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信