您的位置:软件测试 > 开源软件测试 > 开源功能测试工具 > Selenium
selenium学习笔记
作者:网络转载 发布时间:[ 2013/12/6 16:26:14 ] 推荐标签:

  Selenium是一款开源的web自动化测试工具,可以运行于IE、Firefox等若干浏览器上,驱动web页面元素,如点击按钮、填写表单等等,可以录制用户操作和通过Java、Python等语言来定制,可以说功能相当强大。

  本来这个工具的初衷是用于web开发人员的单元测试或者兼容性测试等,但我发现它对于系统测试也很有用——比如自动化录制系统测试脚本。随着web 2.0技术的不断发展,富客户端应用层出不穷,这给系统测试带来了很大问题——测试脚本随着软件build的不断更新(web页面的很多细节发生变化),无法用于新build的测试,这导致测试人员经常重复性的手动录制脚本,再加上数据关联等工作,耗时费力。

  而Selenium则提供了一个很好的解决方案,它是通过识别web页面元素来定位页面控件,所以通过Selenium录制一次测试脚本,以后每次需要录制脚本时,都使用Selenium驱动第一次的脚本来重新录制(像RPTLoad Runner都用跟踪http请求和响应),这样的话,Selenium基本可以较好的识别修改以后的控件,而RPT等系统测试工具则可以得到正确的http内容,这个过程不再需要测试人员手动录制,完全靠Selenium自动驱动。

  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驱动。

软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd