Chuyển đến nội dung chính
Tất cả bài viết

WebSummoner 1.0: Selenoid được hồi sinh

bởi Ghazi Triki · 11 phút đọc

Ra mắt WebSummoner 1.0
Trong bài viết này

Thông báo phát hành

Bảy trình duyệt phiên bản mới nhất trong Docker, mỗi phiên một container, bản ghi hình có âm thanh. Hãy khám phá cách WebSummoner tiếp nối Selenoid, dự án đã được lưu trữ từ tháng 12 năm 2024, và vì sao nó vận hành ở trung tâm hạ tầng hosting của chính chúng tôi.

Nếu nhóm của bạn chạy kiểm thử Selenium, rất có thể bạn đã biết Selenoid: chương trình Go nhỏ gọn khởi động một trình duyệt mới trong container Docker cho mỗi phiên kiểm thử và loại bỏ nó sau đó. Nhanh, nhẹ, và trong nhiều năm là cách dễ nhất để chạy một browser grid trên phần cứng của chính bạn. Ngày 17 tháng 12 năm 2024, các tác giả đã lưu trữ kho mã nguồn. Không thông báo, không lời từ biệt: chỉ có dải băng màu xám mà GitHub gắn lên một dự án chỉ đọc, và thế là hết.

Tháng 8 năm 2016 Commit Selenoid đầu tiên tại Aerokube

17 tháng 12 năm 2024 Kho mã nguồn được lưu trữ, chỉ đọc

Tháng 9 năm 2026 WebSummoner 1.0.0: bảy trình duyệt mới nhất, di chuyển chỉ với một dòng

Sáng hôm đó không có gì hỏng, và đó chính là vấn đề. Một công cụ kiểm thử đã lưu trữ sẽ mục dần theo một lịch trình bạn không kiểm soát: phiên bản trình duyệt mới không bao giờ đến, driver lệch dần, và một ngày nào đó, bộ kiểm thử vốn xanh suốt nhiều năm bắt đầu thất bại vì những lý do chẳng liên quan gì đến ứng dụng của bạn.

Mã nguồn mở không kết thúc cùng một kho mã

Lưu trữ một kho mã nguồn chấm dứt việc bảo trì, chứ không chấm dứt sự sống của nó. Selenoid được phát hành theo giấy phép Apache 2.0, trao cho mọi người dùng quyền vĩnh viễn để sửa đổi và phân phối lại: khi các tác giả của dự án chuyển sang việc khác, mã nguồn vẫn còn đó và một người bảo trì mới có thể tiếp nối. Aerokube đã xây dựng và gánh vác Selenoid suốt tám năm; lưu trữ nó là quyết định của họ, và công lao cho những gì Selenoid làm tốt vẫn thuộc về họ. WebSummoner chính là sự tiếp nối đó. Dự án bắt đầu từ commit cuối cùng của Selenoid, giữ nguyên thiết kế đã làm nên giá trị của nó, và mang tên gọi, tổ chức, image và tên miền riêng. Chúng tôi vốn đã chạy Selenoid trong môi trường production tại RIADVICE, và tiếp nối nó là quyết định đúng đắn, cho chúng tôi và cho tất cả những ai phụ thuộc vào nó.

WebSummoner 1.0.0 đã ra mắt: một Selenium hub nhanh, triệu hồi cả một đội trình duyệt vào các container Docker dưới dạng môi trường tạm thời, gắn với từng phiên.

Vì sao chúng tôi fork Selenoid thay vì thay thế nó

Chúng tôi fork Selenoid vì hai lý do.

  1. Hạ tầng của chính chúng tôi WebSummoner là một phần xương sống của hạ tầng hosting của RIADVICE. Một phụ thuộc production không còn nhận được bản cập nhật trình duyệt, bản sửa driver hay bản vá bảo mật không phải là thứ chúng tôi có thể để nằm trong kho lưu trữ, và chuyển sang một giải pháp nặng nề hơn sẽ tốn kém hơn việc bảo trì nó cho tốt.

  2. Cộng đồng Các nhóm trên khắp thế giới đã xây dựng nhiều năm bộ kiểm thử trên Selenoid, và họ xứng đáng có một sự tiếp nối được bảo trì thay vì một sự suy tàn chậm chạp. Selenoid đã làm đúng những điều quan trọng: một binary Go duy nhất khoảng 10 MB, không cần môi trường chạy Java, không cơ sở dữ liệu, trình duyệt khởi động trong khoảng một giây, và mỗi phiên một container để không có gì rò rỉ giữa các bài kiểm thử.

