Selenium-WebDriver的工作原理

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net

首先来了解一下Selenium WebDriver系统中的三个角色:

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

比如,对于Java来说,就是对应的Selenium WebDriver的Jar包。

2. 浏览器的驱动(Browser Driver)

比如,Chrome浏览器的Driver为:chromedriver.exe。

3. 浏览器(Browser)

比如,Chrome浏览器。

接下来我们一起来看一下,一条Selenium脚本执行时后端都发生了哪些事情:

  1. 对于每一条Selenium脚本,一个HTTP请求会被创建并且发送给Browser Driver
  2. Browser Driver中包含了一个HTTP Server,用来接收这些HTTP请求
  3. HTTP Server接收到请求后根据请求来具体操控对应的Browser
  4. Browser执行具体的操作步骤
  5. Browser将步骤执行结果返回给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部分的数据的进一步规范。

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

7: NoSuchElement
11:ElementNotVisible
200:Everything OK

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

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

比如,在WebDriver中成功找到一个元素后JSON Wire Protocol的返回为:

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

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

你可能感兴趣的:(Software,Test,Automation,Selenium,WebDriver的工作原理)