
2.2 Selenium家族
Selenium与传统意义上的主流测试工具QTP、JMeter、LoadRunner等不同,用“一个工具”这样的字眼来形容Selenium并不恰当。Selenium是一套Web应用的测试框架,为了满足不同的需要,它提供了几个组件形成了所谓的“Selenium家族”。其家族成员简要介绍如下。
● Selenium IDE:是一个Firefox浏览器的附加组件,提供录制回放功能,可以快速创建测试用例,并且可以将录制生成的脚本转换为多种编程语言的脚本。
● Selenium RC(Remote Control):Selenium RC是一个用Java语言编写的服务端,可以处理测试脚本发送过来的HTTP请求,来操作浏览器。
● Selenium Grid:支持分布式测试,即可以在不同平台、不同浏览器的多台远程机器上同时运行Selenium测试脚本,从而提高测试效率,减少执行时间。
● Selenium WebDriver:正如我们在2.1节的示例,WebDriver是测试脚本的核心。在测试脚本中,通过调用WebDriver对象的方法来操作浏览器。
纵观Selenium的历史,它最初作为ThoughtWorks公司的内部工具使用,2004年被Jason Huggins开发出来,于2005年闻名于世。Selenium Grid在2008年由Philippe Hanrigou开发出来。当时Selenium IDE、Selenium RC、Selenium Grid被统称为Selenium 1.0。直到2009年,开发者们决定将Selenium RC与由另一名ThoughtWorks工程师Simon Stewart开发的WebDriver合并,这便有了Selenium WebDriver,就此开启了2.0时代。
Selenium 2.0是由Selenium 1.0与WebDriver合并产生的。现在看起来,Selenium WebDriver仿佛成了“主角”,但并不意味着Remote Control就毫无用武之地。下文将介绍Selenium RC与WebDriver的工作原理,3.1节将对它们的用法做具体的演示。
简而言之,Selenium IDE是为了方便录制,Selenium Grid是为了提升执行效率,Selenium RC/WebDriver是脚本编写的核心。接下来,让我们深入了解Selenium RC与WebDriver的工作原理,以及它们之间的差异。
如图2-1所示,Selenium RC的工作原理是,在测试脚本执行之前,需要启动Selenium服务端,通过注入JavaScript形成沙箱环境,在沙箱环境中完成测试脚本中指定的浏览器操作。

图2-1 Selenium RC的工作原理
而WebDriver是从浏览器外部来控制的,通过调用浏览器原生接口来驱动,完成页面操作。比如说,当我们的脚本操作Firefox浏览器的时候,WebDriver是用JavaScript来调用API的,而当我们操作IE浏览器的时候,WebDriver就用C++了。
由于有些页面元素在沙箱和浏览器上的展示有很大出入,因此调用浏览器原生接口或许是控制浏览器的最好方式了。但问题是,如果有新的浏览器问世,WebDriver API就无法支持,而Selenium RC可以。
Selenium RC与WebDriver合并之后,也就是Selenium 2.0之后,对于主流的浏览器Chrome、IE、Firefox上的页面操作,可以基于各自的Driver文件(2.1节末尾提到的geckodriver正是Firefox浏览器的Driver文件),而无须启动服务端。同时,还支持RemoteWebDriver,使用方式与Remote Control一致。我们将在第3章对不同的Driver对象进行详细介绍。