设置您自己的 Grid 3
要使用 Selenium Grid,您需要维护自己的节点基础设施。由于这可能是一项繁琐且耗时的工作,许多组织使用 IaaS 提供商(如 Amazon EC2 和 Google Compute)来提供此基础设施。
其他选项包括使用 Sauce Labs 或 Testing Bot 等提供商,它们在云中提供 Selenium Grid 即服务。当然,也可以在您自己的硬件上运行节点。本章将详细介绍运行您自己的 grid 以及其自己的节点基础设施的选项。
快速开始
此示例将向您展示如何启动 Selenium 2 Grid Hub,并注册 WebDriver 节点和 Selenium 1 RC 遗留节点。我们还将向您展示如何从 Java 调用 grid。此处显示的 hub 和节点在同一台机器上运行,但您当然可以将 selenium-server-standalone 复制到多台机器。
selenium-server-standalone
包包括运行 Grid 所需的 hub、WebDriver 和遗留 RC,不再需要 ant。您可以从 https://seleniumcn.cn/downloads/ 下载 selenium-server-standalone.jar
。
步骤 1:启动 Hub
Hub 是接收测试请求并将其分发到正确节点的中心点。分发是基于 capabilities 进行的,这意味着需要一组 capabilities 的测试只会分发到提供该组或子集 capabilities 的节点。
由于测试的期望 capabilities 正如其名称所暗示的那样,是 期望的,因此 hub 不能保证它会找到完全匹配请求的期望 capabilities 集的节点。
打开命令提示符,导航到您复制 selenium-server-standalone.jar
文件的目录。通过将 -role hub
标志传递给独立服务器来启动 hub
java -jar selenium-server-standalone.jar -role hub
Hub 默认监听端口 4444。您可以通过打开浏览器窗口并导航到 http://localhost:4444/grid/console 来查看 hub 的状态。
要更改默认端口,您可以添加可选的 -port
标志,其中包含一个表示要监听的端口的整数(当您运行命令时)。此外,您在 JSON 配置文件中看到的所有其他选项(如下所示)都是可能的命令行标志。
您当然可以使用上面显示的简单命令来完成,但如果您需要更高级的配置,为了方便起见,您还可以指定一个 JSON 格式的配置文件,以便在启动 hub 时进行配置。您可以这样做
java -jar selenium-server-standalone.jar -role hub -hubConfig hubConfig.json -debug
下面您将看到一个 hubConfig.json
文件的示例。我们将在步骤 2 中详细介绍如何提供节点配置文件。
{
"_comment" : "Configuration for Hub - hubConfig.json",
"host": ip,
"maxSession": 5,
"port": 4444,
"cleanupCycle": 5000,
"timeout": 300000,
"newSessionWaitTimeout": -1,
"servlets": [],
"prioritizer": null,
"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent": true,
"nodePolling": 180000,
"platform": "WINDOWS"}
步骤 2:启动节点
无论您是想运行具有新 WebDriver 功能的 grid,还是具有 Selenium 1 RC 功能的 grid,还是同时运行两者,您都使用相同的 selenium-server-standalone.jar
文件来启动节点
java -jar selenium-server-standalone.jar -role node -hub http://localhost:4444
如果没有通过 -port
标志指定端口,则将选择一个空闲端口。您可以在一台机器上运行多个节点,但如果您这样做,您需要注意系统的内存资源以及测试截图时出现的问题。
使用选项配置节点
如上所述,为了向后兼容,“wd” 和 “rc” 角色仍然是 “node” 角色的有效子集。但是这些角色将远程连接的类型限制为它们对应的 API,而 “node” 允许 RC 和 WebDriver 远程连接。
在命令行上同时传递 JVM 属性(在 -jar 参数之前使用 -D
标志),这些属性将被拾取并传播到节点
-Dwebdriver.chrome.driver=chromedriver.exe
使用 JSON 配置节点
您还可以启动使用 JSON 配置文件配置的 grid 节点
java -Dwebdriver.chrome.driver=chromedriver.exe -jar selenium-server-standalone.jar -role node -nodeConfig node1Config.json
这是一个 nodeConfig.json
文件的示例
{
"capabilities": [
{
"browserName": "firefox",
"acceptSslCerts": true,
"javascriptEnabled": true,
"takesScreenshot": false,
"firefox_profile": "",
"browser-version": "27",
"platform": "WINDOWS",
"maxInstances": 5,
"firefox_binary": "",
"cleanSession": true
},
{
"browserName": "chrome",
"maxInstances": 5,
"platform": "WINDOWS",
"webdriver.chrome.driver": "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"
},
{
"browserName": "internet explorer",
"maxInstances": 1,
"platform": "WINDOWS",
"webdriver.ie.driver": "C:/Program Files (x86)/Internet Explorer/iexplore.exe"
}
],
"configuration": {
"_comment" : "Configuration for Node",
"cleanUpCycle": 2000,
"timeout": 30000,
"proxy": "org.openqa.grid.selenium.proxy.WebDriverRemoteProxy",
"port": 5555,
"host": ip,
"register": true,
"hubPort": 4444,
"maxSession": 5
}
}
关于 -host
标志的说明
对于 hub 和节点,如果未指定 -host
标志,则默认情况下将使用 0.0.0.0
。这将绑定到机器的所有公共(非环回)IPv4 接口。如果您有特殊的网络配置或任何创建额外网络接口的组件,建议使用允许从不同机器访问 hub/节点的 -host
标志设置一个值。
指定端口
hub 使用的默认 TCP/IP 端口是 4444。如果需要更改端口,请使用上面提到的配置。
故障排除
使用日志文件
对于高级故障排除,您可以指定一个日志文件来记录系统消息。使用 -log 参数启动 Selenium GRID hub 或节点。请参见以下示例
java -jar selenium-server-standalone.jar -role hub -log log.txt
如果您遇到问题,请使用您喜欢的文本编辑器打开日志文件(上例中的 log.txt)以查找“ERROR”日志。
使用 -debug
参数
您还可以使用 -debug
参数将调试日志打印到控制台。使用 -debug
参数启动 Selenium Grid Hub 或节点。请参见以下示例
java -jar selenium-server-standalone.jar -role hub -debug
警告
必须使用适当的防火墙权限保护 Selenium Grid 免受外部访问。
未能保护您的 Grid 可能会导致以下一个或多个情况发生
- 您为您的 Grid 基础设施提供开放访问权限
- 您允许第三方访问内部 Web 应用程序和文件
- 您允许第三方运行自定义二进制文件
请参阅 Detectify 上的这篇博客文章,该文章很好地概述了如何滥用公开暴露的 Grid:不要让您的 Grid 大开方便之门。
Docker Selenium
Docker 提供了一种方便的方式来在称为容器的单元中配置和扩展 Selenium Grid 基础设施。容器是软件的标准化单元,其中包含以可靠且可重复的方式在不同机器上运行所需应用程序所需的一切,包括所有依赖项。
Selenium 项目维护一组 Docker 镜像,您可以下载并运行这些镜像以快速启动并运行可用的 grid。节点可用于 Firefox 和 Chrome。有关如何配置 grid 的完整详细信息可以在 Docker Selenium 存储库中找到。
先决条件
运行 Grid 的唯一要求是安装并运行 Docker。 安装 Docker。