跳至主要內容
所有文章

WebSummoner 1.0:讓 Selenoid 起死回生

作者 Ghazi Triki · 閱讀時間 3 分鐘

WebSummoner 1.0 發行公告視覺圖
本文內容

發行公告

七款最新瀏覽器在 Docker 中執行,每個工作階段一個容器,錄影附帶聲音。了解 WebSummoner 如何延續自 2024 年 12 月起封存的 Selenoid,以及它為什麼是我們自家代管基礎架構的核心。

如果您的團隊在執行 Selenium 測試,您很可能用過 Selenoid:這支小巧的 Go 程式會為每個測試工作階段在 Docker 容器中啟動一個全新的瀏覽器,用完即丟。它快速、輕量,多年來一直是在自有硬體上架設瀏覽器網格最簡單的方式。2024 年 12 月 17 日,它的作者將儲存庫封存。沒有公告,也沒有告別文:只有 GitHub 掛在唯讀專案上的那條灰色橫幅,就這樣結束了。

2016 年 8 月:Aerokube 提交 Selenoid 的第一個 commit

2024 年 12 月 17 日:儲存庫封存,轉為唯讀

2026 年 9 月:WebSummoner 1.0.0 推出,七款最新瀏覽器,一行設定即可遷移

那天早上什麼都沒壞,而這正是問題所在。被封存的測試工具會依照一個您無法掌控的時程逐漸腐朽:新版瀏覽器永遠不會出現,驅動程式逐漸脫節,直到某一天,一套綠燈了好幾年的測試開始失敗,原因卻與您的應用程式毫無關係。

開源不會隨著儲存庫一起結束

封存一個儲存庫,結束的是它的維護,而不是它的生命。Selenoid 以 Apache 2.0 授權條款發布,賦予每位使用者永久修改與再散布的權利:當專案作者轉往他處,程式碼依然可以取得,新的維護者也能接手延續下去。Aerokube 打造了 Selenoid,並維護了八年;封存它是他們有權做出的決定,而 Selenoid 所有做對的地方,功勞依然屬於他們。WebSummoner 就是這樣的延續。它從 Selenoid 的最後一個 commit 出發,保留了讓它出色的設計,並擁有自己的名稱、組織、映像與網域。RIADVICE 原本就在正式環境中使用 Selenoid,延續它是明智的決定,對我們如此,對其他所有仰賴它的人也是如此。

WebSummoner 1.0.0 正式推出:一個快速的 Selenium hub,能將一整批瀏覽器召喚到 Docker 容器中,作為以工作階段為範圍的臨時環境。

我們為什麼選擇分支 Selenoid,而不是取代它

我們分支它的原因有兩個。

  1. 我們自己的基礎架構:WebSummoner 是 RIADVICE 代管基礎架構的骨幹之一。一個不再收到瀏覽器更新、驅動程式修正或安全性修補的正式環境相依元件,我們不能任由它停留在封存狀態;而改用更笨重的方案,成本會比好好維護它還要高。

  2. 社群:世界各地的團隊多年來在 Selenoid 上建立了大量測試套件,他們理應得到一個持續維護的延續版本,而不是眼看它慢慢衰敗。Selenoid 把重要的事情都做對了:單一約 10 MB 的 Go 執行檔,不需要 Java 執行環境,不需要資料庫,瀏覽器約一秒就能啟動,而且每個工作階段一個容器,測試之間不會互相洩漏任何東西。

我們保留了這一切,並將其餘部分全面更新:瀏覽器、驅動程式、基礎映像與工具鏈,這些自 2024 年起就停滯不前。Selenoid 可以說是一套「已完成」的軟體:它不需要最新的功能,它需要的是最新的瀏覽器、相符的驅動程式與穩定的修正,而這正是我們承擔下來的工作。相容性是第一個決定,而不是事後才想到的。Selenoid 用戶端送出的一切,都會永久繼續被接受。

1.0.0 有哪些新功能

七款瀏覽器,全部都是最新版

瀏覽器版本
Chrome152
Firefox155
Edge152
Opera 回歸135
Brave 新增1.94
Yandex26.6
Safari(WebKitGTK)新增2.52.6

每個映像都通過同一套容器測試,並針對已發布的映像隔離執行。驅動程式本身無法處理的兩種情況,以略過(skip)的方式記錄在文件中,而不是隱藏起來。其中三款本身就是新聞。 Brave 與 Safari 是首次發布:Selenoid 從未推出過 Brave 映像,其 Safari 原始碼也從未發布成映像。Opera 則是起死回生:它最後一個 Selenoid 映像停留在 2024 年 4 月,而自從 Selenium 4 放棄支援 Opera 之後,它就一直無法使用。

Brave 加入陣容

Brave 是首次發布:Selenoid 從未推出過它,如今它與其他六款並列,成為一級映像。Brave 的版本編號自成一套,因此建置工具會讀取每個版本內嵌的 Chromium 版本,並自動搭配相符的驅動程式。如果您的使用者用 Brave 瀏覽網頁,您就能像在 Chrome 上測試一樣在 Brave 上測試:相同的功能、相同的即時畫面、相同的錄影,以及以同樣方式通過的同一套測試。

Opera 重新可用

