Selenium简介 2018-04-20
分类:
core
Tags:
core
Selenium简介
Selenium的前世今生
Selenium1.0
- 2004年,ThoughtWorks公司的Jason Huggins为了减少手工测试的工作量,实现了一套基于JavaScript语言的代码库,这套代码库逐步发展为Selenium Core.在Selenium Core的基础上,最终诞生了Selenium 1.0.
- Selenium是一个划时代的web自动化测试工具,它允许测试工程师使用不同的开发语言来控制不同类型的浏览器,从而实现不同的测试目标。但是由于互联网发展及浏览器对于JavaScript语言的安全限制,Selenium无法突破JavaScript沙盒的限制,Selenium的发展遇到了瓶颈,导致很多测试场景的需求难以实现。
Selenium2.0(WebDriver)
- 2006年,Google的工程师Simon Stewart开启了一个叫做WebDriver的项目,此项目可以直接让测试工具调用浏览器和操作系统本身提供的内置方法,以此来绕过JavaScript环境的沙盒限制,WebDriver项目的目标就是解决selenium的痛处。2008年,Selenium和WebDriver进行了合并,Selenium 2.0诞生了,即我们现在常用的Selenium WebDriver,简称WebDriver.
Selenium工具套件
- Selenium RC(Selenium 1.0):Selenium Remote Control。远程控制,也就是通过脚本操作浏览器。它允许测试人员使用一种程序语言根据需求扩张测试脚本的复杂度、延展度。主要包括三部分:launcher,http proxy,selenium core。
- Selenium Core:Selenium 核心内容,是IDE和RC的引擎。内部由JavaScript函数构成,通过调用这些函数来实现对浏览器的各种操作。
-
Selenium IDE(集成开发环境):一款Firefox 插件。具有录制、编辑以及回放脚本的功能,易于上手,对于初学者可以开发一些简单的测试脚本。
-
Selenium WebDriver(Selenium 2.0):由Selenium 和WebDriver合并而成。它支持WebDriver API和底层技术以及在WebDriver API下的Selenium 1.0的技术。Selenium 2.0仍然可以运行于Selenium 1.0的Selenium RC接口以支持向后兼容。
- Selenium Grid:允许同时在不同的环境上运行多个测试任务,实现测试脚本的并发执行。
Selenium1.0(Selenium RC)与WebDriver实现原理
Selenium RC 工作原理
- Selenium RC 组件:
- Selenium Server控制浏览器,解释和执行测试代码,同时作为HTTP代理,用拦截和处理浏览器和服务器之间的HTTP请求
- Client Library提供每个编程语言和Selenium Server的接口,负责自动化脚本部分,用来发送命令给selenium server,同时接收测试结果
- Selenium Server组成部分:
- Launcher-发射器,启动浏览器,把Selenium Core注入到浏览器中,设置Selenium Server为HTTP 代理
- HTTP Proxy-server的HTTP代理
- Selenium Core-嵌入到浏览器的js代码
- Selenium RC工作流程
Selenium RC的代理模式的实现机制如下图所示

- 我们运用client Library编写代码,编写测试用例,然后执行,通过接口向Selenium server发送http请求,和server建立连接
- selenium server用launcher启动浏览器,并把selenium-core这个JS代码注入到浏览器。
- server接受测试命令(The Server receives the Selenese commands from your test program using simple HTTP GET/POST requests.—原网站解释),并转换为JS命令发送给浏览器,core执行,控制浏览器进行模拟操作。
- 浏览器如果向服务器发送请求,selenium server接收到浏览器的HTTP请求后,发送给服务器,在接收到服务器返回时,自己重组返回的信息,以此欺骗浏览器是从同一个服务器返回(为了绕过浏览器的安全机制:同源策略,Selenium Core的JS脚本的“源”是localhost)
总结:由此见了Selenium 1是通过往浏览器里嵌入JS,同时发送JS命令来控制浏览器,因为每个浏览器对JS的解释机制不同,而且安全限制等,造成了Selenium 1的局限性。
WebDriver工作原理
- WebDriver与Selenium RC的JavaScript注入实现不同,它直接自用浏览器内部接口来操作浏览器。因此对于不同平台中的浏览器,必须依赖浏览器内部的Native Component(原生组件)来实现把WebDriver API调用转化为浏览器内部接口的调用。
- 各种WebDriver的工作原理如下图所示

从上图中我们可以看出,不同浏览器的WebDriver子类,都需要依赖特定的浏览器原生组件,例如运行Firefox就需要一个add-on名字叫webdriver.xpi。而IE的话就需要用到一个dll文件来转化Web Service的命令为浏览器native的调用。另外,图中还标明了WebDriver Wire协议是一套基于RESTful的web service
Selenium1.0和WebDriver对比
Selenium1.0的优缺点
- 优点:
- Selenium 1.0能够在多种操作系统上支持多种浏览器的自动化测试,而且针对每一种浏览器都支持很多种开发语言。
- 缺点:
- 没有原生的鼠标和键盘事件
- XSS/HTTP同源数据问题,只能使用JavaScript插入方式进行网页操作的模拟测试
- popup dialog问题:基本身份认证,自签名的证书和文件上传/下载框体无法处理
WebDriver的优缺点
- 优点
- WebDriver可以绕过JavaScript沙盒限制。
- Selenium 1.0要求真实的浏览器环境,而WebDriver可以直接操作HtmlUnit驱动,而不用打开浏览器。针对某些浏览器比如说Firefox运行比较慢的情况,我们可以采用HtmlUnit驱动在系统内存中迅速的执行。
- 一些selenium 1.0没有解决的问题,比如说“原生的鼠标和键盘事件”,WebDriver可以通过调用系统的API来实现。
- WebDriver基于浏览器的内部接口实现自动化测试,更接近用户使用的真实情况
- WebDriver提供了更简洁的面向对象的API,提高了测试脚本的编写效率
- WebDriver使用过程无须单独启动Selenium Server
- 缺点
- WebDriver不支持并行测试,而Selenium Grid可以。