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 注释,支持数据驱动的测试,强大的执行模型等。
原文转自:http://www.ibm.com/developerworks/cn/java/j-lo-selenium/index.html