Selenium Grid(实验性)
简介
Playwright 可以连接运行 Selenium 4 的 Selenium Grid Hub,以启动 Google Chrome 或 Microsoft Edge 浏览器,而不是在本地计算机上运行浏览器。请注意,此功能为 实验性 功能,优先级相应较低。
未来 Playwright 与 Selenium Grid Hub 的集成可能存在中断风险。在使用之前,请务必权衡风险与收益。 在内部,Playwright 使用 Chrome DevTools 协议 WebSocket 连接到浏览器。Selenium 4 当前公开了此功能。但是,未来可能并非如此。如果 Selenium 取消此功能,Playwright 将无法与之配合使用。更多详细信息
在将 Playwright 连接到 Selenium Grid 之前,请确保该网格可与 Selenium WebDriver 配合使用。例如,运行 其中一个示例 并传递 SELENIUM_REMOTE_URL
环境变量。如果 WebDriver 示例无法运行,请在 Selenium 中心/节点/独立输出中查找任何错误,并在 Selenium 问题 中搜索可能的解决方案。
启动 Selenium Grid
如果运行分布式 Selenium Grid,Playwright 要求 Selenium 节点使用可访问地址进行注册,以便它可以连接到浏览器。为确保其按预期工作,在运行 Selenium 节点时设置指向中心的 SE_NODE_GRID_URL
环境变量。
# 启动 Selenium 节点
SE_NODE_GRID_URL="http://<selenium-hub-ip>:4444" java -jar selenium-server-<version>.jar node
将 Playwright 连接到 Selenium Grid
要将 Playwright 连接到 Selenium Grid 4,设置 SELENIUM_REMOTE_URL
环境变量,使其指向你的 Selenium Grid 中心节点。请注意,这仅适用于 Google Chrome 和 Microsoft Edge。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 mvn test
你无需更改代码,只需像往常一样使用测试框架或 BrowserType.launch()。
传递其他配置参数
如果你的网格需要设置其他配置参数(例如,你使用外部服务),可以设置 SELENIUM_REMOTE_CAPABILITIES
环境变量,以提供 JSON 序列化的配置参数。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_CAPABILITIES="{'mygrid:options':{os:'windows',username:'John',password:'secure'}}" mvn test
传递其他请求头
如果你的网格需要设置其他请求头(例如,你需要提供授权令牌才能在云端使用浏览器),可以设置 SELENIUM_REMOTE_HEADERS
环境变量,以提供 JSON 序列化的请求头。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_HEADERS="{'Authorization':'Basic b64enc'}" mvn test
详细日志
使用 DEBUG=pw:browser*
环境变量运行,以查看 Playwright 如何连接到 Selenium Grid。
DEBUG=pw:browser* SELENIUM_REMOTE_URL=http://internal.grid:4444 mvn 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="http://localhost:4444" selenium/standalone-chromium:latest
然后运行 Playwright。
SELENIUM_REMOTE_URL=http://localhost:4444 mvn test
中心节点和节点模式
以下是运行 Selenium 中心节点和单个 Selenium 节点,并将 Playwright 连接到中心节点的示例。请注意,中心节点和节点具有不同的 IP,并且在启动节点容器时,我们传递指向中心节点的 SE_NODE_GRID_URL
环境变量。
首先启动中心节点容器和一个或多个节点容器。
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 mvn test
Selenium 3
在内部,Playwright 使用 Chrome DevTools 协议 WebSocket 连接到浏览器。Selenium 4 公开了此功能,而 Selenium 3 没有。
这意味着对 Selenium 3 的支持是尽力而为的,Playwright 会尝试直接连接到网格节点。网格节点必须可以从运行 Playwright 的机器直接访问。