首页 > 其他分享 >Selenium 4.0beta: Grid 工作原理

Selenium 4.0beta: Grid 工作原理

时间:2023-11-03 10:31:42浏览次数:36  
标签:Node 4.0 Hub Selenium beta Session Grid New 请求

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

Selenium Grid3工作原理

Selenium 4.0beta: Grid 工作原理_jar

Hub

  1. 中介和管理
  2. 接受运行测试的请求
  3. 从客户端获取指令并在节点上远程执行它们
  4. 管理线程

Hub是发送所有测试的中心点。每个selenium Grid恰好由一个Hub组成。Hub需要能够从各自的客户端(即CI服务器、开发人员机器等)访问。Hub将连接一个或多个Node测试的节点。

Node

  1. Node和执行的浏览器在同一台主机。
  2. 将自己注册到Hub上,并保持通信。
  3. 接收来自Hub的请求并执行他们。

Node是在单个计算机系统上执行测试的不同的Selenium实例。Grid中可以有许多节点。作为Node的机器不需要与Hub或其他Node的平台相同,也不需要具有相同的浏览器选择。Windows上的节点可以提供Internet Explorer作为浏览器选项,而这在Linux或Mac上是不可能的。

selenium Grid4

Selenium 4.0beta: Grid 工作原理_jar_02

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来创建会话。DistributorSession Map 中存储session id和正在执行会话的Node之间的关系。

Node 节点

一个Node可以在Grid中多次创建。每个Node负责管理运行所在机器的可用浏览器。

Node通过 Event BusDistributor注册。它的配置作为注册消息的一部分发送。

默认情况下,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 QueuerNew Session Queuer在接收到事件时响应客户端。

Event Bus 事件总线

Event Bus 总线充当NodeDistributorNew Session QueuerSession Map之间的通信路径。Grid通过消息进行大部分的内部通信,避免了昂贵的HTTP调用。

Role In Grid

在Grid3中,组件分HubNode, 通过独立模式下运行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查询接口

Selenium 4.0beta: Grid 工作原理_Selenium_03

官网:https://httpie.io/

以下两种模式比较复杂一些,也是Grid4真正区别于Grid3的功能,后续再介绍!

  • Distributed Mode 分布式模式
  • Start Standalone Grid Via Docker Images 通过Docker镜像启动Grid

标签:Node,4.0,Hub,Selenium,beta,Session,Grid,New,请求
From: https://blog.51cto.com/fnngj/8162079

相关文章

  • 【专题】中国汽车基础软件发展白皮书4.0报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34132自18世纪中期工业革命以来,人类进入工业社会。在历次工业革命中,人类通过发明创造和管理革新,改进生产方式、降低成本、提高效率,随之而来的是生活、物质、文化、教育等各方面的变化,人际关系和社会结构也得以重塑。如今,数字化技术的发展为工业注入......
  • Python selenium操作cookie
    如何使用Selenium处理Cookie,今天彻底学会了(qq.com)"""1.学习目标:掌握selenium对cookie操作2.语法2.1获取所有cookiedriver.get.cookies()返同列表格式字典类型[{},{},{}]2.2添加cookiedriver.add_cookie(参数)参数:字典格......
  • nginx报错 [error] 612#4188: CreateFile() "C:\yjzx\nginx-1.24.0/logs/nginx.pid"
    背景无论是nginx-sstop还是nginx-sreload命令,都会出现这个错误。[error]612#4188:CreateFile()"C:\yjzx\nginx-1.24.0/logs/nginx.pid"failed(2:Thesystemcannotfindthefilespecified)查找logs下nginx.pid文件确实没有创建成功,在网上查找了下了解决办法。发......
  • 发布会回放|Gradio 4.0 正式发布!
     Gradio的目标是使机器学习模型的演示更容易定制和访问,以满足不同用户的需求。在4.0正式版的发布活动上,HuggingFace的Gradio团队介绍了自己为了提高机器学习模型的可访问性所做的工作,以及如何创建自定义组件。Gradio是一个用于构建机器学习模型演示的工具,任何人都可以......
  • Syntax Error: Error: Node Sass version 8.0.0 is incompatible with ^4.0.0.
    依赖关系如图: 如果报如题这个错误,并且按照上面node-sass官网的依赖关系依赖对了node版本还不行,那么,请删除node-sassnpmuninstallnode-sass然后执行npmisass--save-dev然后运行项目,如果出现类似图片中的错误时,别慌,把所有的/deep/更换成::v-deepSyntaxError:Sa......
  • Docker 中使用Selenium Grid
    第一步拉取hub镜像:dockerpullselenium/hub拉取chrome浏览器镜像:dockerpullselenium/node-chrome启动hub:dockerrun-p5001:4444-d--namehubselenium/hubdockerrun--name=hub-p5001:4444-eGRID_TIMEOUT=0-eGRID_THROW_ON_CAPABILITY_NOT_PRESENT=true-e......
  • python的Selenium基础
    前言:今日写hackergame2023时需要使用pythonselenium库故特此来学习1.1什么是SeleniumSelenium是python的一个库,作为一套web网站的程序自动化操作解决方案,可以帮我们自动干很多事情。比如像人一样再浏览器里操纵web界面,比如点击界面,在文本框中输入文字等操作。而且还能从web......
  • Python selenium Chrome下载文件并设置下载路径
    PythonseleniumChrome下载文件并设置下载路径具体代码如下:importosimporttimefromtimeimportsleepfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydown_path="D:\\Temp"chrome_options=webdriver.ChromeOptions()diy_prefs={......
  • 禅道18.0_beta如何在项目需求列表页面通过自定义字段搜索
    里面的字段实际上是从product模块取的,只需要扩展product的config就可以了在extension/custom新建product/ext/config/test.php名字随意<?php$config->product->search['fields']['extrarNumber']=$lang->story->extraNumber;$config->product->......
  • Python使用selenium的Chrome下载文件报错解决
    Python使用selenium的Chrome下载文件报错:失败下载错误。网络不稳定也会引发该错误。咱们这里是因为路径多个反斜杠造成的。 下图是报错内容运行日志:路径代码:base_url="https://www.2ppt.com/"#采集的网址ASP.NET电子商务源码save_path="E:\\Spider\\PPT\\"去掉SaveP......