Selenium 4.11.0 版本 Selenium Manager 的新功能

Selenium 4.11.0 版本發布了 Selenium Manager 非常相關的新功能:支援 Chrome for Testing (CfT) 端點,用於 chromedriver 管理和自動化 Chrome 管理(也基於 CfT)。

4.6.0 版本開始,所有 Selenium 版本(Java、JavaScript、Python、Ruby 和 .Net)都隨附 Selenium ManagerSelenium Manager 是一個二進位工具(以 Rust 實作),為 Selenium 提供自動化驅動程式管理。Selenium Manager 仍處於 Beta 測試階段,但它正成為 Selenium 的重要組件。

到目前為止,Selenium Manager 的主要功能稱為自動化驅動程式管理。我使用管理一詞來描述此功能(而不僅僅是下載),因為此過程更廣泛,包含不同的步驟

  1. 瀏覽器版本探索。Selenium Manager 探索執行 Selenium 的機器上安裝的瀏覽器版本(例如,Chrome、Firefox、Edge)。此步驟使用 shell 命令(例如,google-chrome --version)。
  2. 驅動程式版本探索。透過探索到的瀏覽器版本,解析出適當的驅動程式版本。此步驟使用瀏覽器供應商維護的線上中繼資料(例如,chromedrivergeckodrivermsedgedriver)。
  3. 驅動程式下載。透過解析出的驅動程式版本,取得驅動程式 URL;透過該 URL,下載、解壓縮驅動程式工件並在本機儲存。
  4. 驅動程式快取。解壓縮的驅動程式二進位檔儲存在本機快取資料夾 (~/.cache/selenium)。下次需要相同的驅動程式時,如果驅動程式已在快取中,將從該處使用。

PATH 中的驅動程式

透過 Selenium Manager 進行驅動程式管理對於 Selenium 繫結是選擇性加入的。因此,使用者可以繼續手動管理其驅動程式(將驅動程式放在 PATH 中或使用系統屬性),或依賴第三方管理器自動執行此操作。Selenium Manager 僅作為後備方案運作:如果未提供驅動程式,Selenium Manager 將會救援。儘管如此,Selenium Manager 也可協助使用者識別 PATH 中驅動程式的潛在問題。

讓我們考慮一個範例。假設您手動管理 Selenium 測試的 chromedriver。當您執行此管理時,Chrome 的穩定版本為 113,因此您下載 chromedriver 113 並將其放在 PATH 中。您的 Selenium 測試執行。一切正常。但此處的問題在於 Chrome 是常青的。此名稱指的是 Chrome 能夠在可用時自動且靜默地升級到下一個穩定版本。此功能對於終端使用者來說非常棒,但對於自動化測試來說可能很危險。讓我們回到範例來探索它。您的本機 Chrome 最終將更新到 115 版本。在那一刻,由於手動管理的驅動程式 (113) 與您的 Chrome (115) 不相容,您的 Selenium 測試將會中斷。那天,您的測試儀表板將因以下錯誤訊息而變成紅色:「session not created: This version of ChromeDriver only supports Chrome version 113」

此問題是所謂的驅動程式管理器存在的主要原因。從 Selenium 4.11 開始,Selenium Manager 可協助了解與 PATH 中驅動程式相關的潛在問題。當在 PATH 中找到不相容的驅動程式版本時,會向使用者顯示如下警告訊息

WARN    The chromedriver version (113.0.5672.63) detected in PATH at C:\my-drivers\chromedriver.exe might not be compatible with the detected chrome version (115.0.5790.110); currently, chromedriver 115.0.5790.102 is recommended for chrome 115.*, so it is advised to delete the driver in PATH and retry

進入 Chrome for Testing (CfT)

Chrome 團隊在 2023 年為測試社群啟動了一項非常重要的計畫:Chrome for Testing (CfT)。CfT 是 Chrome 的精簡版本,主要針對測試用例。

一般 Chrome 版本與 CfT 之間的關鍵差異之一在於 Chrome 是常青的,但 CfT 不是。這樣,CfT 允許為測試釘選瀏覽器。CfT 版本是適用於不同版本(包括穩定版、Beta 版、Dev 版和 Canary 版頻道)的攜帶型二進位檔(適用於 Windows、Linux 和 macOS)。可以使用 CfT JSON 端點 以程式設計方式探索這些版本。

從 114 版本開始,chromedriver 團隊已停止使用其傳統的 chromedriver 下載儲存庫 發布 chromedriver 版本和中繼資料。因此,從 115 版本開始,chromedriver 版本只能使用上述 CfT JSON 端點 以程式設計方式探索。

此變更對於所謂的驅動程式管理器非常重要。幸運的是,Selenium 已經支援這種新的 chromedriver 探索方式。最新版本的 Selenium Manager 使用 CfT 端點進行 chromedriver 管理。因此,如果您正在使用 Selenium Manager 和 Chrome,您必須更新至 Selenium 4.11.0 才能繼續自動管理 chromedriver。

自動化瀏覽器管理

此外,從 Selenium 4.11.0 開始,Selenium Manager 實作了基於 CfT 的自動化瀏覽器管理。換句話說,Selenium Manager 使用 CfT 端點來探索、下載和快取不同的 CfT 版本,使其可供 Selenium 無縫使用。

假設我們想要使用 Selenium 驅動 Chrome(請參閱有關如何 使用 Selenium 啟動會話 的文件)。在會話開始之前,以及當驅動程式不可用時,Selenium Manager 會為我們管理 chromedriver。這樣,與 CfT 端點、驅動程式版本等相關的所有複雜性都是透明的,我們可以依靠 Selenium Manager 來探索、下載和快取適合我們的驅動程式。

