ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

Playwright 如何连接 Selenium Grid 4 在远程节点上启动 Chrome/Edge 测试? 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_URLhttp://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-size2g -e SE_NODE_GRID_URLhttp://localhost:4444 selenium/standalone-chromium:latestHub nodes 模式hub 与 node 在不同 IP 上启动 node 容器时通过SE_EVENT_BUS_HOST、SE_EVENT_BUS_PUBLISH_PORT、SE_EVENT_BUS_SUBSCRIBE_PORT和SE_NODE_GRID_URL指向 hubdocker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:4.25.0 docker run -d -p 5555:5555 \ --shm-size2g \ -e SE_EVENT_BUS_HOSTselenium-hub-ip \ -e SE_EVENT_BUS_PUBLISH_PORT4442 \ -e SE_EVENT_BUS_SUBSCRIBE_PORT4443 \ -e SE_NODE_GRID_URLhttp://selenium-hub-ip:4444 \ selenium/node-chromium:4.25.0selenium-hub-ip替换为 hub 容器的实际 IP。连接 Playwright 到 Selenium Grid 4核心操作只有一个设置SELENIUM_REMOTE_URL指向你的 Grid Hub然后像平时一样跑测试。不需要修改测试代码照常用测试框架或method: BrowserType.launch即可。各语言入口如下SELENIUM_REMOTE_URLhttp://selenium-hub-ip:4444 npx playwright testSELENIUM_REMOTE_URLhttp://selenium-hub-ip:4444 pytest --browser chromiumSELENIUM_REMOTE_URLhttp://selenium-hub-ip:4444 mvn testSELENIUM_REMOTE_URLhttp://selenium-hub-ip:4444 dotnet test针对前面两种 Docker 部署对应的命令是SELENIUM_REMOTE_URLhttp://localhost:4444standalone或SELENIUM_REMOTE_URLhttp://selenium-hub-ip:4444hub nodes。要启动 Microsoft Edge在代码里用channel指定 Edge例如 Python 中browser p.chromium.launch(channelmsedge)JavaScript 中use: { channel: msedge }见 browsers.md。内部实现会据此把请求的browserName设为MicrosoftEdge否则为chrome逻辑见 chromium.ts。网格要求额外 capabilities 或 headers 时如果 Grid 来自外部云服务、需要在请求中携带额外参数或授权信息可以用两个环境变量传递 JSON 序列化的值SELENIUM_REMOTE_URLhttp://selenium-hub-ip:4444 SELENIUM_REMOTE_CAPABILITIES{mygrid:options:{os:windows,username:John,password:secure}} npx playwright testSELENIUM_REMOTE_CAPABILITIES中的键值会合并进 Playwright 发送的 capabilities需要额外 HTTP 头时例如授权 token则用SELENIUM_REMOTE_HEADERSSELENIUM_REMOTE_URLhttp://selenium-hub-ip:4444 SELENIUM_REMOTE_HEADERS{Authorization:Basic b64enc} npx playwright test以上均为文档示例os、username、password和 token 值按你的网格实际要求替换。Python、Java、C# 的用法同理只是执行命令分别为pytest --browser chromium、mvn test、dotnet test。验证连接与排查问题设置DEBUGpw:browser*运行可以看到 Playwright 连接 Selenium Grid 的详细过程DEBUGpw:browser* SELENIUM_REMOTE_URLhttp://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-port0启动参数。仓库中的集成测试 browsertype-launch-selenium.spec.ts 覆盖了对 Selenium 4.8.3 的 standalone 与 hub node 两种形态的连接验证。排查时按文档给出的顺序webdriver 示例都跑不通问题在 Grid 本身。查看 hub/node/standalone 输出并对照 Selenium 项目的 issue 库解决。webdriver 可用但 Playwright 连接失败用DEBUGpw:browser*定位卡在哪一步提交 issue 时附上该日志。仓库测试中还展示了驱动损坏时的报错形态示例Error connecting to Selenium at http://127.0.0.1:port/session: Could not start a new session此时 Grid 侧不会出现Starting ChromeDriver说明 session 根本没创建成功。误用了非 Chromium 浏览器设置SELENIUM_REMOTE_URL后连接只支持 Chromium 通道承载 Chrome/Edge用其他浏览器会报Connecting to SELENIUM_REMOTE_URL is only supported by Chromium。不支持 Selenium 3 的说明Selenium 3 不暴露 CDP websocketPlaywright 对它是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),仅供参考
返回列表