(51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。)
第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) { //实例化Selenium1对象 ISelenium selenium = new DefaultSelenium("localhost", 4444, "*firefox", http://www.360buy.com); selenium.Start(); //打开京东登录页面 selenium.Open("https://passport.360buy.com/new/login.aspx"); //填写符合xpath的用户名文本框、密码文本框,单击登录 selenium.TypeKeys(@"//input[@id='loginname']", "UserName1"); selenium.TypeKeys(@"//input[@id='loginpwd']", "Password"); selenium.Click(@"//input[@id='loginsubmit']"); } |
程序清单5-2 Selenium 2的代码
static void Main(string[] args) { //实例化Selenium2对象 IWebDriver driver = new FirefoxDriver(); //打开京东登录页面 INavigation navigation = driver.Navigate(); navigation.GoToUrl(https://passport.360buy.com/new/login.aspx); //分别获取用户名文本框,密码文本框,登录按钮 IWebElement loginName = driver.FindElement(By.Id("loginname")); IWebElement loginPwd = driver.FindElement(By.Id("loginpwd")); IWebElement loginButton = driver.FindElement(By.Id("loginsubmit")); //输入用户名,密码,单击登录 loginName.SendKeys("UserName1"); loginPwd.SendKeys("Password"); loginButton.Click(); } |
可以看到Selenium 2与Selenium 1存在很明显的差异。尽管它们都属于浏览器自动化的API,但对于用户来说,Selenium 1提供的更多的是基于方法的API,所有方法都在一个类中开放,而Selenium 2的API则面向对象,不同的对象拥有不同的操作方法。
5.2 安装并引用Selenium 2
Selenium 2的下载地址为:http://seleniumhq.org/download/,位于“Selenium Client Drivers”栏,选择使用的编程语言版本下载即可,这些包中同时包含了Selenium 1和Selenium 2的文件,如图5-1所示。
图5-1 下载Selenium 1
由于在本书中的Selenium示例都将采用C#或Java编写,因此需要至少掌握C#或Java中的一种语言。如果您是C#或Java的初学者,可以先在网上参阅相关的资料。
接下来分别介绍如何在C#和Java的 IDE环境中进行使用并创建程序。
5.2.1 在C#IDE中使用Selenium C#
下载之后进行解压,可以看到两个不同的文件夹,一个是.Net 3.5版本,另一个是.Net 4.0,可以根据自己的版本进行选择,然后进入对应版本的文件夹,如图5-2所示。
图5-2 Selenium .Net类库
接下来分别介绍部分文件的作用。
Castle.Core.dll:Castle的核心,它是个轻量级容器,实现了IoC(Inversion of Control)模式的容器,基于此核心容器所建立的应用程序,可以达到程序组件的松散耦合,让程序组件可以进行验证,这些特性使得可以简化整个应用程序的架构,并且使得易于维护此文件与测试的关系不大。
Ionic.Zip.dll:用于压缩和解压的库文件,可以把文件压缩成WinZip格式,也可以从该格式中解压。此文件与测试的关系不大。
Selenium.WebDriverBackedSelenium.dll:通过这个类库,可以实现用Selenium 1的语法来执行Selenium 2。这是一种过渡性方案,基本是针对老的Selenium 1代码,让它们以最小的代价迁移到Selenium 2去。
ThoughtWorks.Selenium.Core.dll:Selenium 1的主要API文件,在使用Selenium 1自动化测试时就靠这个类库来实现。
WebDriver.dll:Selenium 2的主要API文件,在使用Selenium 2进行自动化测试时主要就靠这个类库来实现。它是本章关注的重点。
WebDriver.Support.dll:WebDriver支持类,起辅助作用。其中包含一些HTML元素选择、条件等待、页面对象创建等的辅助类。本章将对其进行详细介绍。
至于.pdb类型的程序数据库文件,一般用于dll文件的调试,与Selenium 测试本身没多大关系。而.xml文件则是各个dll文件的API参考文档,应该仔细研究。
C#编程使用的是Visual Studio,Visual Studio 2010的下载地址是:
http://www.microsoft.com/visualstudio/zh-cn/download
关于Visual Studio的安装,可参见:
http://www.cnblogs.com/eastson/archive/2012/05/30/2525831.html
安装结束后,打开Visual Studio,然后选择“新建”→“项目”菜单命令,如图5-3所示。
图5-3 选择“新建C#项目1”菜单命令
在弹出的“新建项目”对话框中选择“控制台应用程序”,如图5-4所示。
图5-4 “新建项目”对话框
创建完毕后,将打开新建立的项目,可以看到默认创建了一个名为Program.CS的类文件,如图5-5所示。
图5-5 默认创建的Program.CS类文件
在解决方案资源管理器中,用鼠标右键单击“引用”,选择“添加引用”,如图5-6所示。
打开“添加引用”窗口,选择与WebDriver相关的dll文件,单击“确定”按钮,如图5-7所示。
图5-6 “添加引用”命令 图5-7 选择相关的.dll文件
在解决方案资源管理器中可看到该引用,如图5-8所示。
然后在main函数中输入如图5-9中所示的代码,然后按F5执行。
图5-8 添加引用3 图5-9 C#代码
运行结果如图5-10所示。
在本章中的C#程序都可按照这种方式进行创建。
图5-10 C#运行结果
5.2.2 在Java IDE中使用Selenium
下载之后进行解压,可以看到如图5-12所示的内容。
这些文件和文件夹的作用如下。
Libs文件夹:其中包含各种Java相关的基础框架。
CHANGELOG:记录了Selenium的变更情况,可以用记事本将其打开阅读。
Selenium-java-2.25.0.jar:Selenium 1和Selenium 2的主要API文件,在进行自动化测试时主要就靠这个类库来实现。
Selenium-java-2.25.0-srcs.jar:Selenium的部分源码,感兴趣的读者可以仔细研究。
运行Java程序和Selenium 服务器都需要先安装JDK,JDK的下载地址为:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
注意下载时要选择对应的操作系统版本,下载后直接单击“下一步”按钮安装即可。
然后安装Eclipse,下载地址是:
http://www.eclipse.org/downloads/
下载Eclipse Classic,然后解压即可使用。
1.创建Java项目
(1)打开Eclipse,然后选择New→Java Project,如图5-13所示。
图5-13 Java Project菜单命令
(2)在打开New Java输入Project name,JRE选择当前安装的JRE,然后单击Finish,如图5-14所示。
图5-14 New Java Project对话框
(3)进入项目页面,在Package Explorer中右键单击该项目名称,选择New→Class命令,如图5-15所示。
图5-15 选择Class菜单命令
(4)输入包名称和类名称,并勾选Public static void main以生成main函数,如图5-16所示。
本文选自《Selenium自动化测试指南》第五章节,本站经人民邮电出版社和作者的授权,近期将进行部分章节的连载,敬请期待!
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
相关文章:
新书介绍:Selenium自动化测试指南—51Testing鼎力推荐
选择浏览器开始测试—Selenium自动化测试指南(2)