selenium工作原理图解

songzhenhua songzhenhua     2022-12-04     446

关键词:

一、什么是WebDriver

WebDriver提供了另外一种方式与浏览器进行交互。那就是利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的)。由于使用的是浏览器的原生API,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学。然而带来的一些副作用就是,不同的浏览器厂商,对Web元素的操作和呈现存在不同程度的差异,这就要求Selenium WebDriver要分浏览器厂商的不同,提供不同的实现,例如Chrome有专门的ChromeDriver,Firefox有FirefoxDriver等等。

WebDriver Wire协议是通用的,也就是说不管是Firefox Driver还是ChromeDriver,启动之后都会在某一个端口启动基于这套协议的Web Service。例如ChromeDriver初始化成功之后,默认会从http://localhost:46350开始,而FirefoxDriver从http://localhost:7055开始。后续我们调用WebDriver的任何API,都需要借助一个ComandExecutor发送一个命令,实际上是一个HTTPrequest给监听端口上的WebService。在我们的HTTPrequest的body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium我们希望浏览器接下来做什么事情。

二、通信原理
最少情况,WebDriver通过一个驱动程序与浏览器对话。通信有两种方式:WebDriver通过驱动程序向浏览器传递命令,然后通过相同的路径接收信息。

技术图片

 

 

驱动程序在与浏览器相同的系统上运行。这可能与执行测试本身的系统相同,也可能不同。

上面这个简单的例子就是直接通信。与浏览器的通信也可以是通过Selenium服务器或RemoteWebDriver进行的远程通信。RemoteWebDriver与驱动程序和浏览器运行在同一个系统上。

技术图片

 

 

远程通信也可以使用Selenium Server或Selenium Grid进行,这两者依次与主机系统上的驱动程序进行通信。

技术图片

 

 

WebDriver只是与浏览器通信,测试框架(如JUnit、Pytest)负责运行和执行WebDriver以及测试中相关步骤。

技术图片

 

 


三、具体过程
1.实例化WebDriver,在目标浏览器里启动一整套WebService。这套WebService使用了Selenium自己设计定义的协议,名字叫做The WebDriver Wire Protocol。这套协议非常之强大,几乎可以操作浏览器做任何事情,包括打开、关闭、最大化、最小化、元素定位、元素点击、文件上传等等

2.发送请求时,用WebDriver的HttpCommandExecutor类将命令转换为URL作为value,命令作为key一起存入map作为request,同时会在request的body中存放相应的ByXpath、id、name。实际发送的URL都是相对路径,后缀多以/session/:sessionId开头,这也意味着WebDriver每次启动浏览器都会分配一个独立的sessionId,多线程并行的时候彼此之间不会有冲突和干扰。比如我们常用到的find_element_by_class_name这个接口,会转化为/session/:sessionId/element这个url,然后在发出Http Request Body内再附上具体的参数,比如classname的值。比如我们要访问某一个网站,请求地址为:http://localhost:46350/wd/hub/session/sessionId/url,请求json内容:"url":"http://www.qq.com"。比如查找一个classname为test的元素,请求地址后缀为/session/sessionId/element,json内容"using":"class_name","value":"test"。

3.收到并执行了这个操作之后,也会回复一个HttpResponse。内容也是Json,会返回找到的element的各种细节,比如text、CSSselector、tagname、classname等等。比如:
"sessionId":"XXXXX","status":0,"state":"success","value":"ELEMENT":"2","class":"XXX","hCode":"XXX"


参考:
https://www.selenium.dev/documentation/zh-cn/webdriver/understanding_the_components/
http://www.uml.org.cn/Test/201807301.asp

 

---------------------------------------------------------------------------------

关注微信公众号(测试工程师小站)即可在手机上查阅,并可接收更多测试分享,发送【测试资料】更可获取百G测试教程~

技术图片

图解webgl&three.js工作原理

“哥,你又来啦?”“是啊,我随便逛逛。”“别介啊……给我20分钟,成不?”“5分钟吧,我很忙的。”“不行,20分钟,不然我真很难跟你讲清楚。”“好吧……”“行... 查看详情

图解kerberos认证工作原理

本文是我在看了这篇英文说明之后的总结https://technet.microsoft.com/zh-cn/library/cc961976.aspx是总结,不是翻译,所以是我看后按自己的理解写的,如有问题,请指正! Kerberos在古希腊神话中是指:一只有三个头的狗。这条狗守护在... 查看详情

lvs介绍及工作原理图解

正文在下面,先打个广告:原文链接:http://www.178linux.com/89580一、LVS简介LVS是LinuxVirtualServer的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是:http://www.linuxvirtualserv... 查看详情

selenium工作原理

