移除舊版協定支援
分類
Selenium 團隊以其對向後相容性的重視而自豪。特別是在 Java 綁定方面,我們投入了大量的精力來確保多年來極少的重大變更。15 年前編寫的 Selenium 程式碼仍然可以在 Selenium 4 函式庫上執行!然而,提供如此大量的支援也帶來了沉重的維護負擔,我們需要能夠適當地滿足絕大多數用戶群的需求。
重點摘要
- Java Selenium 4.9 將移除對舊版 JSON Wire Protocol 的支援(其他語言已移除此支援)
- Selenium 4.9 Grid 將停止協定轉換
- 您可以透過使用 瀏覽器選項類別 而不是已棄用的 Desired Capabilities 類別(並避免直接使用「設定功能」方法)來確保您的會話符合 W3C 標準
- 如果您依賴目前的協定轉換功能,並且它對您有效,您可以繼續在 Selenium Grid 4.8 中使用它
在過去七年的 Selenium 開發中,最大的挑戰莫過於將底層實作從舊版 JSON Wire Protocol 轉換為新的標準化 W3C WebDriver Protocol。由於 WebDriver 規範當時正在積極開發中,Selenium 3 同時支援這兩種協定。我們實作了「交握」程式碼來判斷要使用哪個協定。啟動會話時,Selenium 會將提供的功能打包成舊版和 W3C 格式,將它們傳送到驅動程式/伺服器,並使用傳回的協定。這在大多數情況下都運作良好。對於許多用戶而言,無需進行任何變更即可從新的瀏覽器(Firefox 47+ 和 Chrome 75+)取得符合 W3C 標準的會話。
對於 Java 綁定,我們決定更進一步。程式碼不僅僅是傳送以兩種格式提供的內容,而是代表用戶將功能從舊版協定轉換為 W3C 協定。Selenium Grid 使用此程式碼,因此,無論哪個用戶端語言將舊版功能傳送到它,Grid 都會將其轉換為 W3C 協定,以便與驅動程式進行通訊,然後將結果重新轉換回舊版協定。由於程式碼必須做出一些假設和猜測才能運作,因此存在許多令人沮喪的邊緣案例。
對於 Selenium 4.0,Ruby、JavaScript 和 .NET 綁定都移除了交握程式碼,因此未使用任何舊版指令。由於在凍結 3.x 程式碼之前無法解決某些問題,Python 將延遲到 Selenium 4.9 才移除其交握程式碼。Selenium 團隊原本打算在整個 4.x 版本中繼續在 Grid 和 Java 綁定中支援這兩種協定,但在 Selenium 4 Grid 上執行為 Selenium 2 編寫的測試套件導致了超出預期的失敗次數。我們發現了六個錯誤,其中一些錯誤影響很大。
有問題的程式碼非常複雜,以至於修復錯誤而不引起新問題將是一項重大挑戰。因此,我們已決定再次開始簡化程式碼庫,明確地在任何 Selenium 程式碼庫中都不支援舊版協定的功能和指令。如果您使用的是最新版本的 Java Selenium,那麼所有將被移除的內容都已被標記為已棄用,因此請仔細檢查您的使用情況,以確保不會有任何意外。
如果您對我們在探索此問題時發現的一些問題的具體細節感興趣,您可以查看 Selenium Issue #10374 中的討論。
有關確保與 Grid 相容性的更多資訊,請參閱我們的 Selenium 4 升級指南




