Playwright 如何连接 Selenium Grid 4 在远程节点上启动 Chrome/Edge 测试?
2026/9/9 21:45:29 网站建设 项目流程

Playwright 如何连接 Selenium Grid 4 在远程节点上启动 Chrome/Edge 测试?

【免费下载链接】playwrightPlaywright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.项目地址: https://gitcode.com/GitHub_Trending/pl/playwright

如果你有现成的 Selenium Grid 集群,希望 Playwright 的测试不在本机启动浏览器,而是由远程 Grid 节点上的 Google Chrome 或 Microsoft Edge 执行,可以设置SELENIUM_REMOTE_URL环境变量让 Playwright 直连 Grid Hub。这是 Playwright 文档中明确支持的集成方式,但属于experimental功能,且只适用于运行 Selenium 4 的 Grid,只支持 Chrome/Edge(内部通过 Chrome DevTools Protocol websocket 连接浏览器,Selenium 4 才暴露这一能力,Selenium 后续若移除该能力,此集成会停止工作)。

前提条件与限制

开始之前,先确认以下几条来自 Selenium Grid 文档的边界:

  • Playwright 只连接运行Selenium 4的 Grid Hub,目标浏览器仅限 Google Chrome 或 Microsoft Edge;
  • 分布式 Grid 中,每个 node 必须以可被 Playwright 所在机器访问的地址注册到 hub,否则 Playwright 拿到 session 后无法连到节点上的浏览器。启动 node 时应设置SE_NODE_GRID_URL指向 hub:
# Start selenium node SE_NODE_GRID_URL="http://<selenium-hub-ip>:4444" java -jar selenium-server-<version>.jar node

其中<selenium-hub-ip>替换为你的 hub 地址,<version>为 selenium-server jar 的版本号。

  • 在连接 Playwright 之前,先用 Selenium WebDriver 验证 Grid 本身可用:运行 Selenium WebDriver 的任一示例并传入SELENIUM_REMOTE_URL环境变量。如果 webdriver 示例跑不通,先检查 hub/node/standalone 的输出日志,而不是从 Playwright 侧排查。

启动 Selenium Grid(可选:用官方 Docker 镜像)

如果你还没有 Grid,文档给出的最短路径是运行 Selenium 官方 docker 容器(镜像说明见文档中链接的 docker-selenium 文档)。

Standalone 模式:hub 和 node 在同一个localhost上,通过SE_NODE_GRID_URL指向自身:

docker run -d -p 4444:4444 --shm-size="2g" -e SE_NODE_GRID_URL="http://localhost:4444" selenium/standalone-chromium:latest

Hub + nodes 模式:hub 与 node 在不同 IP 上,启动 node 容器时通过SE_EVENT_BUS_HOSTSE_EVENT_BUS_PUBLISH_PORTSE_EVENT_BUS_SUBSCRIBE_PORTSE_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

<selenium-hub-ip>替换为 hub 容器的实际 IP。

连接 Playwright 到 Selenium Grid 4

核心操作只有一个:设置SELENIUM_REMOTE_URL指向你的 Grid Hub,然后像平时一样跑测试。不需要修改测试代码,照常用测试框架或method: BrowserType.launch即可。各语言入口如下:

SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 npx playwright test
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 pytest --browser chromium
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 mvn test
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 dotnet test

针对前面两种 Docker 部署,对应的命令是SELENIUM_REMOTE_URL=http://localhost:4444(standalone)或SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444(hub + nodes)。

要启动 Microsoft Edge:在代码里用channel指定 Edge,例如 Python 中browser = p.chromium.launch(channel="msedge"),JavaScript 中use: { channel: 'msedge' }(见 browsers.md)。内部实现会据此把请求的browserName设为MicrosoftEdge,否则为chrome,逻辑见 chromium.ts。

网格要求额外 capabilities 或 headers 时

如果 Grid 来自外部云服务、需要在请求中携带额外参数或授权信息,可以用两个环境变量传递 JSON 序列化的值:

SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_CAPABILITIES="{'mygrid:options':{os:'windows',username:'John',password:'secure'}}" npx playwright test

SELENIUM_REMOTE_CAPABILITIES中的键值会合并进 Playwright 发送的 capabilities;需要额外 HTTP 头时(例如授权 token)则用SELENIUM_REMOTE_HEADERS

SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_HEADERS="{'Authorization':'Basic b64enc'}" npx playwright test

以上均为文档示例,osusernamepassword和 token 值按你的网格实际要求替换。Python、Java、C# 的用法同理,只是执行命令分别为pytest --browser chromiummvn testdotnet test

验证连接与排查问题

设置DEBUG=pw:browser*运行,可以看到 Playwright 连接 Selenium Grid 的详细过程:

DEBUG=pw:browser* SELENIUM_REMOTE_URL=http://internal.grid:4444 npx playwright test

从 实现代码可以看到这条 debug 日志依次输出:<selenium> connecting to <hubUrl>(向 hub 的session接口发起 POST)、<selenium> connected to sessionId=...(拿到 session)、<selenium> using selenium v4以及<selenium> retrieved endpoint ... for sessionId=...(Selenium 4 走se:cdp提供的 CDP websocket 代理)。能看到 endpoint 成功获取,说明 Playwright 已接到节点浏览器上;向 hub 提交的是capabilities.alwaysMatch,其中包含--remote-debugging-port=0启动参数。仓库中的集成测试 browsertype-launch-selenium.spec.ts 覆盖了对 Selenium 4.8.3 的 standalone 与 hub + node 两种形态的连接验证。

排查时按文档给出的顺序:

  1. webdriver 示例都跑不通:问题在 Grid 本身。查看 hub/node/standalone 输出并对照 Selenium 项目的 issue 库解决。
  2. webdriver 可用但 Playwright 连接失败:用DEBUG=pw:browser*定位卡在哪一步;提交 issue 时附上该日志。仓库测试中还展示了驱动损坏时的报错形态(示例):Error connecting to Selenium at http://127.0.0.1:<port>/session: Could not start a new session,此时 Grid 侧不会出现Starting ChromeDriver,说明 session 根本没创建成功。
  3. 误用了非 Chromium 浏览器:设置SELENIUM_REMOTE_URL后连接只支持 Chromium 通道(承载 Chrome/Edge),用其他浏览器会报Connecting to SELENIUM_REMOTE_URL is only supported by Chromium

不支持 Selenium 3 的说明

Selenium 3 不暴露 CDP websocket,Playwright 对它是best-effort支持:尝试直连 Grid 节点,前提是节点必须能被运行 Playwright 的机器直接访问。如果你的 Grid 无法升级到 Selenium 4,远程节点的可达性是唯一能自行保证的条件。

完整的参数与示例见 docs/src/selenium-grid.md。

【免费下载链接】playwrightPlaywright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.项目地址: https://gitcode.com/GitHub_Trending/pl/playwright

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询