1、Selenium是什么?

 

Selenium的命名比较有意思,当时QTP mercury是主流的商业自化工具,是化学元素汞(俗称水银),而Selenium是开源自动化工具,是化学元素硒,硒可以对抗汞。

 

Selenium 是web自动化测试工具集,包括IDE、Grid、RC(selenium 1.0)、WebDriver(selenium 2.0)等,主要用于Web应用程序的自动化测试。

 

python selenium UI 自动化 selenium自动化原理_Core

 

关系

 

python selenium UI 自动化 selenium自动化原理_Core_02

2、特点

  • 开源、免费;支持多浏览器、多平台、多语言;对Web页面有良好支持;API简单灵活;
  • 支持分布式测试用例执行。

 

3、Selenium组成

 

(1)Selenium1.0

 

Selenium 1.0 = Selenium IDE + Selenium Grid + Selenium RC

 

  • Selenium IDE:是firefox浏览器的一个插件。提供简单的脚本录制、编辑与回放功能。
  • Selenium Grid:是用来对测试脚步做分布式处理。现在已经集成到selenium server 中了。https://github.com/SeleniumHQ/selenium/wiki/Grid2
  • 可以使用selenium Grid来将自动化脚本在多浏览器上运行
  • Selenium RC:是Selenium家族的核心部分。Selenium RC 支持多种不同语言编写的自动化测试脚本,通过Selenium RC的服务器作为代理服务器去访问应用,从而达到测试的目的。
  • Client Libraries:主要用于编写测试脚本,用来控制Selenium Server的库。
  • Selenium Server:负责控制浏览器行为,分为
  • Selenium Core:是一堆JavaScript函数集合,通过这些函数操作浏览器。
  • Launcher,用于启动浏览器,把Selenium Core加载到浏览器页面中,并把浏览器的代理 设置为Selenium Server的Http proxy。

所以,在学习Selenium1.0的时候,核心应该是学习RC,它的工作原理是这样的:

  1. 测试用例通过Http请求建立与 selenium-RC server 的连接
  2. Selenium RC Server 驱动一个浏览器,把Selenium Core加载入浏览器页面当中,并把浏览器的代理设置为Selenium Server的Http Proxy
  3. 执行用例向Selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作并注入 JS 代码
  4. Selenium Core执行接受到的指令并操作
  5. 当浏览器收到新的请求时,发送http请求
  6. Selenium Server接收到浏览器发送的Http请求后,自己重组Http请求,获取对应的Web页面
  7. Selenium Server中的Http Proxy把接受到的页面返回给浏览器


python selenium UI 自动化 selenium自动化原理_Selenium_03

 

python selenium UI 自动化 selenium自动化原理_Server_04

 

 

(2)Selenium2.0

 

Selenium 2.0 = Selenium 1.0 + WebDriver需要强调的是,在Selenium 2.0中主推的是WebDriver,可以将其看作Selenium RC的替代品。因为Selenium为了保持向下的兼容性,所以在Selenium 2.0中并没有彻底地抛弃Selenium RC。所以,在学习Selenium2.0的时候,核心是学习WebDriver。它的工作原理是这样的:

 

python selenium UI 自动化 selenium自动化原理_Selenium_05

 

(3)关于Webdriver

  • WebDriver是什么?
  • 是一层基础的协议规范。(参考https://www.w3.org/TR/2013/WD-webdriver-20130117/
  • WebDriver不会执行用例, 把写好这些操作页面元素的方法(用例)组织起来执行并输入测试结果,是由编程语言的单元测试框架去完成的。 
  • WebDriver按照Server-Client设计:
  • Server端是Remote Server,可以是任意的浏览器,脚本启动浏览器后,该浏览器是Remote Server,之后等待Client发送请求并作出响应。
  • Client端:简单可认为是测试代码
  • Selenium RC和WebDriver什么关系?
  • RC和 WebDriver 类似,都可以看做是一套操作web页面的规范。工作原理不一样。
  • selenium RC 在浏览器中运行 JavaScript 应用,使用浏览器内置的 JavaScript 翻译器来翻译和执行selenese 命令(selenese 是 selenium 命令集合)。不管什么浏览器都通过JavaScript处理。
  • WebDriver原理:通过原生浏览器API或者浏览器扩展直接控制浏览器。WebDriver 针对各个浏览器而开发,取代了嵌入到被测 Web 应用中的 JavaScript。与浏览器的紧密集成支持创建更高级的测试,选择浏览器最容易接受的语言来处理,避免了JavaScript 安全模型导致的限制。除了来自浏览器厂商的支持,WebDriver 还利用操作系统级的调用模拟用户输入。过程如下:
  • Webdriver启动目标浏览器,并绑定到指定端口。该启动的浏览器实例作为web driver 的remote server;
  • Client端通过CommandExcuter发送HTTPRequest给remote server的侦听端口(通信协议: the webdriver wire protocol);
  • Remote server需要依赖原生的浏览器组件(如IEDriver.dll,chromedriver.ext),来转化浏览器的native调用。


python selenium UI 自动化 selenium自动化原理_Server_06

                        

 

 

(4)Selenium3.0

  • 去掉了RC,简单用公式表示为:Selenium 3.0 = Selenium 2.0 + Selenium RC(Remote Control)
  • Selenium3.0只支持Java8版本以上。
  • Selenium3.0中的Firefox浏览器驱动独立了,以前装完selenium2就可以驱动Firefox浏览器了,现在和Chrome一样,必须下载和设置浏览器驱动。
  • MAC OS 集成Safari的浏览器驱动。默认在/usr/bin/safaridriver 目录下。
  • 只支持IE 9.0版本以上。