1.2 Selenium WebDriver
大名鼎鼎的Selenium在2004年由一个名为Jason Huggins的年轻人开发。当时,Jason Huggins在芝加哥的ThoughtWorks公司工作,他的主要职责是为内部的时间和费用(Time and Expense)系统开发一个基于Java脚本的运行测试系统(Java Script Test Runner)。作为一个推崇自动化的技术人员,他意识到与其手工测试每次改动,不如用一个程序来代替自己,以便有效利用自己的时间。
于是他开发了一个可以驱动页面进行交互的JavaScript库,用于让浏览器测试后自动返回测试结果。这个库最初只是一些能够与Web页面进行交互的JavaScript的函数库,但它为Selenium RC和Selenium IDE的核心部分奠定了基础。随着库内函数的不断丰富,Selenium也就逐渐发展成了一个实现模拟人类操作浏览器行为的项目。
讲到这里,我们要再提起Selenium的名字。如果你翻查字典,就会惊讶地发现Selenium这个单词和自动化测试一点关系也没有,它是化学元素硒的英文名。硒对汞(英文名为Mercury,元素符号为Hg)有拮抗作用。这其中存在着一定的历史渊源:在早期,ThoughtWorks公司想过购买用于商业测试的Mercury系列工具(QTP、LR和TD),但因这家起步不久的公司难以负担起这一系列商业测试工具的高昂费用而购买失败。ThoughtWorks在成功开发出自己的测试工具后就将其进行了开源,并且起名为Selenium,来表达自己的情绪。
在2006年,Google已是Selenium的重要用户,但是Google的测试工程师不得不绕过它的限制进行测试,因为浏览器对JavaScript资源产生的同源问题,以及浏览器在安全性方面的提高,导致Selenium有很大局限性。他们需要一款更先进的测试工具,用这个工具通过浏览器和操作系统的本地方法来直接和浏览器进行交互,以解决在长期以来使用Selenium时遇到的问题。于是Google的工程师Simon Stewart开始对Selenium进行二次开发,这个项目被命名为WebDriver(后来被称为Selenium WebDriver)。WebDriver项目的目的就是解决使用Selenium时产生的问题。
Selenium的项目在历史上存在3个重大版本,分别是Selenium 1.0(见图1-1)、Selenium 2.0和Selenium 3.0。Selenium1.0版本的主要内容是Selenium RC(Remote Control),现在已经被官方正式弃用,不再推荐用户使用Selenium RC。
可以说Selenium 1.0和Selenium 2.0最大的区别就在于WebDriver。在Selenium官方网页上有这样一个等式:
Selenium 1.0+WebDriver=Selenium 2.0
现在比较先进并被广泛使用的版本是Selenium 3.0。Selenium 3.0也包含了Selenium WebDriver,但与之前版本不同的是,它移除了对Selenium RC核心代码的支持。
Selenium Grid(见图1-2)和Selenium IDE(见图1-3)则一直独立在Selenium的主要项目之外,作为一个分支而存在。
图1-1 Selenium RC
图1-2 Selenium Grid
图1-3 Selenium IDE
细心的读者不难发现,三种图标的区别在于右上角的小标志。
Selenium Grid的主要目的在于允许用户在多台机器上进行并行测试。换句话说,Selenium Grid支持分布测试,可以让用户的自动化测试在一个分布式环境中运行。
现行的Selnium主要分为两个部分—— Selenium WebDriver和Selenium IDE。前者主要用来创建基于浏览器的回归自动化套件和测试,后者主要用来创建快速的bug重现脚本,以帮助用户进行自动化辅助的探索性测试。具体的Selenium项目的工具分支如图1-4所示。
图1-4 Selenium项目的工具分支
Selenium项目在未来将更加标准化,即加大对W3C(万维网联盟)标准的践行,取消对部分不符合W3C标准的WebDriver内容的支持。