Selenium 4.0beta: Grid 工作原理
Selenium 4.0 beta版已经发布,那么距离正式版已经不远了,在Selenium 4.0中变化比较大的就是Grid了,本文翻译了官方文档,重点介绍Grid 4的工作原理
Selenium Grid3工作原理

Hub
- 中介和管理
- 接受运行测试的请求
- 从客户端获取指令并在节点上远程执行它们
- 管理线程
Hub是发送所有测试的中心点。每个selenium Grid恰好由一个Hub组成。Hub需要能够从各自的客户端(即CI服务器、开发人员机器等)访问。Hub将连接一个或多个Node测试的节点。
Node
- Node和执行的浏览器在同一台主机。
- 将自己注册到Hub上,并保持通信。
- 接收来自Hub的请求并执行他们。
Node是在单个计算机系统上执行测试的不同的Selenium实例。Grid中可以有许多节点。作为Node的机器不需要与Hub或其他Node的平台相同,也不需要具有相同的浏览器选择。Windows上的节点可以提供Internet Explorer作为浏览器选项,而这在Linux或Mac上是不可能的。
selenium Grid4

Router 路由器
路由器负责将请求转发到正确的组件。
他是Grid的入口点,接收所有外部的请求。路由器行为的不同依赖于接受的请求。
如果是一个新的会话请求,路由器会把它发送给New Session Queuer,将其添加到New Session Queue, New Session queuer通过Event Bus触发一个事件。Distributor(处理新的会话创建的位置)将会接收事件并轮询新Session Queue来获得新会话请求。
如果请求属于已存在的会话, 路由器发送session id 到 Session Map, 然后Session Map返回会话运行的Node。此后,路由器发送请求给Node。
Distributor 分配器
Distributor知道所有的Node以及他们的能力。它的主要角色是接收新的 session 请求,找到适合的Node来创建会话。Distributor在Session Map 中存储session id和正在执行会话的Node之间的关系。
Node 节点
一个Node可以在Grid中多次创建。每个Node负责管理运行所在机器的可用浏览器。
Node通过 Event Bus向Distributor注册。它的配置作为注册消息的一部分发送。
默认情况下,Node 自动注册所在主机上所以可以运行的浏览器驱动程序。它还为基于Chromium 的浏览器和 Firefox 的每个可用 CPU 创建一个 slot(插槽?不会翻译)。针对Safari 和 IE 只创建一个slot。通过在特定的配置,它可以在Docker容器中创建会话。你可以看到更多配置描述在后面的使用介绍中。
Node只执行接收到的命令。它不会评估、判断和控制任何事情。Node运行的主机不需要拥有与其他组件相同的操作系统。例如,Windows主机的Node提供IE浏览器选项,而这在Linux或Mac主机上是不可能的。
Session Map 会话映射
Session Map是一个数据存储,保存session id 和运行会话的Node信息。它在向Node转发请求的过程中为Router提供支持。Router将向Session Map请求与 session id相关联的Node。当以完全模式启动Grid,Session Map是第一个被启动的组件。
New Session Queuer 新会话队列者
New Session Queue 新会话队列
New Session Queuer是唯一可以与New Session Queue通信的组件。它处理所有的队列操作,例如,像“add”去操作队列。它提供配置参数设置请求超时和请求重试的间隔。
New Session Queuer通过Router接收新会话请求并将其添加到队列中。Queuer等待直到它收到请求的响应。如果请求超时,请求立刻被拒绝并且不会添加到队列中。
如果请求的功能在任何已注册的Node都不存在,那么请求立刻被拒绝,客户端收到响应。
如果请求的功能与任何Node的slots 匹配,Distributor 将尝试获取可用的slots,如果所有slots都很忙,Distributor 将要求Queuer将请求添加到队列前面。在请求重试间隔后,Distributor再次接受请求。不停的尝试重试,直到请求成功或超时。如果请求在重试可添加到队列前超时,则其被拒绝。
在获得可用的slots和创建会话之后,Distributor通过Event Bus将新会话响应传递给New Session Queuer。New Session Queuer在接收到事件时响应客户端。
Event Bus 事件总线
Event Bus 总线充当Node、Distributor、 New Session Queuer和 Session Map之间的通信路径。Grid通过消息进行大部分的内部通信,避免了昂贵的HTTP调用。
Role In Grid
在Grid3中,组件分Hub和Node, 通过独立模式下运行Grid,可以将他们放在一起运行。同样的概念在Grid4中也是可以的。可以通过将上面描述的一些组件分组来运行Hub,也可以在独立模式下同时运行所有组件。
Hub
Hub 是以下组件的总合:
· Router
· Distributor
· Session Map
· New Session Queuer
· Event Bus
它支持经典的Hub & Node 的设置。
Standalone
如前所述, Standalone是所有组件的总和。在用户看来,它们是作为一个组件执行的。这包括作为Hub的所有组件,以及一个Node。在Standalone启动后,可以使用一个功能齐全的Grid。
不同的模运行Grid
- Standalone
- Hub and Node
- Distributed
- Docker
Standalone Mode
一个新的Selenium Server jar 包含了运行Grid的所有内容。它是运行Selenium Grid的最简单模式。默认情况下,服务监听http://localhost:4444,你可以在程序中调用RemoteWebDriver类访问这个URL进行测试,服务器从系统路径中检测到可用的驱动程序。
- 启动Selenium server:
> java -jar .\selenium-server-4.0.0-beta-1.jar standalone
18:02:39.622 INFO [LogManager$RootLogger.log] - Using the system default encoding
18:02:39.625 INFO [OpenTelemetryTracer.createTracer] - Using OpenTelemetry for tracing
18:02:43.351 INFO [NodeOptions.report] - Adding Chrome for {"browserName": "chrome"} 16 times
18:02:43.352 INFO [NodeOptions.report] - Adding Firefox for {"browserName": "firefox"} 16 times
18:02:43.812 INFO [Node.<init>] - Binding additional locator mechanisms: id, name
18:02:43.826 INFO [LocalDistributor.add] - Added `node` 40291796-b2da-40a8-8b3a-b20a5c80b65d at http://10.2.212.186:4444.
18:02:43.830 INFO [GridModel.setAvailability] - Switching `node` 40291796-b2da-40a8-8b3a-b20a5c80b65d (uri: http://10.2.212.186:4444) from DOWN to UP
18:02:45.583 INFO [Standalone.execute] - Started Selenium Standalone 4.0.0-beta-1 (revision Unknown): http://10.2.212.186:4444
- 运行脚本(python)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import DesiredCapabilities
dr = webdriver.Remote(command_executor='http://127.0.0.1:4444',
desired_capabilities=DesiredCapabilities.CHROME.copy()
)
dr.get("https://www.baidu.com")
dr.find_element(By.ID, "kw").send_keys("selenium grid4")
dr.find_element(By.ID, "su").click()
dr.close()
Hub and Node Mode
- 启动hub
> java -jar .\selenium-server-4.0.0-beta-1.jar hub
- 注册Node
> java -jar .\selenium-server-4.0.0-beta-1.jar node
在 Selenium 4.0 中,我们还添加了GraphQL,这是一种可以轻松查询必要数据并获得完全相同数据的新方法。
- 通过HTTPie查询接口

以下两种模式比较复杂一些,也是Grid4真正区别于Grid3的功能,后续再介绍!
- Distributed Mode 分布式模式
- Start Standalone Grid Via Docker Images 通过Docker镜像启动Grid
Selenium 4.0beta: Grid 工作原理的更多相关文章
- Selenium Grid的原理、配置与使用(转)
Selenium GridSelenium Grid在前面介绍Selenium的时候说过它有三大组件,Selenium Grid就是其中之一而作用就是分布式执行测试.讲分布式之前还是要说说UI自动化的 ...
- Selenium WebDriver的实现及工作原理
笔者最近研究学习了selenium的实现和工作原理,阅读了selenium3.141.59的Java源码,没有读完哈...重点从两个接口(org.openqa.selenium.WebDriver和o ...
- Selenium 实现 Web 自动化的原理 (软件测试52讲学习笔记)
Selenium 1.0 的工作原理 Selenium 1.0,又称Selenium RC ,RC是Remote Control的缩写.Selenium RC利用的原理:JavaScript代码可以方 ...
- selenium工作原理详解
selenium简介 Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11), ...
- Selenium WebDriver的工作原理
先通过一个简单的类比说个好理解的,这个比喻是我从美版知乎Quora上看到的,觉得比较形象.好理解拿来用用. 我们可以把WebDriver驱动浏览器类比成出租车司机开出租车. 在开出租车时有三个角色: ...
- Selenium 工作原理
Selenium是ThoughtWorks公司研发的一个强大的基于浏览器的开源自动化测试工具,它通常用来编写web应用的自动化测试.早期也即Selenium1.x时期主要使用Selenium RC(S ...
- Selenium WebDriver 工作原理
WebDriver与之前Selenium的js注入实现不同:Selenium通过JS来定位元素处理元素(基本上所有元素都可以定位到)WebDriver通过WebDriver API定位处理元素:通过浏 ...
- Selenium1工作原理
内容主要转自:Selenium工作原理 http://blog.csdn.net/five3/article/details/6790925 简介: Selenium 1.0中可以使用多种语言编程,当 ...
- 【Appium】Appium工作原理
参考:http://www.cnblogs.com/zhjsll/p/5698878.html 原作者写的很好,所以直接放在这里. 一.什么是Appium Appium是一个开源.跨平台的测试框架,可 ...
随机推荐
- hdu3652B-number (数位dp)
Problem Description A wqb-number, or B-number for short, is a non-negative integer whose decimal for ...
- 牛客编程巅峰赛S2第3场 Tree VI (树,dfs)
题意:给你一个\(n\)个点的完全\(k\)叉树的先序遍历序列\(a\),还原这颗树并且求所有两个端点的异或和. 题解:用dfs在还原树的时候,把子节点和父亲节点的异或贡献给答案,对于每个节点,我们找 ...
- Chip Factory HDU - 5536 字典树(删除节点|增加节点)
题意: t组样例,对于每一组样例第一行输入一个n,下面在输入n个数 你需要从这n个数里面找出来三个数(设为x,y,z),找出来(x+y)^z(同样也可以(y+z)^1)的最大值 ("^&qu ...
- solidity的函数修改器(modifier)
内容:modifier的定义.modifier对函数参数的操作.modifier执行的顺序 modifier的定义 官方文档:modifier可以改变函数的行为.可以被继承和重写. 其实modifie ...
- PowerShell随笔4---变量
全局变量 输入$global:后按ctrl+space,我们就可以看到所有的全局变量. 比如我们可以查看PowerShell的版本: 我们可以在在编写脚本代码的时候使用这些变量,globle可以省略, ...
- 如何安装Gephi工具
gephi中文版是一款开源免费跨平台基于JVM的复杂网络分析软件,安装后需要安装Java jdk API,否则就会出现gephi打不开的情况 该工具主要用于各种网络和复杂系统,动态和分层图的交互可视化 ...
- java源码之集合类ArrayList
1. ArrayList概述: ArrayList是List接口的可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部 ...
- 一个汉字在php中占几个字节?
问:一个汉字在php中占几个字节? 答: 对于中文字符,若使用 GBK.Big-5 版本,每个中文字符相当于 2 个字节: 若使用 UTF-8 版本,每个中文字符相当于 3 个字节.
- module patterns
module patterns ebooks https://github.com/xyzata/2017-new-ebooks/blob/master/Succinctly/modulepatter ...
- js & array & shuffle
js & array & shuffle const list = [1, 2, 3, 4, 5, 6, 7, 8, 9]; list.sort(() => Math.rando ...