Selenium Grid
Playwright 可以连接到运行 Selenium 4 的 Selenium Grid Hub 以启动 Google Chrome 或 Microsoft Edge 浏览器,而不是在本地计算机上运行浏览器。
在将 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 环境变量。
# 启动 selenium 节点
SE_NODE_GRID_URL="http://<selenium-hub-ip>:4444/wd/hub" 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/wd/hub npx playwright test
您不必更改代码,只需像往常一样使用您的测试工具或 browserType.launch([options])。
使用 Selenium Grid Hub 时,您可以 跳过浏览器下载。
传递附加功能
如果您的 grid 需要设置附加功能(例如,您使用外部服务),您可以设置 SELENIUM_REMOTE_CAPABILITIES 环境变量以提供 JSON 序列化的功能。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444/wd/hub SELENIUM_REMOTE_CAPABILITIES="{'mygrid:options':{os:'windows',username:'John',password:'secure'}}" npx playwright test
详细日志
使用 DEBUG=pw:browser* 环境变量运行以查看 Playwright 如何连接到 Selenium Grid。
DEBUG=pw:browser* SELENIUM_REMOTE_URL=http://internal.grid:4444/wd/hub npx playwright test
如果您提交问题,请包含此日志。
使用 Selenium Docker
使用 Selenium Grid 的一种简单方法是运行官方 docker 容器。在 selenium docker images 文档中阅读更多信息。对于实验性 arm 镜像,请参阅 docker-seleniarm。
独立模式
这是运行 selenium standalone 并将 Playwright 连接到它的示例。请注意,hub 和节点在同一个 localhost 上,我们传递指向它的 SE_NODE_GRID_URL 环境变量。
首先启动 Selenium。
docker run -d -p 4444:4444 --shm-size="2g" -e SE_NODE_GRID_URL="http://localhost:4444/wd/hub" selenium/standalone-chrome:4.3.0-20220726
# 或者对于 arm 架构
docker run -d -p 4444:4444 --shm-size="2g" -e SE_NODE_GRID_URL="http://localhost:4444/wd/hub" seleniarm/standalone-chromium:103.0
然后运行 Playwright。
SELENIUM_REMOTE_URL=http://localhost:4444/wd/hub npx playwright test
Hub 和节点模式
这是运行 selenium hub 和单个 selenium 节点,并将 Playwright 连接到 hub 的示例。请注意,hub 和节点具有不同的 IP,并且我们在启动节点容器时传递指向 hub 的 SE_NODE_GRID_URL 环境变量。
首先启动 hub 容器和一个或多个节点容器。
docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:4.3.0-20220726
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/wd/hub"
selenium/node-chrome:4.3.0-20220726
# 或者对于 arm 架构
docker run -d -p 4442-4444:4442-4444 --name selenium-hub seleniarm/hub:4.3.0-20220728
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/wd/hub"
seleniarm/node-chromium:103.0
然后运行 Playwright。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444/wd/hub npx playwright test
Selenium 3
在内部,Playwright 使用 Chrome DevTools Protocol websocket 连接到浏览器。Selenium 4 公开了此功能,而 Selenium 3 则没有。
这意味着 Selenium 3 仅以尽力而为的方式受支持,其中 Playwright 尝试直接连接到 grid 节点。Grid 节点必须可以从运行 Playwright 的机器直接访问。