• 0
  • 1
分享
  • Selenium WebDriver的工作原理——软件测试圈
  • 北极 2021-07-22 11:22:34 字数 2045 阅读 892 收藏 1

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

类比

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

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

1.png

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

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

所以在这个类比中:

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

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

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

WebDriver的工作原理

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

  1. WebDriver API(基于Java、Python、C#等语言)对于java语言来说,就是下载下来的selenium的Jar包,比如selenium-java-3.8.1.zip包,代表Selenium3.8.1的版本

  2. 浏览器的驱动(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/kongsuhongbaby/article/details/103840991#comments_17220413

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   前言  jmeter 这个工具既可以做接口的功能测试,也可以做自动化测试,还可以做性能测试,其主要用途就是用于性能测试。但是,有些公司和个人,就想用 jmeter 来做接口自动化测试。  你有没有想过呢?  下面我就给大家讲讲,用 jmeter 如何做接口自动化测试。  jmeter 与接口自动化测试  如果要你用 jmeter 来做接口自动化测试,你是不是把几乎每一个测试用例,都是用一个取样器来实现?  相信很多人都是这么想的,也是这么干的。  但是,很遗憾,你这种,是初级入门做法。你能实现所有的测试用例都被执行,但是,你写脚本和维护脚本的时间,可能比你用手工执行所有的测试用例时间还要长...
            0 0 1074
            分享
          •   前言  在目前互联网公司中,都会存在多个测试环境,那么当我们编写的自动化想要在多套测试环境下进行运行时,如何使用?  大多数人想到的可能是通过将我们自动化代码中的地址修改成不同环境。  但是这时候就会增加一些工作量,每次运行不同的环境,都需要在配置文件中进行地址修改,这样很不方便。  今天小编介绍一种Pytest的钩子函数,这个函数可以帮助我们很容易的解决这个问题。  pytest_addoption  pytest_addoption是Pytest的钩子函数之一,用于为Pytest添加自定义选项,并将这些选项传递给测试用例。  可以通过修改Pytest的配置文件(pytest.ini)或...
            0 0 847
            分享
          •   苹果 Vision Pro的新用户可能会对发布时的原生应用选择感到失望,据称大约有 150 款应用是为该头显开发的体验。1 月 16 日,苹果公司为 Apple Vision Pro 开放了一个版本的应用商店,让开发者有机会在该头显 2 月 2 日发布日期之前添加自己的应用程序。不过,似乎很少有开发者会在一开始就向用户提供真正利用头显功能的应用程序。  上周末,据TechCrunch报道,AppFigures 的研究表明,已经更新以包含 Vision Pro 特定功能(即某种形式的虚拟现实或混合现实组件)的应用程序可能不超过 150 个。到用户使用苹果 Vision Pro 时,可能还会有...
            0 0 609
            分享
          • 一、Linux系统的特点安全、稳定;Linux的发行版本,多且专业;Linux开源;Linux的多任务管理;Linux支持多用户登录。二、Linux系统命令的分类1、目录操作和管理命令cd mkdir rmdir rm pwd ls2、文件操作和管理的命令vi cp mv cat touch more less head tail3、权限管理命令chmod chown chgrp4、资源管理命令rpm yum tar5、用户管...
            10 10 796
            分享
          •   性能测试的目的是验证软件系统是否能够达到用户提出的性能指标,发现软件系统中存在的性能瓶颈,优化软件,起到优化系统的目的。性能瓶颈定位和调优是个复杂的过程,通常可以从应用参数设置、硬件资源、代码或 SQL 语句、架构或需求等方面综合考量。  本文以某应用系统性能测试过程中遇到的交易报错入手,详细讲述WAS数据源连接池参数配置对系统性能的影响。  一、应用系统基本情况介绍  某应用系统性能测试环境数据库服务器使用Oracle RAC,由两台PC Server物理机组成;应用服务器使用11台PC Server虚拟机,程序运行在WAS上。测试环境WAS与Oracle各...
            11 11 1222
            分享
      • 51testing软件测试圈微信