`
pengtyao
  • 浏览: 401073 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Web应用自动化验收工具——Selenium系列预研

阅读更多
    最近领导要我和小何一起研究一下自动化测试,并找一下开源的WEB界面自动化测试工具,我锁定了Selenium,小何锁定了Watij,下面是我对Selenium的一些研究以及与Watij的对比。这里感谢一下hyddd写的《Selenium私房菜系列》,是我的入门文章,下面某些内容也是参考了此文。欢迎指正...

1.Selenium工具简介

Selenium是ThoughtWorks公司开发的一套基于WEB应用的验收测试工具,直接运行在浏览器中,模拟客户操作。它抽象出一系列命令来模块用户操作,比如open命令表示打开一个URL,click命令表示点击某个按钮。Selenium实际上将这些命令转化成实际的HTTP请求在浏览器中运行。本系列现在主要包括以下4款:

   1. Selenium Core,它的优点是编写测试案例简单,并且支持绝大多数的浏览器,但缺点也同样明显,Selenium Core需要远程安装,Selenese 语言也限制了复杂案例的可能性,并且没有良好的外部扩展,这是些都会是致命的问题。
   2. Selenium Grid:允许同时并行地、在不同的环境上运行多个测试任务,极大地加快Web 应用的功能测试。
   3. Selenium IDE :支持并且只支持Firefox浏览器,属于Firefox的一个插件,支持的浏览器太少,而依附于Firefox 也不便于日后开展自动化测试,但是,它的录制快捷好用!并且有代码转换功能,可以把Selenium 语言测试用例转为C#,Java,PHP,Ruby,Prel,Groovy,Python等语言的测试案例,我建议使用Selenium IDE + FireBug 进行测试案例的编写,然后转为其他语言的测试用例后,再调用Selenium RC运行测试用例。
   4. Selenium RC(Remote Control) 是本人推荐使用的工具,它支持很多浏览器,可以使用C#,Java 等语言编写测试案例,易于维护,同时提供了很好的扩展性,所以接下来将针对Selenium RC 作为默认的测试工具进行介绍。

所以这里建议采用Selenium IDE + Selenium RC + Firebug组合搭建Web应用自动化验收测试。

2.Selenium-IDE安装和使用

安装

   1. Selenium官网(http://seleniumhq.org/)下载Selenium-IDE作为Firefox的插件进行安装

使用

1.Firefox工具栏,打开Selenium-IDE插件,如下图:



2.选择插件界面中右上角红色录制按钮(开始录制、停止录制都是此按钮),如下图,这里录制登陆集中管理工具的过程。




3.录制完成后,点击回放按钮可以对刚刚录制的脚本进行回放,这里可以调整回放速度。

4.可以将录制的脚本转换成C#,Java,PHP,Ruby,Prel,Groovy,Python等语言,这里选择Java,如下图:




转换后代码如下:

package com.example.tests;

import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;

public class MasterLogin extends SeleneseTestCase {
    public void setUp() throws Exception {
        setUp("http://change-this-to-the-site-you-are-testing/", "*chrome");
    }
    public void testUntitled 2() throws Exception {
        selenium.open("/gm/login.jsf");
        selenium.type("j_username", "tongweb");
        selenium.type("j_password", "tongweb");
        selenium.click("j_security_check");
        selenium.waitForPageToLoad("30000");
    }
}



5.上面转换的代码可以稍加修改便可配合RC使用,修改后代码如下:

 package com.example.tests;

import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;

public class MasterLogin extends SeleneseTestCase {
    public void setUp() throws Exception {
        setUp("http://localhost:9060/", "*firefox");                                        // Modify this line
    }
    public void testMasterLogin() throws Exception {
        selenium.open("/gm/login.jsf");
        selenium.type("j_username", "tongweb");
        selenium.type("j_password", "tongweb");
        selenium.click("j_security_check");
        selenium.waitForPageToLoad("30000");
        assertEquals("TongWeb管理控制台", selenium.getTitle());                    // Judging the testcase is pass or failed by add a assert.
    }
}


3.Selenium-RC安装使用

简介

      Selenium RC(Remote Control)是一个基于java编写的开源测试工具,允许使用多种语言编写自动化的WEB UI测试用例。这个工具提供一个Selenium Server可以启动,停止和控制绝大多数主流浏览器,这个服务器使用AJAX直接和浏览器进行交互,可以使用HTTP GET/POST请求向Selenium Server发送命令。

      Selenium-RC安装包包含两部分:Selenium-server、Selenium-client-driver(各语言版本分别对应一个 client-driver.jar),server为测试服务器,client-driver为测试用例的API(编写测试用例的使用用到)。




安装:

   1. 安装1.5及以上版本的JDK
   2. 官网下载最新版Selenium-RC组件至本地,直接解压便可使用

启动Server:
启动命令java -jar Selenium-server.jar 可以带参数启动,如java -jar selenium-server.jar -interactive为以交互模式启动,这里自己可以将启动操作制作成简单的.bat或.sh脚本,如bat脚本(此脚本与selenium- server.jar在同一级目录下):

 @echo off
rem ---------------------------------------------------------------------------
rem   Start Selenium Server
rem   Add by pengyao 08/26/2010
rem ---------------------------------------------------------------------------

java -jar selenium-server.jar


开发运行测试用例:

这里采用java语言为例来进行说明:

   1. 解压Selenium-RC压缩包,取出selenium-java-client-driver.jar
   2. 打开Java IDE(Eclipse, NetBeans, IntelliJ, Netweaver, etc.)
   3. 新建一个project
   4. 将selenium-java-client-driver.jar导入此project的classpath
   5. 将Selenium-IDE录制好的html脚本转换成java文件,导入新建的project(可能需要稍作修改,如添加assert判断用例是否测试通过),或直接使用selenium-java-client API编写测试用例。本工具同时支持Junit和TestNg测试框架。
   6. 启动Selenium Server
   7. 在Java IDE 或命令行执行编写好的测试用例

4.Selenium-RC工作原理




(1).测试案例(Testcase)通过Client Lib的接口向Selenium Server发送Http请求,要求和Selenium Server建立连接。

(2).Selenium Server的Launcher启动浏览器,把Selenium Core加载入浏览器页面当中,并把浏览器的代理设置为Selenium Server的Http Proxy。

(3).测试案例通过Client Lib的接口向Selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作。

(4).Selenium Core接收到指令后,执行操作。

(5).浏览器收到新的页面请求信息(因为在(4)中,Selenium Core的操作可能引发新的页面请求),于是发送Http请求,请求新的Web页面。
由于Selenium Server在启动浏览器时做了手脚,所以Selenium Server会接收到所有由它启动的浏览器发送的请求。

(6).Selenium Server接收到浏览器的发送的Http请求后,自己重组Http请求,获取对应的Web页面。

(7).Selenium Server的Http Proxy把接收的Web页面返回给浏览器。

5.Selenium-RC优缺点

与Watij对比的优势:
编号 Selenium Watij
1 跨浏览器 仅IE
2 跨操作系统 仅Windows
3 支持多数主流编程语言C#,Java,PHP,Ruby,Prel,Groovy,Python等 仅java
4 提供Hudson插件,容易与Hudson整合 未提供Hudson插件
5 可以录制和回放脚本,并可以将录制好的脚本转换成各种主流编程语言 未提供此功能
6 API强大,文档全 ?
7 属于同类产品中主流,官方资料详细、拥有正规的中文论坛 较主流,资料不是特别多
8 发展迅速 发展缓慢,出现替代产品

缺点:

   1. 对弹出窗口、上传、下载功能测试不太方便,需要借助第三方工具包AutoIt3(但是在使用过程中没有遇见什么问题,可能这个问题是以前版本的问题,而且watij这方面也存在点问题)

6.Selenium-RC与Hudson整合

      Selenium提供了Hudson持续集成插件,可以与Hudson进行整合(这里如果确定采用此工具再具体研究怎么整合)。

7.Selenium-RC常用API

一. 文本框Text box

  1. 向文本框中填写信息

  type(java.lang.String locator, java.lang.String value)  //eg.selenium.type("salutationText", "abc");


  2. 取出某个文本框中已经填写的信息

  java.lang.String  getValue(java.lang.String locator) 
 
    //eg:selenium.getValue("xpath=//input@name='addProfileLastName'");


  3. 判断某文本框是否可编辑


  boolean isEditable(java.lang.String locator)  //eg.selenium.isEditable("xpath=//input@name='addProfileLastName'");


  二.下拉框 Drop down list

  1. 向下拉框中选值

  select(java.lang.String selectLocator, java.lang.String optionLocator)  //eg.selenium.select("typeSelect", "label=Date");


  2. 取出某个下拉框中已经选择的值

  java.lang.StringgetSelectedLabel(java.lang.String selectLocator)  //eg. selenium.getSelectedLabel("xpath=//SELECT@name='addSatution'")


  3. 取出某个下拉框中所有的选项

  java.lang.String[]  getSelectOptions getSelectOptions getSelectOptions(java.lang.String selectLocato getSelectOptionsr)  //eg. selenium.getSelectOptions("//div@id='mysearch_tips'/select")


  三.按钮或链接Button & Link

  单击

  click(java.lang.String locator)  //eg. selenium.click("link=Administration");  //selenium.click("xpath=//input@checkfield='addIndicatorName' and @name='addBtn'");


  四. 单选框或多选框 Radio Box & Check Box

  1. 选择

  check(java.lang.String locator)  //eg. selenium.check("otherPhoneFlag");


  1. 不选

  uncheck(java.lang.String locator)
  //eg. selenium.uncheck("otherPhoneFlag");


  2. 判断是否选择

  booleanisChecked(java.lang.String locator)  //eg. selenium.isChecked("otherPhoneFlag");


  五.表格Table

  1. 取出表中某个单元格的值,下标从 0 开始

 
 java.lang.String getTable(java.lang.String tableCellAddress)  //eg. selenium.getTable("//div@id='profiles-search'/div2/table.1.1");


  六.其他 others

  1. 取某个元素的特定属性值

  java.lang.String getAttribute(java.lang.String attributeLocator)  //eg. selenium.getAttribute("xpath=//img@name='picName'@style")


  2.取某元素的 text 值

  java.lang.String getText(java.lang.String locator)  //eg. selenium.getText("link=Contacts")


  3. 取当前页面的 Title

  java.lang.String getTitle()  //eg. selenium.getTitle()


  4. 判断页面是否有特定的元素

  boolean  isElementPresent(java.lang.String locator)  //eg. booleanisElementPresent(java.lang.String locator)


  5. 判断页面是否有特定文字

  boolean isTextPresent(java.lang.String pattern)


  6. 判断某个元素是否 invisible,图片是空的 the "display" property to "none"或 CSS "visibility" property to "hidden"

  boolean isVisible(java.lang.String locator)  //eg.selenium.isVisible("xpath=//img@name='picName'")

  7. 模拟 Keyup 事件

  keyUp(java.lang.String locator,java.lang.String keySequence)  //eg. selenium.keyUp("creditCardExpMonth", "1");


  8. 打开一个 url,相对或绝对

  open(java.lang.String url)  //eg.selenium.open("/login.aspx");


  9. 刷新页面

 
 refresh()  //eg.selenium.refresh();


  10. 控制每步操作间隔的时间,milliseconds

  setSpeed(java.lang.String value)  //eg. selenium.setSpeed("3000");


  11. 开始一个 Selenium session

    start()  //eg. selenium.start();


  12. 结束测试

  stop()  //eg. selenium.stop();


  13. 等待新页面加载

  waitForPageToLoad(java.lang.String timeout)  //selenium.waitForPageToLoad("60000");


  14. 页面最大化

  windowMaximize()  //eg.selenium.windowMaximize();


8.完整的一个例子

下面是一个完整的创建JDBC连接池和删除JDBC连接池的测试用例:

package com.tongweb.selenium.test;

import com.thoughtworks.selenium.SeleneseTestCase;

/**
 * 集中管理工具中创建一个名为jdbcpool_test连接池,创建成功后进行删除操作,
 * 为了更好的展示界面是如何操作的,所以加入不少sleep语句。
 * @author pengyao  07/09/2010
 *
 */

public class CreateAndDeleteJdbcConnectPoolTestCase extends SeleneseTestCase {
   
    public void setUp() throws Exception {
        setUp("http://localhost:9060/", "*firefox");
    }

    public void testCreateAndDeleteJdbcConnectPool() throws Exception {
        selenium.windowMaximize();
        selenium.open("/gm/login.jsf");
        selenium.type("j_username", "tongweb");
        selenium.type("j_password", "tongweb");
        selenium.click("j_security_check");
        selenium.waitForPageToLoad("30000");
        selenium.selectFrame("mainFrame");
        selenium.click("b1");

        // jdbcpool_test JDBC连接池radio在页面的xpath路径
        String jdbcpool_test = "//tr[td/a='jdbcpool_test']/td[1]/input";
        // 判断如果jdbcpool_test JDBC连接池已存在,则先进行删除操作
        boolean isExist = selenium.isElementPresent(jdbcpool_test);
        if (isExist) {
            selenium.click("//tr[td/a='jdbcpool_test']/td[1]/input");
            Thread.sleep(3000);
            selenium.click("TongWebIndex:j_id_id273");
            Thread.sleep(3000);
            selenium.waitForPageToLoad("30000");

        }
        // 填写必要参数
        selenium.click("TongWebIndex:j_id_id271");
        selenium.waitForPageToLoad("30000");
        selenium.type("createConnectPool:ConnPoolName", "jdbcpool_test");
        selenium.select("createConnectPool:resType",
                "label=javax.sql.DataSource");
        selenium.select("createConnectPool:dataSourceMap",
                "label=MySQL Connector/J Type 4 Driver for MySQL");
        selenium.type("createConnectPool:ConnPoolDesc", "aaa");
        selenium.addSelection("createConnectPool:j_id_id137",
                "label=192.168.11.24:7200");
        selenium.click("createConnectPool:j_id_id148");
        selenium.waitForPageToLoad("30000");
        selenium.type("createConnectPoolProps:username", "root");
        selenium.type("createConnectPoolProps:connURL",
                "jdbc:mysql://192.168.11.24:3306/test?user=root");
        selenium.click("add");
        selenium.type("propName_0", "ddd");
        selenium.type("propValue_0", "ddd");
        selenium.click("createConnectPoolProps:j_id_id372");
        selenium.waitForPageToLoad("30000");
        Thread.sleep(5000);

        // 判断是否创建成功
        assertTrue(selenium.isElementPresent(jdbcpool_test));

        selenium.click("//tr[td/a='jdbcpool_test']/td[1]/input");
        Thread.sleep(3000);
        selenium.click("TongWebIndex:j_id_id273");
        selenium.waitForPageToLoad("30000");

        // 判断是否删除成功
        assertFalse(selenium.isElementPresent(jdbcpool_test));
    }
}
 


9.Selenium常见问题

1.需要把浏览器的启动程序添加至PATH环境变量中,否则会抛出异常。提示不能打开浏览器;

2.如果将浏览器的启动程序添加至PATH环境变量中,还是不能打开浏览器,可能是Selenium版本不支持此浏览器版本,支持信息可以通过查看 Selenium-RC的selenium-server.jar中install.rdf 文件看此Selenium都支持那些版本浏览器;

3. 抛Element not found异常时, 一般有两个原因:一个是页面还没加载完,需要添加一条Thread.sleep()语句;一个可能是查找方式有误,比如xpath或id不正确,或查找顺序不正确;

4.selectFrames进入某个frame后,重新选择其它frame时,有时需要退出本frame,如selenium.selectFrame("relative=up");

5.使用Selenium IDE进行脚本录制时,在TWNS管理控制台对功能树的操作不能录制下来,需要手动添加这部分的脚本 ;

6.有时元素找到了,但是挂在那(比如说一个submit按钮,附带了onclick="return xxx"触发事件,把onclick去掉就好了,这个还没找到好的解决方法)

  • 大小: 22.8 KB
  • 大小: 34.7 KB
  • 大小: 65 KB
  • 大小: 43.9 KB
  • 大小: 36.5 KB
分享到:
评论
6 楼 wjeye 2012-02-24  
路过,学习一下
5 楼 pengtyao 2011-12-04  
libin0019 写道
个人觉得整理别人的资料没什么不好,方便自己查阅,况且楼主也注明了文章的出处,我最近也在做这方面的工作,我们采用的框架是:Selenium WebDriver + TestNg +Autoit3。

我想问楼主几个问题,可否给解答一下?
1、对于模态窗口采用Autoit3的办法解决,应该公限于本地跑测试代码吧,但是如果想使用Selenium Grid 进行并行测试,这时候应该怎么解决模态窗口的问题呢?(这个也是我正在解决的问题)
2、对于数据库中测试数据的恢复问题,楼主在工作中是如何解决的?

感谢理解。
不好意思,你的问题我不能解答,我就简单试用了一下这个工具,后来就没接触了。
4 楼 libin0019 2011-10-31  
个人觉得整理别人的资料没什么不好,方便自己查阅,况且楼主也注明了文章的出处,我最近也在做这方面的工作,我们采用的框架是:Selenium WebDriver + TestNg +Autoit3。

我想问楼主几个问题,可否给解答一下?
1、对于模态窗口采用Autoit3的办法解决,应该公限于本地跑测试代码吧,但是如果想使用Selenium Grid 进行并行测试,这时候应该怎么解决模态窗口的问题呢?(这个也是我正在解决的问题)
2、对于数据库中测试数据的恢复问题,楼主在工作中是如何解决的?
3 楼 pengtyao 2010-09-17  
witcheryne 写道
zx339 写道
您不如也把http://seleniumhq.org/docs/05_selenium_rc.html给出来么?

没细看···楼主文章是 翻译的?????

不是翻译的,是参考网上的一些资料再结合自己使用情况整理的一个文档,高质量和深度肯定是谈不上的,因为自己也就用了两三天而已;还有一楼的那位哥们,我开篇就说明了参考了《Selenium私房菜系列》,您要不屑一顾可以不看,但也许对某些从未用过selenium或web验收测试工具能有个大概的印象
2 楼 witcheryne 2010-09-15  
zx339 写道
您不如也把http://seleniumhq.org/docs/05_selenium_rc.html给出来么?

没细看···楼主文章是 翻译的?????
1 楼 zx339 2010-09-14  
您不如也把http://seleniumhq.org/docs/05_selenium_rc.html给出来么?

相关推荐

    selenium自动化测试实践——基于python语言

    本文介绍的是一本关于Selenium自动化测试的实践指南,它以Python语言为编程基础,提供了一系列自动化测试的实践技巧和实例。以下知识点将详细介绍书中所涉及的关键内容。 首先,了解Selenium。Selenium是一个用于...

    RFS的web自动化验收测试——Selenium2Library1.0.0升级指南(补充

    引言:什么是RFS——RobotFramework+Selenium2library,本系列主要介绍web自动化验收测试方面。之前一直使用Selenium2Library的0.5.2版本,现在官方推出了1.0.0版本,本人在升级过程中遇到了很多的问题,于是痛下...

    Selenium——Web应用程序测试的工具

    Selenium 是一个强大的开源自动化测试框架,主要用于Web应用程序的测试。它允许开发人员编写可运行在多种浏览器和操作系统上的测试脚本,极大地提高了测试的覆盖率和效率。Selenium 支持多种编程语言,如Java、...

    web自动化测试框架及实践,应用python+selenium+pytest集成了web页面的功能巡检、写测试报告以及邮件发送测

    Selenium是一个开源的Web应用程序接口(API),可以模拟用户在浏览器中的操作,如点击按钮、填写表单、导航等,从而实现对Web页面功能的自动化测试。 Pytest是Python的一个测试框架,它提供了灵活且易于使用的测试...

    webUI自动化测试框架(Python+selenium)

    Selenium是一个开源的Web自动化测试工具,它支持多种编程语言,包括Python。Python作为简洁易懂的脚本语言,非常适合编写自动化测试脚本。Selenium与Python的结合使得测试代码编写更为简单,且易于维护。 在描述中...

    Selenium2自动化测试实战 基于Python语言

    《Selenium2自动化测试实战——基于Python语言》是一本针对软件测试工程师,尤其是对Web应用程序自动化测试感兴趣的读者的专业书籍。作者虫师在2016年10月编写了这本书,尽管时间已过去数年,但Selenium作为自动化...

    零成本零成本实现Web自动化测试基于Selenium和Bromine.pdf.zip

    1.着重介绍如何使用selenium和webdriver两种开源的自动化工具,来构建自动化测试体系。 2.已测试googlemail为具体范例提供了完整的web自动化测试解决方案。 3.从实战出发,指引大家使用自动化测试平台。 4.提供...

    Selenium自动化测试:基于Python语言.azw3

    Selenium是一个主要用于Web应用程序自动化测试的工具集合,在行业内已经得到广泛的应用。本书介绍了如何用Python语言调用Selenium WebDriver接口进行自动化测试。主要内容为:基于Python 的 Selenium WebDriver 入门...

    SELENIUM2自动化测试实战基于PYTHON语言

    资源名称:SELENIUM 2 自动化测试实战 基于PYTHON语言内容简介:《Selenium 2自动化测试实战——基于Python语言》共分 14 章。第 1 章是自动化测试相关基础知识的介绍;第 2 章到第 10 章是《Selenium 2自动化测试...

    [零成本实现Web自动化测试-基于Selenium和Bromine].温素剑.扫描版

    《零成本实现Web自动化测试-基于Selenium和Bromine》是温素剑撰写的一本技术书籍,专注于介绍如何在不产生额外费用的情况下,利用开源工具进行高效的Web自动化测试。书中的内容涵盖了一系列与Web自动化测试相关的...

    全栈自动化测试实战 基于testng,httpclient,selenium.appium

    Selenium是一个广泛使用的Web应用程序自动化测试工具,它支持多种浏览器,并且有多种语言绑定,如Java、Python等。Selenium WebDriver是其核心部分,通过模拟用户行为与浏览器进行交互,如点击按钮、填写表单、选择...

    Selenium(Web的自动化测试工具)

    Selenium,作为一款强大的Web自动化测试工具,是软件测试领域不可或缺的一部分。它允许开发者编写脚本,模拟用户在浏览器中的各种交互行为,如点击、填写表单、导航等,从而实现对网页应用的功能验证和性能评估。...

    web自动化,java+selenium,得到视频列表,自动播放视频

    web自动化,java+selenium,得到视频列表,自动播放视频。 环境要求: 1.javaJDK 1.8+; 2.需要在jar包同级目录下创建‘log’目录; 3.需要在jar包同级目录下放置‘chromedriver.exe’文件; 4.需要在jar包同级目录...

    基于java+Selenium实现的Web和接口自动化测试工具

    个人觉得这个工具比任何自动化测试框架都好使,使用关键字和数据双驱动,不需要写一行代码,无需维护脚本,只需要维护用例数据。Web元素只需要在Chrome中复制xPath即可,定位非常高效。 工具安全无木马,目的只为...

    RFS的web自动化验收测试——介绍篇

    引言:什么是RFS——RobotFramework+selenium2library,本系列主要介绍web自动化验收测试方面。  引言:什么是RFS——RobotFramework+selenium2library,本系列主要介绍web自动化验收测试方面。  ==RobotFramework...

    selenium2 python自动化测试 PDF学习

    Selenium,作为一个非常流行的自动化测试框架,支持多种浏览器和操作系统,可以用于自动化Web应用程序的测试。在Python环境中,Selenium与Python结合,可以快速实现Web自动化测试。以下知识点将围绕“Selenium2 ...

    RFS的web自动化验收测试——安装篇

    引言:什么是RFS——RobotFramework+selenium2library,本系列主要介绍web自动化验收测试方面。好久没写东西了,最近没怎么弄QTP了,之前一直想找一个能方便管理QTP对象的东东,FrameworkManage用excel管理虽然是...

    自动化测试工具Selenium书籍(9本)目录知识点(思维导图加图).rar

    自动化测试工具Selenium书籍(9本)目录知识点(思维导图加图).rar 根据如下9本Selenium书籍收集整理: 2013年《Selenium自动化测试指南》 2015年《零成本实现Web自动化测试:基于Selenium WebDriver和Cucumber》 ...

Global site tag (gtag.js) - Google Analytics