此外,作為 Selenium 4.11.0 的一項重大創新,如果在執行上一行時本機電腦上未安裝 Chrome,則會探索、下載和快取目前的穩定 CfT 版本(在 ~/.cache/selenium/chrome 中)。但還有更多。除了穩定的 CfT 版本外,Selenium Manager 還允許下載舊版本的 CfT(從 113 版本開始,這是第一個以 CfT 形式發布的版本)。

若要使用 Selenium 設定瀏覽器版本,我們可以使用一個名為 browserVersion 的瀏覽器選項。到目前為止,當使用本機瀏覽器時,此選項的值沒有任何效果,因為 Selenium 無法變更系統中已安裝的內容。但使用 Selenium 4.11.0 的情況則有所不同。

讓我們考慮一個簡單的範例。假設我們使用 Chrome 選項browserVersion 設定為 114。在這種情況下,Selenium Manager 將檢查是否已安裝 Chrome 114。如果是,則將使用它。否則,Selenium Manager 將管理(即探索、下載和快取)CfT 114。無論在哪種情況下,chromedriver 也會被管理。最後,Selenium 將啟動 Chrome 以進行程式化驅動,與往常一樣。

但還有更多。除了固定的瀏覽器版本(例如,113114115 等)之外,我們可以使用以下標籤作為 browserVersion

  • stable:目前的 CfT 版本。
  • beta:下一個穩定版本。
  • dev:目前正在開發的版本。
  • canary:開發人員的夜間建置版本。

當指定這些標籤時,Selenium Manager 首先檢查是否已安裝給定的 Chrome(betadev 等),當未偵測到時,會自動管理 CfT。

幕後花絮

Selenium Manager 是一個 CLI(命令列介面)工具,以 Rust 實作,並針對 Windows、Linux 和 macOS 編譯。Selenium Manager 二進位檔隨每個 Selenium 版本一起發布。這樣,每個 Selenium 繫結語言都會調用 Selenium Manager 來執行先前說明的自動化驅動程式和瀏覽器管理。

對於大多數使用者來說,Selenium Manager 應該靜默且透明地運作。但如果您想 Selenium Manager 或將其用於您自己的用例(例如,下載驅動程式或 CfT 版本),您可以從 Selenium 主要儲存庫 取得 Selenium Manager 二進位檔。

例如,若要管理 Chrome/chromedriver,我們需要從 shell 調用的 Selenium Manager 命令如下(請注意,--debug 標誌是選用的,但它有助於我們了解 Selenium Manager 正在做什麼)

> selenium-manager --browser chrome --debug
DEBUG   Checking chromedriver in PATH
DEBUG   Running command: chromedriver --version
DEBUG   Output: ""
DEBUG   chromedriver not found in PATH
DEBUG   chrome detected at C:\Program Files\Google\Chrome\Application\chrome.exe
DEBUG   Using shell command to find out chrome version
DEBUG   Running command: wmic datafile where name='C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' get Version /value
DEBUG   Output: "\r\r\n\r\r\nVersion=115.0.5790.110\r\r\n\r\r\n\r\r\n\r"
DEBUG   Detected browser: chrome 115.0.5790.110
DEBUG   Reading metadata from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
DEBUG   Required driver: chromedriver 115.0.5790.102
DEBUG   Driver URL: https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/115.0.5790.102/win64/chromedriver-win64.zip
INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\115.0.5790.102\chromedriver.exe
INFO    Browser path: C:\Program Files\Google\Chrome\Application\chrome.exe

在這種情況下,Selenium Manager 會偵測到本機 Chrome(在 Windows 中)。然後,使用其版本和 CfT 端點,將適當的 chromedriver 版本(在此範例中為 115)下載到本機快取。最後,Selenium Manager 提供兩個結果:i) 驅動程式路徑(已下載)和 ii) 瀏覽器路徑(本機)。

讓我們考慮另一個範例。現在我們想要使用 Chrome beta 版。因此,我們調用 Selenium Manager,指定該版本標籤如下(請注意,CfT beta 版已探索、下載並儲存在本機快取中)

> selenium-manager --browser chrome --debug --browser-version beta
DEBUG   Checking chromedriver in PATH
DEBUG   Running command: chromedriver --version
DEBUG   Output: ""
DEBUG   chromedriver not found in PATH
DEBUG   Checking chrome in PATH
DEBUG   Running command: where chrome
DEBUG   Output: ""
DEBUG   chrome not found in PATH
DEBUG   chrome has not been discovered in the system
DEBUG   Reading metadata from https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json
DEBUG   Required browser: chrome 116.0.5845.49
DEBUG   Downloading chrome 116.0.5845.49 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/116.0.5845.49/win64/chrome-win64.zip
DEBUG   chrome 116.0.5845.49 has been downloaded at C:\Users\boni\.cache\selenium\chrome\win64\116.0.5845.49\chrome.exe
DEBUG   Reading metadata from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
DEBUG   Required driver: chromedriver 116.0.5845.49
DEBUG   Driver URL: https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/116.0.5845.49/win64/chromedriver-win64.zip
INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\116.0.5845.49\chromedriver.exe
INFO    Browser path: C:\Users\boni\.cache\selenium\chrome\win64\116.0.5845.49\chrome.exe

繫結中的疑難排解

如果您想在使用 Selenium 綁定語言時取得 Selenium Manager 的除錯資訊 (如先前章節所示),您可以啟用 Selenium 的記錄功能。請訪問 Selenium 疑難排解頁面 以了解詳情。

後續步驟

您可以追蹤 Selenium Manager 專案儀表板 中正在進行的工作。以下即將在 Selenium Manager 中實作的功能將繼續自動化瀏覽器管理機制,這次針對 FirefoxEdge。敬請期待!