Chúng tôi giữ lại tất cả những điều đó và cập nhật phần còn lại: trình duyệt, driver, image nền và bộ công cụ, tất cả đều đã đóng băng từ năm 2024. Selenoid là thứ có thể gọi là phần mềm đã hoàn thiện: nó không cần tính năng mới nhất, nó cần trình duyệt mới nhất, driver tương ứng và các bản sửa lỗi đều đặn, và đó chính là công việc chúng tôi đã cam kết. Tính tương thích là quyết định đầu tiên, không phải điều tính đến sau cùng. Mọi thứ một ứng dụng khách Selenoid gửi đi vẫn được chấp nhận, vĩnh viễn.

Có gì mới trong 1.0.0

Bảy trình duyệt, tất cả đều mới nhất

Trình duyệtPhiên bản
Chrome152
Firefox155
Edge152
Opera trở lại135
Brave mới1.94
Yandex26.6
Safari (WebKitGTK) mới2.52.6

Mọi image đều vượt qua cùng một bộ kiểm thử container, chạy độc lập trên các image đã phát hành. Hai trường hợp mà chính các driver không xử lý được đều được ghi rõ là bỏ qua, không bị che giấu. Ba trong số này tự thân đã là tin tức. Brave và Safari được phát hành lần đầu tiên: Selenoid chưa bao giờ cung cấp image Brave, và mã nguồn Safari của nó chưa từng được phát hành thành image. Opera trở lại từ cõi chết: image Selenoid cuối cùng của nó có từ tháng 4 năm 2024, và nó đã không thể dùng với Selenium 4 kể từ khi dự án ngừng hỗ trợ Opera.

Brave gia nhập đội hình

Brave được phát hành lần đầu tiên: Selenoid chưa bao giờ cung cấp nó, và giờ đây nó đứng cạnh sáu trình duyệt còn lại như một image hạng nhất. Brave đánh số phiên bản theo thang riêng, nên công cụ build đọc phiên bản Chromium được nhúng trong mỗi bản phát hành và tự động ghép với driver tương ứng. Nếu người dùng của bạn duyệt web bằng Brave, bạn có thể kiểm thử trên đó đúng như trên Chrome: cùng capability, cùng màn hình trực tiếp, cùng bản ghi hình, và cùng bộ kiểm thử được vượt qua theo cùng một cách.

Opera hoạt động trở lại

Selenium đã ngừng hỗ trợ Opera từ phiên bản 4.3.0, và cách xử lý tạm mà ai cũng nhắc lại, điều khiển Opera bằng chromedriver của Chrome for Testing, khởi động phiên bình thường nhưng sau đó làm sập trình kết xuất mỗi khi một trang mở cửa sổ mới. Cách khắc phục nằm ở việc đọc kỹ thông báo lỗi: kiểm tra phiên bản của OperaDriver chỉ là một cảnh báo, không phải lời từ chối. Driver riêng của Opera điều khiển nó chính xác, và hub thay bạn yêu cầu nó dùng giao thức hiện đại.

Safari là mục tiêu hạng nhất

Safari cũng được phát hành lần đầu tiên. Image này là WebKitGTK, cùng engine mà Safari sử dụng, được build từ mã nguồn: Selenoid có sẵn các tệp build nhưng chưa bao giờ phát hành image, nên đây là image đầu tiên bạn có thể pull về. Hai thứ chưa bao giờ hoạt động với nó, tải tệp lên và capability proxy, giờ đây do chính hub xử lý, nên bản sửa áp dụng cho mọi image, cũ hay mới. Hai điểm bất thường còn lại, mỗi điểm chỉ cần một dòng trong bài kiểm thử của bạn, và tài liệu nêu rõ đó là dòng nào.

Bản ghi hình có âm thanh, trên mọi trình duyệt

Bản ghi hình các phiên giờ đây thu âm thanh ổn định trên cả bảy trình duyệt, nên một bài kiểm thử media hay WebRTC thất bại không còn là một đoạn video câm. Nếu bạn không muốn có âm thanh, chỉ cần một capability để tắt.

Được xây dựng cho vận hành

Endpoint Prometheus /metrics, các health probe trả lời yêu cầu HEAD, mã 429 đúng chuẩn khi hàng đợi đầy, tải tệp lên hoạt động trên mọi image, image phát hành được ký số kèm bảng kê thành phần phần mềm (SBOM), và một chính sách bảo mật nói rõ ý nghĩa của Docker socket.

Giao diện được xây dựng lại

WebSummoner UI, giao diện xem trực tiếp grid của bạn với màn hình trình duyệt, nhật ký và hàng đợi, đã được xây dựng lại từ đầu: giao diện tối được chăm chút, logo trình duyệt chính thức, thống kê phiên và hàng đợi theo thời gian thực, và báo cáo kết nối trung thực. Các dòng lệnh và tệp Compose hiện có không cần thay đổi.

Bộ công cụ hiện đại

