舊版 Firefox 驅動程式
此文件先前位於 wiki 上
您可以閱讀更多關於 geckodriver 的資訊。
關於
Firefox 驅動程式包含在下載中提供的 selenium-server-standalone.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 擴充功能的形式編寫。語言綁定透過經由 socket 連接並以 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 的實例時,會執行以下步驟
- 抓取 “鎖定埠”