第5章 Selenium 2(WebDriver)
Selenium 2(即WebDriver)是一种用于Web应用程序的自动测试工具,它提供了一套友好的API,与Selenium 1(Selenium-RC)相比,Selenium 2的API更容易理解和使用,其可读性和可维护性也大大提高。Selenium 2完全就是一套类库,不依赖于任何测试框架,不需要启动其它进程或安装其它程序,也不必像Selenium 1那样需要先启动服务。
另外,二者所采用的技术方案也不同。Selenium 1是在浏览器中运行JavaScript来进行测试,而Selenium 2则是通过原生浏览器支持或者浏览器扩展直接控制浏览器。
Selenium 2针对各个浏览器而开发的,它取代了嵌入到被测Web应用中的JavaScript。与浏览器的紧密集成,支持创建更高级的测试,避免了JavaScript安全模型的限制。除了来自浏览器厂商的支持,Selenium 2还利用操作系统级的调用模拟用户输入。WebDriver支持Firefox(FirefoxDriver)、IE(InternetExplorerDriver)、Opera(OperaDriver)和Chrome (ChromeDriver)浏览器。对Safari的支持由于技术限制在本版本中未包含,但是可以使用SeleneseCommandExecutor模拟。它还支持Android(AndroidDriver)和iPhone(IPhoneDriver)的移动应用测试。此外,Selenium 2还包括一个基于HtmlUnit的无界面实现,称为HtmlUnitDriver。Selenium 2 API可以通过Python、Ruby、Java和C#等编程语言访问,支持开发人员使用他们常用的编程语言来创建测试。
但是,我们不能简单的从版本号就判定Selenium 2比Selenium 1更加先进。严格地说,它们完全属于两个不同的产品而不是简单的升级关系,更像是互补关系。它们之间各有优劣:Selenium 2可以弥补Selenium 1存在的缺点(例如能够绕过JS限制、API更易使用),而Selenium 1也可以解决Selenium 2存在的问题(例如支持更多的浏览器)。
5.1 Selenium 2——基于对象的测试
为什么说Selenium 2是基于对象的测试呢?可以对Selenium 1和Selenium 2的代码进行一下对比,同样是实现系统登录这种简单的操作,它们的代码却各有不同,如程序清单5-1和程序清单5-2所示。
程序清单5-1 Selenium 1的代码
static void Main(string[] args) |
程序清单5-2 Selenium 2的代码
static void Main(string[] args) |
可以看到Selenium 2与Selenium 1存在很明显的差异。尽管它们都属于浏览器自动化的API,但对于用户来说,Selenium 1提供的更多的是基于方法的API,所有方法都在一个类中开放,而Selenium 2的API则面向对象,不同的对象拥有不同的操作方法。