Go 1.27, Java 25 cho bộ kiểm thử, React 19 cho giao diện, Ubuntu 26.04 cho các image trình duyệt, cập nhật phụ thuộc và kiểm tra lỗ hổng trong CI, cùng một trang tài liệu có thể tìm kiếm. Build bất kỳ phần nào của dự án chỉ cần Docker, không gì khác. Bộ cân bằng tải cho các cụm nhiều hub và trình cài đặt một lệnh cũng được nâng cấp cùng với hub.

Nếu bạn đang lựa chọn ngay hôm nay

Không có giải pháp thay thế hoàn hảo cho những gì Selenoid đã làm, nhưng có những lựa chọn phù hợp thực sự.

Selenium Grid Bản triển khai tham chiếu. Lựa chọn đúng nếu bạn cần chế độ phân tán của nó và không ngại mức tiêu thụ tài nguyên của Java.

Moon Lựa chọn nếu bạn chạy trên Kubernetes và chấp nhận giấy phép thương mại khi vượt quá bốn phiên song song.

WebSummoner Dành cho máy chủ Docker và máy ảo, khi bạn cần một hub nhỏ gọn, nhanh và đầy đủ tính năng sẵn có.

Tài liệu có một bảng so sánh được đối chiếu với mã nguồn với Selenoid, Moon, Selenium Grid, Selenide, Playwright và Puppeteer, bao gồm cả những trường hợp nên chọn chúng.

Di chuyển từ Selenoid

Trỏ các ứng dụng khách của bạn đến hub mới. selenoid:options, các header X-Selenoid-*, đường dẫn /aerokube/..., lệnh cm selenoid start và cờ --selenoid-uri của giao diện đều vẫn hoạt động, và sẽ tiếp tục hoạt động.

Thay đổi duy nhất: bên trong image Docker, cấu hình đã chuyển từ /etc/selenoid sang /etc/websummoner. Cập nhật điểm gắn kết đó là xong.

Những gì chúng tôi cam kết

  • Tương thích, vĩnh viễn. Tên capability, header, đường dẫn và lệnh của Selenoid được chấp nhận lâu dài, không bị đánh dấu lỗi thời kèm hạn chót. Một cuộc di chuyển tốn cả một sprint thì chẳng ai thực hiện.
  • Trình duyệt mới nhất. Các image theo sát bản phát hành ổn định của từng nhà cung cấp, mỗi image đi kèm driver tương ứng, và không image nào được gắn tag trước khi vượt qua bộ kiểm thử.
  • Bảo mật luôn được cập nhật. Các phụ thuộc được cập nhật hằng tuần, mỗi bản build đều chạy kiểm tra lỗ hổng, và image hub được ký số, kèm bảng kê thành phần phần mềm.
  • Production là trên hết. Chính chúng tôi vận hành WebSummoner. Những gì được phát hành là những gì chúng tôi phụ thuộc vào.
  • Tài liệu nói rõ điều gì không hoạt động. Ghi chú đầy đủ, bao gồm cả các hạn chế, có trong bài thông báo.

WebSummoner đặt mục tiêu cạnh tranh với những grid lớn nhất trên đúng sân chơi mà nó chiến thắng: tốc độ, sự đơn giản và chi phí vận hành. Mọi thay đổi đều được đo theo tiêu chuẩn đó.

Đã có sẵn ngay hôm nay

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

Trỏ các bài kiểm thử của bạn đến http://localhost:4444/wd/hub. Ghi chú phát hành đầy đủ, hướng dẫn di chuyển và nơi thảo luận đều chỉ cách bạn một cú nhấp chuột:

📣 Thông báo 1.0.0 Ghi chú phát hành đầy đủ và nơi đặt câu hỏi 📖 Tài liệu Hướng dẫn, tài liệu tham khảo và hướng dẫn di chuyển 💻 Mã nguồn Apache-2.0, trên GitHub

Nếu bạn từng chạy Selenoid và có điều gì đó trong quá trình di chuyển không hoạt động như mong đợi, với chúng tôi đó là một lỗi, không phải câu hỏi hỗ trợ. Nếu bạn từng bảo trì một sản phẩm xây dựng trên Selenoid, hãy cho chúng tôi biết, chúng tôi sẽ bảo đảm nó tiếp tục hoạt động.

Triệu hồi cả một đội trình duyệt vào các container Docker.

Một Selenium hub nhanh với các môi trường tạm thời, gắn với từng phiên.

Bạn cần hỗ trợ triển khai WebSummoner trong tổ chức của mình?

Liên hệ với chúng tôi

WebSummoner được RIADVICE phát triển và bảo trì theo giấy phép Apache-2.0. Dự án được xây dựng dựa trên Selenoid của Aerokube và Ivan Krutov, cùng giao diện gốc của Kirill Merkushev.

Chia sẻ bài viết này