• 0
  • 0
分享
  • Selenium WebDriver的工作原理——软件测试圈
  • 饭团🍙 2021-06-30 15:54:02 字数 2027 阅读 1239 收藏 0

先通过一个简单的类比说个好理解的,这个比喻是我从美版知乎Quora上看到的,觉得比较形象、好理解拿来用用。可以把WebDriver驱动浏览器类比成出租车司机开出租车。

类比

在开出租车时有三个角色:

乘客:他/她告诉出租车司机去哪里,大概怎么走
出租车司机:他按照乘客的要求来操控出租车
出租车:出租车按照司机的操控完成真正的行驶,把乘客送到目的地

微信图片_20210630154910.png

在WebDriver中也有类似的三个角色:

自动化测试代码:自动化测试代码发送请求给浏览器的驱动(比如火狐驱动、谷歌驱动)
浏览器驱动:它来解析这些自动化测试的代码,解析后把它们发送给浏览器
浏览器:执行浏览器驱动发来的指令,并最终完成工程师想要的操作。

所以在这个类比中:

  1. 工程师写的自动化测试代码就相当于是乘客

  2. 浏览器的驱动就相当于是出租车司机

  3. 浏览器就相当于是出租车

WebDriver的工作原理

  1. 从技术上讲,也同样是上面的三个角色:

     WebDriver API(基于Java、Python、C#等语言)

  2. 对于java语言来说,就是下载下来的selenium的Jar包,比如selenium-java-3.8.1.zip包,代表Selenium3.8.1的版本

    浏览器的驱动(browser driver)

    每个浏览器都有自己的驱动,均以exe文件形式存在。比如谷歌的chromedriver.exe、火狐的geckodriver.exe、IE的IEDriverServer.exe

  3. 浏览器:就是我们很熟悉的常用的各种浏览器。

三者是如何通讯的?

WebDriver脚本运行的时候,它们之间是如何通信的呢?为什么同一个browser driver即可以处理java语言的脚本,也可以处理python语言的脚本呢?让我们来看一下,一条Selenium脚本执行时后端都发生了哪些事情:

  1. 对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动;

  2. 浏览器驱动中包含了一个HTTP Server,用来接收这些http请求;

  3. HTTP Server接收到请求后根据请求来具体操控对应的浏览器;

  4. 浏览器执行具体的测试步骤;

  5. 浏览器将步骤执行结果返回给HTTP Server;

  6. HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息。

为什么使用HTTP协议呢?

因为HTTP协议是一个浏览器和Web服务器之间通信的标准协议,而几乎每一种编程语言都提供了丰富的http libraries,这样就可以方便的处理客户端Client和服务器Server之间的请求request及响应response,WebDriver的结构中就是典型的C/S结构,WebDriver API相当于是客户端,而小小的浏览器驱动才是服务器端。

那为什么同一个浏览器驱动即可以处理Java语言的脚本,也可以处理Python语言的脚本呢?这就要提到WebDriver基于的协议:JSON Wire protocol。JSON Wire protocol是在http协议基础上,对http请求及响应的body部分的数据的进一步规范。

我们知道在HTTP请求及响应中常常包括以下几个部分:http请求方法、http请求及响应内容body、http响应状态码等。

常见的http请求方法:

GET:用来从服务器获取信息。比如获取网页的标题信息

POST:向服务器发送操作请求。比如findElement,Click等

http响应状态码:

在WebDriver中为了给用户以更明确的反馈信息,提供了更细化的http响应状态码,比如:

7: NoSuchElement

11:ElementNotVisible

200:Everything OK

现在到了最关键的http请求及响应的body部分了:

body部分主要传送具体的数据,在WebDriver中这些数据都是以JSON的形式存在并进行传送的,这就是JSON Wire protocol。

JSON是一种数据交换的格式,是对XML的升级与替代,下面是一个JSON文件的例子:

  {
 
    "firstname": "Alex",
    "lastname": "Smith",
    "moble": "13300000000"
  }

下面的例子是WebDriver中在成功找到一个元素后JSON Wire Protocol的返回:

{"status" : 0, "value" : {"element" : "123422"}}

所以在Client和Server之间,只要是基于JSON Wire Protocol来传递数据,就与具体的脚本语言无关了,这样同一个浏览器的驱动就即可以处理Java语言的脚本,也可以处理Python语言的脚本了。

 

作者:小小小小人ksh

原文链接:https://blog.csdn.net/yoyocat915/article/details/80246744

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   据报道,苹果周四成功说服美国一家上诉法院维持专利法院的判决。苹果原本有可能要向专利授权公司VirnetX支付5.02亿美元侵权赔偿,而这一最新判决有可能推翻此前的赔偿决定。  美国联邦巡回上诉法院确认了美国专利和商标局的裁定,认为VirnetX指控苹果侵犯的两项专利无效。  VirnetXCEO肯达尔·拉森在声明中表示,该公司对这项裁决感到失望,并考虑重新申请听证会,或者上诉到美国最高法院。  本案宣判后,VirnetX股价在周四纽交所常规交易中下跌超过14%。但在本案宣判前,该股早盘一度涨超55%,原因是该公司宣布将派发特别股息,并预计未来可能因为苹果案获益。  苹果发言人尚未对此置评。...
            0 0 811
            分享
          •   代码检查方式有如下三种:  1.桌面检查  桌面检查是程序员对源程序代码进行分析、检验,并补充相关的文档,发现程序中错误的过程。  由于程序员熟悉自己的程序,可以有程序员自己检查,这样可以节省很多时间,但要注意避免自己的主观判断。  2.走查  走查(走读)是程序员和测试员组成的审查小组通过逻辑运行程序,发现问题。小组成员要提前阅读设计规格书、程序文本等相关文档,利用测试用例,使程序逻辑运行。  走查可分为以下两步:  第一步:小组负责人把材料发给每个组员,然后由小组成员提出发现的问题。  第二步:通过记录,小组成员对程序逻辑及功能提出自己的疑问,开会探讨发现的问题和解决方法。  3.代码...
            0 0 1730
            分享
          •   为什么做金融类软件测试  举个栗子,银行里的软件测试工程师。横向跟互联网公司里的测试来说,薪资相对稳定,加班少甚至基本没有,业务稳定。实在是测试类岗位中的香饽饽!  一、什么是金融行业  金融业是指经营金融商品的特殊行业,它包括银行业、保险业、信托业、证券业和租赁业。  往往涉及证券、银行、基金、信托、保险、投行、期货等领域。  二、金融行业的业务特点  随着金融行业的业务不断增加,金融交易模式的不断变化,金融机构对信息化的要求也越来越高,高质量的金融软件对于金融机构来说显得尤为重要。如何保证金融行业软件的质量,对金融行业软件的测试人员来说,也提出了更高的要求。  1. 金融行业的业务特点...
            1 1 1183
            分享
          •   一、判定表  1.使用场景:  当多个输入条件之间存在逻辑关系,需要组合测试时,使用判定表法进行分析  2.相关概念  (1)条件桩:输入条件,如工资薪制,错误程度  (2)条件项:输入条件的取值,如年薪制、月薪制  (3)动作桩:输出结果项,如扣款比例,扣款金额,实发工资  (4)动作项:输出每个项的具体值  3.使用步骤  (1)需求分析,得到条件桩和条件项,以及动作桩  (2)确定组合数量(条件项乘积)  (3)得到判定表  (4)导出测试用例,原则,一列是一条测试用例  案例1:  工资发放系统  条件桩:工资薪制  条件项:年薪制,月薪制,季薪制  案例2:  有一个处理单价为5...
            4 4 2767
            分享
      • 51testing软件测试圈微信