• 0
  • 1
分享
  • Selenium WebDriver的工作原理——软件测试圈
  • 北极 2021-07-22 11:22:34 字数 2045 阅读 956 收藏 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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   转眼经历了这么多大大小小的项目,除了对业务越来越熟悉,对测试工作也有了更深的认识。下面是我发现的对测试同学来说非常重要的几个习惯。  总结和整理  很多同学会觉得,我平时也就跟业务需求啊,做完一个接着一个,哪有什么好总结的。或者是,需求分析、测试设计、性能测试就是这样做的啊,大家都清楚,哪有什么好分享的。对测试工程师来说,总结和整理很重要。不论是大项目还是小需求,项目中踩坑的点、某个公共的测试方法、业务流程、甚至是一个棘手问题的解决过程等都可以记录下来。对自己而言,通过总结大家能发现自己做的好和做的不好的点,加深印象,了解自己的知识体系,对不足之处制定改进计划并定期跟进,才能不断进步;对他...
            0 0 916
            分享
          • 接口测试经常遇到的bug和问题,如下:传入参数处理不当,导致程序crash;类型溢出,导致数据读出和写入不一致;因对象权限未进行校验,可以访问其他用户敏感信息;---权限校验很重要状态处理不当,导致逻辑出现错乱;逻辑校验不完善,可利用漏洞获取非正当利益等。输入值的校验:特殊值处理不当导致程序异常退出;类型边界溢出取值范围外值未返回正确的错误信息等约束条件判断要充足判断后,状态转化要测试正确顺序执行是否能被打断或者乱序输出结果的校验:错误前端处理不足,导致前端异常;错误提示处理不当,导致用户看到晦涩的错误码;错误提示不当,导致用户不知道哪里出了问题,如何解决。未进行超时处理,导致整个流程阻塞超时...
            0 1 1965
            分享
          •   传感器、这些传感器输出的ML推断结果是自动辅助驾驶的重要核心。Mixel和Rambus在MIPI DevCon上就这种传输技术MIPI进行了讲解,涉及了来自Rambus的摄像头串行接口(MIPI CSI-2)和来自Mixel的物理接口(MIPI C-PHY和MIPI D-PHY)  MIPI CSI-2和PHY传输和接收模块  MIPI CSI-2是定义摄像头和ISP(图像信号处理器)之间串行接口的功能。像素从一端流入,最终从另一端流出,所以该接口需要一个发送功能和一个接收功能。由于这些功能必须能够连接任何摄像头(或多个摄像头)到任何ISP,需要很大的灵活性,比如传感器和最终消费者之间的带...
            0 0 473
            分享
          • 首发:https://mp.weixin.qq.com/s/iFqF60qQhYo2WW1Rghw3KQ 软件测试是对项目研发过程产物(文档、代码、程序等)进行审查,保障产品质量的过程。软件测试从测试内容上可以分为功能测试、性能测试、安全测试、兼容性测试等等。其中,安全测试是当今互联网产品的一项重要测试。那么,什么是安全测试?应该如何开展安全测试呢?安全测试的前世今生1945年12月, 在宾夕法尼亚大学摩尔电气工程学院,占地1500 平方英尺,重达30吨的世界上第一台全电子数字计算机ENIAC诞生。不过,那时的计算机输入还是卡片带,谈不上编程语言。随着第一代电子的计算机诞生,出现了机器语言和汇...
            1 1 2261
            分享
          • 1、什么是兼容性测试?兼容性测试侧重哪些方面?参考答案:兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行,即是通常说的软件的可移植性。兼容的类型,如果细分的话,有平台的兼容,网络兼容,数据库兼容,以及数据格式的兼容。兼容测试的重点是,对兼容环境的分析。通常,是在运行软件的环境不是很确定的情况下,才需要做兼容。根据软件运行的需要,或者根据需求文档,一般都能够得出用户会在什么环境下使用该软件,把这些环境整理成表单,就得出做兼容测试的兼容环境了。兼容和配置测试的区别在于,做配置测试通常不是Clean OS下做测试,而兼容测试多是在Clean OS的环境下做的。2、我现在有个程序,...
            11 11 984
            分享
      • 51testing软件测试圈微信