在Firefox 47.x之前的版本中,传统的驱动程序被实现为Firefox扩展程序。每当WebDriver启动Firefox时,该扩展程序将安装在驱动程序使用的配置文件中。
因此,我们使用了以下内容:
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
自Firefox 48版本起,浏览器扩展已被禁用并引入了WebDriver。自此,由Mozilla开发和维护的基于Marionette解决方案的GeckoDriver
可用于自动化Mozilla Firefox浏览器。
Marionette
根据Mozilla官方文档关于developer.mozilla.org上的说明,Marionette是一个自动化驱动程序。它使用Firefox的远程协议来控制用户界面。Marionette接受请求并在Gecko中执行它们。它也有一个客户端。客户端向服务器发送指令,服务器在浏览器内执行这些指令。
因此,我们开始使用Marionette:
System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
电线
有些参考资料建议将可执行文件重命名为“wires.exe”并将其添加到您的路径中。因此,以下内容被使用:
System.setProperty("webdriver.firefox.marionette","C:\\wires.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
GeckoDriver
GeckoDriver是可执行文件,我们需要在系统中下载它,并在执行测试用例时在脚本/程序中指定其位置。GeckoDriver将启动Mozilla Firefox浏览器。
这些摘录来自Jim Evan对问题使用马里奥内特FirefoxDriver与旧版Selenium FirefoxDriver相比的好处是什么?的详细回答,该回答为我们提供了关于GeckoDriver和Marionette如何进入实践的详细理解。
因此,我们开始使用geckodriver.exe:
System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
当前情况下,您仍然可以通过Firefox 47.x浏览器的传统版本和最近的Firefox 53.x浏览器版本来执行自动化。
用例1:
如果使用传统的Firefox 47.x浏览器,则必须通过DesiredCapabilities类显式将“marionette”设置为false,如下所示:
DesiredCapabilities dc = DesiredCapabilities.firefox();
dc.setCapability("firefox_binary", "C:\\Program Files\\Mozilla Firefox47\\firefox.exe");
dc.setCapability("marionette", false);
WebDriver driver = new FirefoxDriver(dc);
driver.navigate().to("https://gmail.com");
使用案例 2:
如果您使用遗留的 Firefox 47.x 浏览器,如果您跳过将“marionette”设置为 false,或者将“marionette”设置为 true,您将会出现一个 IllegalStateException
异常。
使用案例 3:
如果您使用 Firefox 53.x 浏览器,您可以选择如下跳过将“marionette”设置为 true,这将显示 Marionette INFO 日志,例如:Marionette INFO Listening on port 11105
:
System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://gmail.com");
使用案例 4:
如果您使用 Firefox 53.x 浏览器,您可以通过 DesiredCapabilities 类明确将 "marionette" 设置为 true,这将显示 Marionette WARN 日志,例如:WARN TLS 证书错误将在此会话中被忽略
System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
DesiredCapabilities dc = DesiredCapabilities.firefox();
dc.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(dc);
driver.navigate().to("https://gmail.com");
使用案例5:
如果在Firefox 53.x浏览器中通过DesiredCapabilities类强制将"marionette"设置为false,你将会看到一个UnreachableBrowserException
异常。