购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 Selenium的历史和分支

Selenium是Jason Huggins在2004年发起的项目,当时他在ThoughtWorks公司开发内部的时间和费用(Time and Expenses)系统,该系统使用了大量的JavaScript。虽然在IE下能够正常执行,但是当他们在其他浏览器上执行时就会经常出现bug,纵然这是因为各浏览器对于JavaScript的兼容性不一致所导致的,而当时的测试工具并没有一个能够符合他们理想的要求,因此他们开始自己尝试寻找新的方法。

最终他们还是把注意力放到了JavaScript上,因为JavaScript是可以被所有浏览器支持的,并且具有驱动浏览器行为的能力,所以Jason和他所在的团队有理由采用JavaScript编写一种测试工具来验证被测应用的行为。他们受到FIT(Framework for Integrated Test)的启发,使用基于表格的语法替代了原始的JavaScript,这种做法支持那些编程经验有限的人在HTML文件中使用关键字驱动的方式来编写测试。该工具最初称为“Selenium”,后来称为“Selenium Core”,在2004年基于Apache 2授权发布。

因为Selenium过去使用纯JavaScript编写,它的最初设计要求开发人员把被测应用、Selenium Core和测试脚本都部署到同一台服务器上以避免触犯浏览器的安全规则和JavaScript沙箱策略。其应用场景的结构如图1-1所示。

图1-1 第1版Selenium的应用场景结构

这个版本的问题是,Selenium Core和Test Script始终需要和被测试的Web Server同时放在一个服务器上,这在部署上就有局限性,测试脚本和被测系统的耦合性较大,而且对于线上环境也并不总是可以这么做。

为了解决这个问题以及其他问题,他们编写了HTTP代理,这样所有的HTTP请求都会被Selenium截获。使用代理可以绕过“同源”策略 的许多限制,从而缓解了首要弱点。这种设计使得采用多种语言编写Selenium成为可能:各语言只需把HTTP请求发送到特定URL。而连接方法则是按照Selenium Core表格语法严格建模,称为“Selenese”。因为操作都是通过远程来控制浏览器的,所以该工具称为“Selenium Remote Control”或者“Selenium RC”。图1-2为第2版Selenium的应用场景结构。

从图1-2中可以看出,被测应用、Selenium Core、测试脚本都不再需要部署到同一台机器上,甚至可以把它们分别部署在不同的机器上。并且图中也给出了第2版Selenium的应用流程。

正当Selenium处于开发阶段的同时,另一款浏览器自动化框架WebDriver也正在ThoughtWorks公司的酝酿之中。WebDriver项目的初衷是把端对端测试与底层测试工具隔离开。通常情况下,这种隔离手段通过适配器(Adapter)模式完成。WebDriver尝试的就是对不同的浏览器进行原生绑定,通过直接驱动浏览器底层API的方式绕开了浏览器的安全模型,代价就是框架自身的开发投入显著增加,并且需要根据浏览器的版本更新而更新;而好处则是更加稳定,支持的浏览器操作更多。

图1-2 第2版Selenium的应用场景结构

结合两者的优势,最终在2009年8月他们的创建者共同决定合并这两个项目,称之为Selenium WebDriver,这就是Selenium 2。而最初的Selenium RC机制仍然维持,帮助WebDriver在某些浏览器不被支持的情况下提供支持。

图1-3为本地版的应用场景,因为没有了Selenium RC,所以应用场景的流程就变得相对简单了。

图1-3 第3版Selenium的应用场景结构 jY3eQUE6oDfkiErZWKx8aExaxxv2Kf4txTv+pX9nj7pvcVl88zeY0CaETmBLej6e

点击中间区域
呼出菜单
上一章
目录
下一章
×