旧版 Firefox 驱动
此文档之前位于 wiki 上
你可以阅读更多关于 geckodriver 的信息。
关于
Firefox 驱动程序包含在下载中提供的 selenium-server-stanalone.jar 中。该驱动程序以 xpi (Firefox 扩展) 的形式出现,当你启动新的 FirefoxDriver 实例时,它会被添加到 Firefox 配置文件中。
优点
- 在真正的浏览器中运行并支持 Javascript
- 比 InternetExplorerDriver 快
缺点
- 比 HtmlUnitDriver 慢
重要的系统属性
以下系统属性(在 Java 代码中使用 System.getProperty()
读取,使用 System.setProperty()
设置,或使用 “-DpropertyName=value
” 命令行标志设置)由 FirefoxDriver 使用
属性 | 含义 |
---|---|
webdriver.firefox.bin | 用于控制 Firefox 的二进制文件的位置。 |
webdriver.firefox.marionette | 布尔值,如果在独立服务器上设置,将忽略任何请求的 “marionette” 所需功能,并强制 Firefox 使用 GeckoDriver (true) 或旧版 Firefox 驱动程序 (false) |
webdriver.firefox.profile | 启动 Firefox 时要使用的配置文件名称。默认为 webdriver 创建一个匿名配置文件 |
webdriver.firefox.useExisting | 切勿在生产环境中使用 如果存在正在运行的 Firefox 实例,则使用它 |
webdriver.firefox.logfile | 将 Firefox stdout/stderr 转储到的日志文件 |
通常,Firefox 二进制文件假定位于特定操作系统的默认位置
操作系统 | Firefox 的预期位置 |
---|---|
Linux | firefox (使用 “which” 查找) |
Mac | /Applications/Firefox.app/Contents/MacOS/firefox-bin |
窗口 | %PROGRAMFILES%\Mozilla Firefox\firefox.exe |
默认情况下,Firefox 驱动程序会创建一个匿名配置文件
使用 Firebug 运行
从 Mozilla 下载 Firebug xpi 文件,并按如下方式启动配置文件
File file = new File("firebug-1.8.1.xpi");
FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.addExtension(file);
firefoxProfile.setPreference("extensions.firebug.currentVersion", "1.8.1"); // Avoid startup screen
WebDriver driver = new FirefoxDriver(firefoxProfile);
FirefoxDriver 内部结构
(之前位于: https://github.com/SeleniumHQ/selenium/wiki/FirefoxDriver-Internals)
FirefoxDriver 主要以 Firefox 扩展的形式编写。语言绑定通过套接字连接并以 UTF-8 发送命令(在 JsonWireProtocol 页面中描述)来控制驱动程序。扩展使用 Firefox 提供的 XPCOM 原语来完成其工作。需要注意的重要一点是,命令名称直接映射到 javascript 代码中 “FirefoxDriver.prototype” 上公开的方法。
在 FirefoxDriver 代码上工作
首先,请确保没有安装旧版本的 FirefoxDriver
- 启动 Firefox 的配置文件管理器:
firefox -ProfileManager
- 如果存在现有的 WebDriver 配置文件,请将其删除。也要删除这些文件(这是在配置文件管理器中删除配置文件时提供的选项)
其次,请查看 Mozilla 开发者中心,特别是与 设置扩展开发环境 相关的部分。现在你应该准备好编辑代码了。最好在你正在工作的代码区域周围创建一个测试,并使用 SingleTestSuite
运行它。FirefoxDriver 会将错误记录到 Firefox 的错误控制台(“工具->错误控制台”),因此如果测试失败,这是一个很好的开始查找的地方。
要实际将信息记录到控制台,请在你的 javascript 代码中使用 “Utils.dumpn()
” 方法。如果你发现你想详细检查一个对象,请使用 “Utils.dump()
” 方法,该方法将报告对象实现的接口,并尽可能多地将信息输出到控制台。
控制流程:启动 Firefox
在实例化 FirefoxDriver 实例时执行以下步骤
- 获取 “锁定端口”