Grid
Grid 允许我们在多台远程计算机上进行跨平台、跨浏览器、并行测试。
准备
Grid 以 jar 包的形式提供,可以在 Selenium 下载页下载最新版本。
下载将得到一个名为 selenium-server-x.x.x.jar
的 jar 包。
按角色运行
Grid 包括很多组件:
- Router(路由)
- Session Queue(会话队列)
- Session Map(会话表)
- Distributor(分发器)
- Event Bus(事件总线)
- Nodes(节点)
我们可以独立启动任一组件,但是通常会启动一组组件,使 Grid 工作在相应模式下。
Standalone
独立模式,Grid 最简单的模式,会启动所有组件,使当前主机成为一台可独立执行测试的远程计算机。
命令行直接执行 Java 命令即可启动:
1 | java -jar selenium-server-<version>.jar standalone |
当看到输出信息“Started Selenium Standalone…”即说明启动成功。
默认情况下,将监听 4444
端口,通过该端口即可远程调用。
【关于驱动探测】
启动时可能会看到“No drivers have been configured or have been found on PATH”错误。
这是因为 Selenium 必须通过驱动才可操作浏览器,所以驱动需要事先配置。
按错误提示,驱动放在
PATH
下可自动探测到。另试验可知,放在selenium-server-x.x.x.jar
同一文件夹下也可被探测到。【关于浏览器】
探测到驱动程序后,就会自动添加驱动对应的浏览器。
如果只有 chromedriver,通常添加 Chrome 的同时,也会添加 MicrosoftEdge。但是,尝试用 chromedriver 驱动 MicrosoftEdge 通常会失败。所以,应严格根据浏览器版本配置驱动。
远程调用脚本如下:
1 | driver_options = webdriver.ChromeOptions() |
Selenium Server 根据设置的 browserName
及 browserVersion
能力属性启动对应的浏览器,browserName
是必须的,browserVersion
可选。如果没有能力匹配的浏览器,则会报错。
【关于能力属性】
对于 Standalone 模式服务而言,指定
browserName
一般就足够了——通常一台服务器上某种浏览器只有一个版本。而且,通常也不需要通过
options.set_capability()
来设置,创建不同类型的Options
时,会“内置”对应的browserName
。
Hub & Nodes
经典的“集线器 + 节点”模式。可以在不同远程主机上分别部署集线器和多个节点。适合中小型规模测试。
1 | # 启动集线器 |
hub 角色会启动除 Nodes 外所有组件,而相反,node 角色只启动 Nodes 组件。
RemoteDriver
连接集线器服务即可。
分布式
大型分布式部署,各个组件分别单独启动,适合大型测试。
由于组件之间的依赖关系,需要按一定的顺序启动各组件。
1 | # 启动 Event Bus(事件总线) |
注意,RemoteDriver
连接的是路由服务。
参考
Selenium 文档 - 服务网格的组件:介绍各种 Selenium Server 组件的概念
Selenium 文档 - 分布式部署:介绍 Selenium Server 分布部署步骤