Selenium概述
Selenium是一种Web应用的自动测试工具,通过模拟用户对Web页面的各种操作,可以精确重现软件测试人员编写的Test Cases步骤。Selenium包含三个工具:Selenium-IDE,Selenium-RC以及Selenium-Core。其中,Selenium-Core是驱动Selenium工作的核心部分,作为一个用JavaScript编写的测试引擎,它可以操作Web页面上的各种元素,诸如:点击按钮、输入文本框,以及断言Web页面上存在某些文本与Web元素等。
Selenium-IDE是一个Firefox插件,能够录制回放用户在Firefox中的行为,并把所记录的Selenese(Selenium Commands)转化为Java/C#/Python/Ruby等语言,在Selenium-RC中修改复用。对于较为复杂的Test Cases,Selenium-IDE的功能有限,往往用它录制大致的步骤,再转化为测试人员熟悉的编程语言,在此基础上完善,形成更为强大且灵活的Selenium-RC Test Cases。
Selenium-RC(Selenium Remote Control)在Web浏览器与需要测试的Web应用间架设代理服务器(Selenium Server),使得JavaScript引擎与被测Web应用同源,绕开同源策略的限制(Same Origin Policy),进而取得对Web页面进行各种操作的权限。
开发环境配置
以Java作为测试用语言为例,在Eclipse中新建一个Java项目Test Search Engine,下载Selenium-RC软件包,把selenium server/selenium java client driver的Jar以及JUnit库加入到该项目的Java Build Path。
图1.Build Path配置
启动Selenium-Server,可以在命令行中使用java-jar命令直接运行可执行Jar包(对于中文Windows操作系统且使用IBM JDK,还需要加参数-Dibm.stream.nio=true)。如果想在Java程序中启动/停止Selenium-Server,首先,新建一个RemoteControlConfiguration对象rcc,并指定远程控制参数(包括配置Selenium Server的监听端口,Firefox浏览器的Profile等),然后新建一个SeleniumServer对象,把rcc传入SeleniumServer的构造函数(对于中文Windows操作系统且使用IBM JDK,在Eclipse的Run Configurations的VM arguments中加入-Dibm.stream.nio=true)。
清单1.使用Java启动/停止Selenium Server
RemoteControlConfiguration rcc=new RemoteControlConfiguration();
rcc.setPort(4444);//指定Selenium Server开放端口
SeleniumServer SELENIUM_SERVER;
SELENIUM_SERVER=new SeleniumServer(rcc);
SELENIUM_SERVER.start();//启动server
//测试代码
SELENIUM_SERVER.stop();//停止server
此外,Selenium Server还可以通过Ant脚本来控制启动/停止,这提供了另一种灵活而强大的项目控制方式。
清单2.使用Ant脚本启动/停止Selenium Server
在Selenium-Server启动后,建立一个Selenium类的实例selenium,并通过这个实例与Selenium-Server进行交互,方法如下。
清单3.Selenium实例的启动/停止
Selenium selenium=new DefaultSelenium(java.lang.String serverHost,
int serverPort,
java.lang.String browserStartCommand,
java.lang.String browserURL);
selenium.start();
//经由selenium控制浏览器模拟各种用户操作
selenium.stop();
Selenium实例包含丰富接口,可以对各种Web元素进行各种操作。例如,在谷歌页面中输入“developerWorks”,点击搜索按钮,在结果页面中验证是否包含“developerWorks中国”字样等。
清单4.Selenium测试的简单示例
Selenium selenium=new DefaultSelenium("localhost",4444,"*firefox",
"http://www.google.cn");
selenium.start();//启动浏览器
selenium.open("/");//打开www.google
selenium.type("q","developerworks");//输入文本框
selenium.click("btnG");//点击搜索按钮
selenium.waitForPageToLoad("30000");//等待加载结果页面
verifyTrue(selenium.isTextPresent("developerWorks中国"));//验证是否存在指定字符
selenium.stop();//关闭浏览器
当Selenim遇到TestNG
用Selenium测试Web页面时,所重现的各种行为依赖于测试人员的输入参数,例如:选择下拉餐单的项目,在文本框中输入字符等。不同的测试用例对应不同的输入,若有方法能够简单有效的传入测试用参数,会大大提高测试用例的复用性和可维护性。当Selenium遇到TestNG,这些可以实现。TestNG中的NG,意为Next Generation,事实上,该测试框架引入了不少新特性:灵活的测试配置,支持JDK 5注释,支持数据驱动的测试,强大的执行模型等。