第一章 Selenium简介

Selenium

Selenium是一个工具包,里面包括web自动化的所用到的库和工具;支持多个主流浏览器,多种方式来定位web UI中的元素,且提供了丰富的测试功能,以方便我们来验证功能,满足所有类型针对的Web应用程序的测试需求。

Selenium可以准确、完整地模仿用户的所有UI操作,通过操作系统级的调用模拟用户输入。方便我们来验证web应用所提供的功能,极大地提高了工作效率和自动化水平。

Selenium版本

目前共有三个版本,分别是Selenium RC (Selenium 1),Selenium2和Selenium3。现在使用基本上以Selenium3为主,Selenium RC也仍然在维护中。

  • Selenium 1: Remote Server + Selenium Core
  • Selenium 2、3: 使用 Web Driver 技术

Selenium RC(Selenium 1)

Selenium 1 主要依靠两个模块Remote Server 和 Selenium Core

自动化程序执行开始的时候,Remote Server 会将Selenium Core(即js 开发的 Selenium 命令解释器)注入到浏览器里面,就像木马一样,当然是善意的木马。 程序可以用多种语言开发出来, 通过selenium提供的客户端语言库(每种语言提供一个语言库),发出命令,通过Remote Server传递给已经在浏览器里面的Selenium Core,Selenium Core根据命令执行相应的 javascript 实现Web自动化。

官方的描述如下: The Selenium Server which launches and kills browsers, interprets and runs the Selenese commands passed from the test program, and acts as an HTTP proxy, intercepting and verifying HTTP messages passed between the browser and the AUT.

Client libraries which provide the interface between each programming language and the Selenium RC Server.

Selenium 2和3

Selenium WebDriver (也就是 Selenium 2,Selenium 3)和Selenium RC (Selenium 1)一样 提供了web自动化的各种语言(java,python,ruby等等)调用接口库。相比 Selenium RC , Selenium WebDriver 的编程接口更加直观易懂,也更加简练。

但是和Selenium RC 最大的不同的是,Selenium WebDriver是通过 各种浏览器的驱动(web driver)来驱动浏览器的,而不是通过注入 javascript 的方式。

web自动化程序调用Selenium client库 和 各个浏览器的驱动进程 (称之为webdriver)进行交互,传递Selenium 命令 给它们,webdriver驱动浏览器,并且将执行的结果,返回给web自动化程序进行处理

webdriver 取代了原来1 中的 Selenium RC Server, 是实现自动化的核心。而我们的自动化程序调用的client库支持多种开发语言,所以得到广泛的支持。

Selenium 2里面webdriver还是Selenium组织开发的,到了Selenium 3,由于Selenium的影响巨大,目前由各大浏览器开发厂商自行开发驱动。

webdriver和程序之间遵守是一种 标准的开放协议,并且已经在W3C发布,浏览器厂商则根据协议,自行开发自家浏览器的webdriver。具体实现由各个浏览器厂商自己决定。

Webdriver

WebDriver针对各个浏览器而开发,取代了嵌入到被测Web应用中的JavaScript。与浏览器的紧密集成支持创建更高级的测试,避免了JavaScript安全模型导致的限制。除了来自浏览器厂商的支持,WebDriver还利用操作系统级的调用模拟用户输入。WebDriver支持Firefox(FirefoxDriver)、IE (InternetExplorerDriver)、Opera (OperaDriver)和Chrome (ChromeDriver)。 它还支持Android (AndroidDriver)和iPhone (IPhoneDriver)的移动应用测试。它还包括一个基于HtmlUnit的无界面实现,称为HtmlUnitDriver。WebDriver API可以通过Python、Ruby、Java和C#访问,支持开发人员使用他们偏爱的编程语言来创建测试。

Selenium WebDriver目前 包括两个版本Selenium 2和Selenium 3。 这两个版本从开发代码调用接口上来看,几乎没有区别。区别在于库的实现和web driver 的实现。

Selenium 2里面的web driver 是Selenium 组织帮各个浏览器写web driver的,而Selenium 3 里面的web driver 是由各个浏览器厂商(Apple, Google, Microsoft, Mozilla)自己提供的。 所以Selenium 3 的自动化效率更高,成功率也更高。

Selenium IDE

selenium工具包里面还有一个工具 叫Selenium IDE,是火狐浏览器(Firefox)的一个插件,它提供了一个图形化界面,实现简单的IDE的功能。它可以录制、回放用户在web页面上的操作,并且可以编辑、调试命令,还能将命令脚本导出成不同语言的Selenium自动化脚本。这个工具可以帮助毫无编程经验的 人实现简单的web自动化。

但是,在实际的工作和项目中,它只能起到一定的辅助作用,要达到产品需求,还是远远不够的。自从 firefox55 版本之后,火狐的扩展机制升级后,曾经就和selenium IDE扩展不兼容。 但是新版本 IDE 发布后,又支持了。

这里只是和大家简单介绍一下,具体的用法大家自己查找一下

Selenium Grid

如果想在多台机器上同时执行 Selenium自动测试,就可以使用Selenium Grid 。 实际的工作中,可以将测试用例分成多个部分, 不同的测试脚本放到不同的测试机器上执行, 再使用Selenium Grid这个 工具来管理和驱动,可以提高工作效率。但是,我们在实际的项目中,使用到它的机会并不多。

web访问流程

正常用户的访问

image

  1. 正向访问:用户通过浏览器(包括手机、电脑的浏览器)经过Internet向web服务器发出访问请求,浏览器和Web 服务器之间是通过http/https协议进行交互的.
  2. 反向响应:web浏览器收到请求,进行处理后,再通过http/https协议经过网络反馈给浏览器,浏览器经过处理,将结果展示给用户

如果要对web应用进行验证,就要模拟整个终端用户正常访问的流程,也就是说,通过工具来实现用户的所有网络访问行为,Selenium就可以帮助我们做到这一点。

Selenium的访问

image

  1. web访问的请求都是通过使用Selenium客户端库,构建出相应的HTTP请求,发送给浏览器驱动(webdriver)。

  2. 浏览器驱动接收到我们的自动化程序发送过来的界面操作请求后,会转发请求给浏览器, 让浏览器去执行对应的自动化操作。

  3. 浏览器执行完操作后,会将自动化的结果返回给浏览器驱动, 浏览器驱动再通过http响应的消息返回给我们的自动化程序的客户端库。

  4. 自动化程序的客户端库 接收到响应后,将结果转化为 数据对象 返回给我的自动化程序代码。我们的程序就可以知道这次自动化操作的结果如何了。

上述程序的往返流程就是在模拟用户的操作,通过web自动化程序对Selenium客户端库的调用和返回来实现用户的访问。


本文还不错? 分享给你的朋友吧

下一页