Selenium Grid (实验性功能)
简介
Playwright可以连接到运行Selenium 4的Selenium Grid Hub来启动Google Chrome或Microsoft Edge浏览器,而不是在本地机器上运行浏览器。请注意此功能目前处于实验性阶段,并会相应调整优先级。
Playwright与Selenium Grid Hub的集成存在未来失效的风险。在使用前请务必权衡风险与收益。 在内部实现上,Playwright通过Chrome DevTools Protocol的websocket连接浏览器。Selenium 4目前开放了这项能力。但这种情况未来可能发生变化。如果Selenium移除此功能,Playwright将无法继续与其兼容。更多详情
在将Playwright连接到您的Selenium 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()即可。
传递额外功能
如果您的网格需要设置额外的功能(例如,您使用外部服务),可以设置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
传递额外请求头
如果您的网格需要设置额外的请求头(例如,您需要提供授权令牌以使用云中的浏览器),可以通过设置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镜像文档。关于镜像标签约定,了解更多。
独立模式
这是一个运行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 npx playwright test
中心节点与工作节点模式
以下是运行Selenium Hub和单个Selenium节点,并将Playwright连接到Hub的示例。请注意,Hub和节点具有不同的IP地址,我们在启动节点容器时传递指向Hub的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 npx playwright test
Selenium 3
在内部,Playwright 通过Chrome DevTools Protocol websocket连接到浏览器。Selenium 4 提供了这一功能,而 Selenium 3 则没有。
这意味着Selenium 3以尽力而为的方式获得支持,Playwright会尝试直接连接到网格节点。运行Playwright的机器必须能够直接访问这些网格节点。