Selenium是一个开源的用于Web应用的自动化测试工具,支持多平台(Windows、Lniux等)、多浏览器(Chrome、Firefox、IE等)、多语言(Python、Java、C#等),目前使用越来越广泛

Selenium到底是怎么工作的?

实际上在Selenium工作的过程中有三个角色,其一便是跟我们最近的自动化测试代码:自动化测试代码发送请求给浏览器的驱动,其二便是浏览器的驱动:它来解析这些自动化测试的代码,解析后把它们发送给浏览器,其三便是浏览器:执行浏览器驱动发来的指令,并最终完成工程师想要的操作。

从技术角度对应这三个角色

WebDriver API(基于Java、Python、C#等语言),对于Python来说就是我们使用命令“pip install selenium”来安装的selenium模块,其二便是浏览器的驱动(browser driver)每个浏览器都有自己的驱动,均以exe文件形式存在,比如谷歌的chromedriver.exe、火狐的geckodriver.exe、IE的IEDriverServer.exe,其三便是浏览器,浏览器当然就是我们很熟悉的常用的各种浏览器。
对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动,浏览器驱动中包含了一个用来接收这些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的,它是在HTTP协议的基础上,对HTTP请求及响应信息的BODY部分的数据进一步规范, BODY部分主要传送具体的数据,在WebDriver中这些数据都是以JSON的形式存在并进行传送的,这就是JSON Wire protocol。
所以在Client和Server之间,只要是基于JSON Wire Protocol来传递数据,就与具体的脚本语言无关了,这样同一个浏览器的驱动就即可以处理Java语言的脚本,也可以处理Python语言的脚本了。

02-20 16:20