Selenium 在 4.3.0 版放棄支援 Opera,而大家口耳相傳的變通做法,也就是用 Chrome for Testing 的 chromedriver 驅動 Opera,雖然能正常啟動工作階段,卻會在網頁開啟視窗時讓渲染器當掉。解法是好好讀懂錯誤訊息:OperaDriver 的版本檢查只是一則警告,而不是拒絕。Opera 自己的驅動程式能正確驅動它,而 hub 會代您要求它使用新式協定。

Safari 成為一級目標

Safari 同樣是首次發布。這個映像採用 WebKitGTK,也就是 Safari 所使用的同一套引擎,並從原始碼建置:Selenoid 雖然附有建置檔,卻從未發布過映像,因此這是第一個您可以直接拉取的版本。過去在它上面一直無法運作的兩件事,檔案上傳與 proxy 功能,現在改由 hub 本身處理,因此這項修正適用於任何映像,無論新舊。剩下的兩個小怪癖,各只需要在測試中加一行,文件中也會說明是哪一行。

所有瀏覽器的錄影都有聲音

工作階段錄影現在能在全部七款瀏覽器上穩定擷取音訊,因此失敗的媒體或 WebRTC 測試不再只是一段無聲影片。如果您不需要聲音,只要一項設定就能關閉。

為營運而打造

Prometheus /metrics 端點、能回應 HEAD 請求的健康檢查探針、佇列已滿時正確回傳的 429、在每個映像上都能運作的檔案上傳、附有軟體物料清單(SBOM)的已簽章發行映像,以及一份清楚說明 Docker socket 意涵的安全政策。

全新打造的 UI

WebSummoner UI 是網格的即時檢視畫面,可看到瀏覽器畫面、日誌與佇列,這次從頭重新打造:精心設計的深色主題、官方瀏覽器標誌、即時的工作階段與佇列統計,以及誠實的連線狀態回報。既有的命令列與 Compose 檔案都不需要任何修改。

現代化的工具鏈

Go 1.27、測試套件使用 Java 25、UI 使用 React 19、瀏覽器映像使用 Ubuntu 26.04,並在 CI 中進行相依套件更新與弱點檢查,另有可搜尋的文件網站。建置專案的任何部分都只需要 Docker。多 hub 叢集的負載平衡器與一行指令的安裝程式,也隨 hub 一起更新。

如果您今天就要做選擇

Selenoid 所做的事情沒有完美的替代品,但有各自適合的選項。

Selenium Grid:參考實作。如果您需要它的分散式模式,也不介意 Java 的資源占用,它就是正確的選擇。

Moon:如果您在 Kubernetes 上執行,並能接受超過四個平行工作階段就需要商業授權,它就是您的選擇。

WebSummoner:適用於 Docker 主機與虛擬機器,如果您想要的是一個小巧、快速、開箱即用的 hub,就選它。

文件中維護著一份依原始碼查核的比較,涵蓋 Selenoid、Moon、Selenium Grid、Selenide、Playwright 與 Puppeteer,也說明了什麼情況下應該改選它們。

從 Selenoid 遷移

將您的用戶端指向新的 hub 即可。selenoid:options、X-Selenoid-* 標頭、/aerokube/... 路徑、cm selenoid start 以及 UI 的 --selenoid-uri 旗標都仍然可用,而且會持續可用。

唯一的變更: 在 Docker 映像中,設定檔的位置從 /etc/selenoid 移到了 /etc/websummoner。更新那個掛載點,就大功告成了。

我們的承諾

  • 永久相容。 Selenoid 的功能名稱、標頭、路徑與指令都會永久接受,不會設下期限逐步淘汰。一次得耗掉一整個 sprint 的遷移,不會有人去做。
  • 最新的瀏覽器。 映像會跟進各家廠商的穩定版本,每一個都搭配相符的驅動程式,任何映像都要通過測試套件才會加上標籤。
  • 持續的安全維護。 相依套件每週更新,每次建置都會執行弱點檢查,hub 映像經過簽章,並附有軟體物料清單。
  • 正式環境優先。 我們自己就在使用 WebSummoner。我們交付的,就是我們自己仰賴的。
  • 文件會說明哪些不能用。 完整的說明,包括各項限制,都在發行公告中。

WebSummoner 立志在自己能贏的領域與最大型的網格一較高下:速度、簡單,以及營運成本。每一項變更都以這個標準來衡量。

即刻可用

Shell
websummoner \
    -p 4444:4444 \
    -v $PWD/browsers.json:/etc/websummoner/browsers.json:ro \
    -v /var/run/docker.sock:/var/run/docker.sock \
    websummoner/websummoner:latest

將您的測試指向 http://localhost:4444/wd/hub。完整的發行說明、遷移指南與討論區,都只差一次點擊:

📣 1.0.0 發行公告:完整的發行說明,以及提問的地方 📖 文件:指南、參考資料與遷移指南 💻 原始碼:Apache-2.0,託管於 GitHub

如果您用過 Selenoid,而遷移時有任何地方不如預期,對我們而言那就是一個 bug,而不是支援問題。如果您曾在 Selenoid 之上維護過任何東西,請告訴我們,我們會確保它能繼續運作。

將一整批瀏覽器召喚到 Docker 容器中。

一個快速的 Selenium hub,提供以工作階段為範圍的臨時環境。

需要協助在您的組織中導入 WebSummoner 嗎?

聯絡我們

WebSummoner 由 RIADVICE 依 Apache-2.0 授權開發與維護。它建立在 Aerokube 與 Ivan Krutov 的 Selenoid,以及 Kirill Merkushev 原創的 UI 之上。

分享這篇文章