Selenium是一个开源的用于Web应用的自动化测试工具,支持多平台(Windows、Lniux等)、多浏览器(Chrome、Firefox、IE等)、多语言(Python、Java、C#等),目前使用越来越广泛Selenium到底是怎么工作的?实际上在Selenium工作的过程中有三... 查看详情

曲鸟全栈ui自动化教学:selenium工作原理及webdriver对浏览器的配置和操作(代码片段)

一、前言上篇文章我们学习了Selenium页面操作原理及如何高效的进行元素定位那Selenium的工作原理又是什么?是如何驱动浏览器的呢?这篇文章为你讲解Selenium工作原理及Webdriver对浏览器的配置和操作。Python测试交流群:8140... 查看详情

浏览器的工作原理你真的全知道嘛?史上最全图解其原理(代码片段)

可能每一个前端工程师都想要理解浏览器的工作原理。我们希望知道从在浏览器地址栏中输入url到页面展现的短短几秒内浏览器究竟做了什么;我们希望了解平时常常听说的各种代码优化方案是究竟为什么能起到优化的作用;我... 查看详情

浏览器的工作原理你真的全知道嘛?史上最全图解其原理(代码片段)

可能每一个前端工程师都想要理解浏览器的工作原理。我们希望知道从在浏览器地址栏中输入url到页面展现的短短几秒内浏览器究竟做了什么;我们希望了解平时常常听说的各种代码优化方案是究竟为什么能起到优化的作用;我... 查看详情

图解电动汽车:电动汽车工作原理

燃油汽车在了解电动汽车的工作原理之前,先来看看燃油汽车的构造与工作原理,如下图所示。燃油汽车的动力系统主要由车轮、变速箱、发动机以及油箱组成。汽车从加油站获取汽油,并储存在汽车油箱中,当汽车工作时,从... 查看详情

图解synchronousqueue原理-公平模式(代码片段)

...作,相当于是交换通道,提供者和消费者是需要组队完成工作,缺少一个将会阻塞线程,知道等到配对为止。SynchronousQueue是一个 查看详情

selenium自动化原理

参考技术A使用seleniumwebdriver实现自动化:1,首先要有自动化测试脚本(python实现)2,安装浏览器3,对需要控制的浏览器安装驱动工作过程:脚本(python文件-->客户端)----》驱动程序(发送json串)----》浏览器浏览器:内部提... 查看详情

各类真空泵原理图解

...固体物的液体。本文跟大家一起来通过动画学习各种泵的工作原理及其性能特点,希望对大家有所帮助(当然这里的泵并全是真空所用的泵)。传送门真空技术网 http://www.chvacuum.com/一、齿轮泵  齿轮泵的两齿轮的齿相互分开... 查看详情

计算机网络基础|图解ssh原理

本文目录初见SSHSSH工作原理SSH实践总结1.远程Server收到Client端用户TopGun的登录请求,Server把自己的公钥发给用户。2.Client使用这个公钥,将密码进行加密。3.Client将加密的密码发送给Server端。4.远程Server用自己的私钥,解密登录密... 查看详情

计算机网络基础|图解ssh原理

本文目录初见SSHSSH工作原理SSH实践总结1.远程Server收到Client端用户TopGun的登录请求,Server把自己的公钥发给用户。2.Client使用这个公钥,将密码进行加密。3.Client将加密的密码发送给Server端。4.远程Server用自己的私钥,解密登录密... 查看详情

灵魂画手:图解springaop实现原理

...(@Aspect)由一定了解,话不多说,直接上图准备工作Service类: 有find方法跟save方法,find方法前后需要缓存操作&#x 查看详情

图解arp协议工作流程

文章目录概念工作原理工作过程举例ARP报文格式概念ARP(AddressResolutionProtocol),即地址解析协议。ARP协议是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所... 查看详情

selenium学习笔记-自动化测试体系与原理

技术体系基于代码的测试(Code-BasedTesting)基于协议的测试(Protocol-BasedTesting)基于界面的测试(GUI-BasedTesting)工作原理基于代码定义期望结果调用被测对象对比实际结果难点:1.前置条件或环境的准备;2.被测代码又大量的异常优点:1.... 查看详情

图解git命令

...%E4%BB%A4此页图解git中的最常用命令。如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻。基本用法上面的四条命令在工作目录、stage缓存(也叫做索引)和commit历史之间复制文件。gitaddfile 查看详情

selenium:css_selector定位详解

来源:https://www.cnblogs.com/haifeima/p/10138154.html 目录selenium使用cssselector和xpath的比较selenium提供的定位方式(常用)推荐的定位方式的优先级针对cssselector和xpath的优先级做一个简单的说明定位元素的注意事项(划重点)selenium之C... 查看详情