|
最近准备用Selenium自动化录制测试脚本,稍微总结一下。
Selenium的主页是http://seleniumhq.org
Selenium包括很多组件,其中我现在用的是Selenium RC和Selenium IDE。Selenium IDE是Firefox的一个插件,我们可以使用它录制页面操作。
Selenium IDE安装完毕之后,可以从工具菜单中激活,然后我们就可以在firefox中访问需要测试的网页,进行各种页面操作,Selenium IDE在这个过程中会记录我们的页面控件和动作。完成录制之后,Selenium IDE生成一个HTML文件保存脚本,比如
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head profile="http://selenium-ide.openqa.org/profiles/test-case">
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <link rel="selenium.base" href="http://www.baidu.com/" />
- <title>baidu</title>
- </head>
- <body>
- <table cellpadding="1" cellspacing="1" border="1">
- <thead>
- <tr><td rowspan="1" colspan="3">baidu</td></tr>
- </thead><tbody>
- <tr>
- <td>open</td>
- <td>/</td>
- <td></td>
- </tr>
- <tr>
- <td>type</td>
- <td>kw</td>
- <td>ckword</td>
- </tr>
- <tr>
- <td>clickAndWait</td>
- <td>sb</td>
- <td></td>
- </tr>
- </tbody></table>
- </body>
- </html>
复制代码
我们可以导出成Java文件,比如:- package com.example.tests;
- import com.thoughtworks.selenium.*;
- import java.util.regex.Pattern;
- public class NewTest extends SeleneseTestCase {
- public void setUp() throws Exception {
- setUp("http://www.baidu.com/", "*chrome");
- }
- public void testNew() throws Exception {
- selenium.open("/");
- selenium.type("kw", "ckword");
- selenium.click("sb");
- selenium.waitForPageToLoad("30000");
- }
- }
复制代码 只要导入相应的selenium和Junit包就可运行。
有一点需要注意的是在回放脚本时,应该添加setSpeed方法,参数是ms,因为Selenium IDE虽然可以选择回放速度(慢——中——快),但实际上即使选择慢速,Selenium IDE仍然运行的有些快,导致其在顺序执行用户操作时,可以发生没等到页面加载完毕就执行下一个命令的现象,导致下一个命令找不到响应的页面控件。除了setSpeed之外,Selenium IDE还可以添加大量的命令。具体见Selenium IDE界面。
另外一个关键是如何识别页面控件。自动化的核心是录制的控件识别方法可以复用,Selenium IDE支持的识别格式包括ID、Name、XPath:attributes、DOM index和XPath : position,而且允许正则表达式,所以非常灵活,根据我使用的情况来看,对于富客户端应用,控件ID通常都增加了一个随机数,不适合做识别,Name还不错,但是如何这个控件Name带有版本信息,比如控件在不断升级,从1.3升到1.4,那么Name可以会失效,要小心。XPath: position我用的最多,也觉得定位最准。但是Selenium IDE有时抓不到某些操作,比如,可以某一个Logout链接,是由span来实现的,此时Selenium IDE抓不到,此时可以XPath:attributes识别,这样写://span[text()='Log out'],搞定。
对于Selenium IDE,还有很多细节需要学习,比如正则表达式的应用,如何写出通用的识别方法,等等。我准备使用Selenium IDE录制脚本,然后导出成java文件,做一些修改之后用Selenium RC驱动。
原文 http://www.ckword.com/blog/?p=36 |
|