先通过一个简单的类比说个好理解的,这个比喻是我从美版知乎Quora上看到的,觉得比较形象、好理解拿来用用。

我们可以把WebDriver驱动浏览器类比成出租车司机开出租车。

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

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

在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脚本执行时后端都发生了哪些事情:

对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动
浏览器驱动中包含了一个HTTP Server,用来接收这些http请求
HTTP Server接收到请求后根据请求来具体操控对应的浏览器
浏览器执行具体的测试步骤
浏览器将步骤执行结果返回给HTTP Server
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语言的脚本了。
---------------------
作者:YOYO测试
来源:CSDN
原文:https://blog.csdn.net/yoyocat915/article/details/80246744
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/linwenbin/p/10640535.html

Selenium WebDriver的工作原理相关推荐

  1. selenium webdriver实现的原理及流程

    用Selenium实现自动化,主要需要三个东西: 1.自动化测试代码:自动化测试代码发送请求给浏览器的驱动(比如火狐驱动.谷歌驱动) 2.浏览器驱动:它来解析这些自动化测试的代码,解析后把它们发送给浏 ...

  2. selenium工作原理详解

    selenium简介 Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11), ...

  3. 一篇文章带你了解-selenium工作原理详解

    前言 Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla ...

  4. Selenium WebDriver架构

    什么是Selenium? (What is Selenium?) Selenium is an Opensource Automation testing tool which is only mea ...

  5. 测试开发面试准备之Selenium 工作原理

    Selenium 经历了两个版本,Selenium 1.0 和 Selenium 2.0,本文仅介绍Selenium2的原理,在Selenium 2.0 主推的是WebDriver,Selenium2 ...

  6. selenium原理python_通过python Selenium 库源代码来看Selenium Webdriver 实现原理

    作为一名使用Selenium开发UI自动化多年的工程师,一直都对Selenium Webdriver的实现原理感觉不是很清楚.怎么就通过脚本控制浏览器进行各种操作了呢?相信很多Selenium的使用者 ...

  7. Selenium Webdriver重新使用已打开的浏览器实例

    本文转自:http://blog.csdn.net/wwwqjpcom/article/details/51232302 本文中的样例均使用SoapUI ,关于SoapUI+Webdriver 的配置 ...

  8. selenium 学习、工作 记录,附常见异常和工具方法

    selenium 学习.工作 记录,附常见异常和工具方法 基础配置 2020.03.31 开发者模式 设置有认证的http代理 让selenium接管人为打开的chrome 2020.07.23(79 ...

  9. 曲鸟全栈UI自动化教学(四):Selenium工作原理及Webdriver对浏览器的配置和操作

    一.前言 上篇文章我们学习了Selenium页面操作原理及如何高效的进行元素定位 那Selenium的工作原理又是什么?是如何驱动浏览器的呢?这篇文章为你讲解Selenium工作原理及Webdrive ...

最新文章

  1. 技巧: 用 JAXM 发送和接收 SOAP 消息—Java API 使许多手工生成和发送消息方面必需的步骤自动化...
  2. 一个批量停止和启动服务的工具
  3. Eclipse内存分析工具的用法
  4. ElasticSearch 知识点整理(深入)
  5. html 中怎样显示enum,JavaScript如何枚举?
  6. 【剑指offer】面试题07. 重建二叉树(Java)
  7. IoT SaaS加速器——助力阿尔茨海默病人护理
  8. 当鼠标移入时切换背景图时闪烁的问题
  9. c++驱动键鼠源码_DD驱动级虚拟键鼠套装
  10. 如何从低端面畜到高端面霸
  11. UA OPTI512R 傅立叶光学导论14 卷积定理
  12. adc0808温度换算公式_课程设计-ADC0808设计的调温报警器
  13. matlab参数摄动仿真,过程控制工程及仿真 基于MATLABSimulixnk_IT教程网
  14. 西南大学计算机考研学硕,西南大学心理学学硕343分考研经验
  15. 2022年全新UI聚合支付系统四方源码4月最新更新安全升级修复XSS漏洞和补单漏洞新增诸多实用功能完美版
  16. 微信公众号的订阅号和服务号权限区别
  17. Python 简单银行系统
  18. realme怎么互传_Realme X刷MIUI11系统后通过普通电脑实现“小米互传”攻略
  19. Java基础之刨根问底第1集——JVM的结构
  20. 中国阀门喷射式喷墨打印机市场深度研究分析报告

热门文章

  1. LeetCode——Word Break
  2. KindleConverter:Word批量转换为6寸PDF
  3. Android开发指南中文版(十三)User Interface-Notifications
  4. 正则表达式30分钟入门教程-2
  5. [易学C#]C#3.0语言新特性之扩展方法
  6. 使用XAMPP和Hbuilder搭建PHP环境(XAMPP中Apache启动失败解决方法)
  7. create-react-app入门教程
  8. Luogu 4491 [HAOI2018]染色
  9. vue混合开发笔记, this的指向
  10. xml转化为Dictionary