1、Selenium是什么?
Selenium的命名比较有意思,当时QTP mercury是主流的商业自化工具,是化学元素汞(俗称水银),而Selenium是开源自动化工具,是化学元素硒,硒可以对抗汞。
Selenium 是web自动化测试工具集,包括IDE、Grid、RC(selenium 1.0)、WebDriver(selenium 2.0)等,主要用于Web应用程序的自动化测试。
关系
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,它的工作原理是这样的:
- 测试用例通过Http请求建立与 selenium-RC server 的连接
- Selenium RC Server 驱动一个浏览器,把Selenium Core加载入浏览器页面当中,并把浏览器的代理设置为Selenium Server的Http Proxy
- 执行用例向Selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作并注入 JS 代码
- Selenium Core执行接受到的指令并操作
- 当浏览器收到新的请求时,发送http请求
- Selenium Server接收到浏览器发送的Http请求后,自己重组Http请求,获取对应的Web页面
- Selenium Server中的Http Proxy把接受到的页面返回给浏览器
(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。它的工作原理是这样的:
(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调用。
(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版本以上。