Selenium Grid (實驗性功能)
簡介
Playwright 可以連接到 Selenium Grid Hub,後者運行 Selenium 4 以啟動 Google Chrome 或 Microsoft Edge 瀏覽器,而不是在本機電腦上運行瀏覽器。請注意,此功能是實驗性功能,因此會相應地安排優先順序。
Playwright 與 Selenium Grid Hub 的整合在未來可能會中斷,存在風險。使用前請務必權衡風險與收益。
更多詳細資訊
在內部,Playwright 使用 Chrome DevTools Protocol websocket 連接到瀏覽器。Selenium 4 目前公開了此功能。然而,未來情況可能並非如此。如果 Selenium 放棄此功能,Playwright 將停止與其協同工作。
在將 Playwright 連接到您的 Selenium Grid 之前,請確保 grid 可以與 Selenium WebDriver 協同工作。例如,運行 其中一個範例,並傳遞 SELENIUM_REMOTE_URL
環境變數。如果 webdriver 範例無法運作,請在您的 Selenium hub/node/standalone 輸出中尋找任何錯誤,並在 Selenium issues 中搜尋可能的解決方案。
啟動 Selenium Grid
如果您運行分散式 Selenium Grid,Playwright 需要將 selenium 節點註冊到可訪問的地址,以便它可以連接到瀏覽器。為了確保它能如預期般運作,在運行 selenium 節點時,請設定指向 hub 的 SE_NODE_GRID_URL
環境變數。
# Start selenium node
SE_NODE_GRID_URL="http://<selenium-hub-ip>:4444" java -jar selenium-server-<version>.jar node
將 Playwright 連接到 Selenium Grid
要將 Playwright 連接到 Selenium Grid 4,請設定指向您的 Selenium Grid Hub 的 SELENIUM_REMOTE_URL
環境變數。請注意,這僅適用於 Google Chrome 和 Microsoft Edge。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 npx playwright test
您無需變更程式碼,只需像往常一樣使用您的測試工具或 browserType.launch()。
傳遞額外功能
如果您的 grid 需要設定額外功能(例如,您使用外部服務),您可以設定 SELENIUM_REMOTE_CAPABILITIES
環境變數以提供 JSON 序列化的功能。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_CAPABILITIES="{'mygrid:options':{os:'windows',username:'John',password:'secure'}}" npx playwright test
傳遞額外標頭
如果您的 grid 需要設定額外標頭(例如,您應該提供授權令牌以在您的雲端中使用瀏覽器),您可以設定 SELENIUM_REMOTE_HEADERS
環境變數以提供 JSON 序列化的標頭。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_HEADERS="{'Authorization':'Basic b64enc'}" npx playwright test
詳細日誌
使用 DEBUG=pw:browser*
環境變數運行,以查看 Playwright 如何連接到 Selenium Grid。
DEBUG=pw:browser* SELENIUM_REMOTE_URL=http://internal.grid:4444 npx playwright test
如果您提交問題,請包含此日誌。
使用 Selenium Docker
使用 Selenium Grid 的一種簡單方法是運行官方 docker 容器。在 selenium docker images 文件中閱讀更多資訊。有關映像標記約定,請閱讀更多資訊。
獨立模式
這是一個運行 selenium 獨立模式並將 Playwright 連接到它的範例。請注意,hub 和 node 位於相同的 localhost 上,並且我們傳遞指向它的 SE_NODE_GRID_URL
環境變數。
首先啟動 Selenium。
docker run -d -p 4444:4444 --shm-size="2g" -e SE_NODE_GRID_URL="https://127.0.0.1:4444" selenium/standalone-chromium:latest
然後運行 Playwright。
SELENIUM_REMOTE_URL=https://127.0.0.1:4444 npx playwright test
Hub 和節點模式
這是一個運行 selenium hub 和單個 selenium 節點,並將 Playwright 連接到 hub 的範例。請注意,hub 和 node 具有不同的 IP,並且在啟動節點容器時,我們傳遞指向 hub 的 SE_NODE_GRID_URL
環境變數。
首先啟動 hub 容器和一個或多個節點容器。
docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:4.25.0
docker run -d -p 5555:5555 \
--shm-size="2g" \
-e SE_EVENT_BUS_HOST=<selenium-hub-ip> \
-e SE_EVENT_BUS_PUBLISH_PORT=4442 \
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
-e SE_NODE_GRID_URL="http://<selenium-hub-ip>:4444"
selenium/node-chromium:4.25.0
然後運行 Playwright。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 npx playwright test
Selenium 3
在內部,Playwright 使用 Chrome DevTools Protocol websocket 連接到瀏覽器。Selenium 4 公開了此功能,而 Selenium 3 則沒有。
這表示 Selenium 3 以盡力而為的方式受到支援,其中 Playwright 嘗試直接連接到 grid 節點。Grid 節點必須可從運行 Playwright 的電腦直接訪問。