web测试工具-selenium用法(二)

来源:互联网 发布:什么叫云计算 编辑:程序博客网 时间:2024/04/27 01:16
6)下面的过程讲述如何使用JAVA编写Selenium测试。
(6.1)
我这里用javaEclipse来举例。
简单的来说,
1.
先去 http://selenium-rc.openqa.org/download.jsp下载selenium包:selenium-remote-control-1.0.1-dist.zip。解压。
2.
用命令行来到解压的文件夹下:\selenium-remote-control-0.9.2\selenium-server-0.9.2
3.
运行: java -jar selenium-server.jar启动selenium server (务必启动!!)
4.
Eclipse创建一个项目,在项目的build path里面加上junit.jarselenium-java-client-driver.jar(这个在刚解压的包里面)
5.
先利用firefox selenium IDE来录制检测页面检测功能用的junit代码。
6.
在项目里面新建一个class(junit用例):将上面的junit代码帖于此。
7.
根据eclipse的错误提示来增加相应要import的类
8.
在进行测试前,最好将对应浏览器关闭,否则容易出错。
9.
然后在Eclipse里运行RunAs -> unit Test”即可看到自动化的范例.
10.
运行期间,会弹出ie窗口,自动进行操作测试。检测完后,若junit显示为“绿色”则表示成功。
(6.2)
下面粘贴一下那个测试小程序
import com.thoughtworks.selenium.SeleneseTestCase;

public class Untitled extendsSeleneseTestCase {
 public void setUp() throws Exception {
//
由于selenium*firefox不支持3.6版本的.只能支持3.0版本.所以,最好将selenium IDE录制的代码中的firefox改为ie进行测试。
  //setUp("http://www.google.cn/","*firefox");
  setUp("http://www.google.cn/","*iexplore");
 }
 public void testUntitled() throws Exception{
  selenium.open("/");
  selenium.type("q","baidu");
  selenium.click("btnG");
  selenium.waitForPageToLoad("30000");
  selenium.click("link=
百度一下,你就知道");
               //
添加断言进行测试:
//  assertTrue(selenium.isTextPresent("OpenQA:Selenium"));  //
测试出错,程序退出
  assertTrue(selenium.isTextPresent("
百度一下,你就知道")); //测试成功,程序继续 
 }
 //
用于让测试的页面关闭.若不写,则页面不会关闭
 public void tearDown() throws Exception {
  selenium.stop();
 }
}
(7)
7.1
selenium
常用操作有:open,type,click,select,selectFrame:
1. open("/")
打开的是当前的网址;selenium.open("/dmmc/"):在当前的网址后面追回/dmmc/;
2. type,click,select,selectFrame
各方法使用时,对元素的定位都可采用元素IDxpath方式;
3. type,click,select,selectFrame
去选择元素时,可以直接用元素的ID作为标记:selenium.type("loginName", "coship");;
4.
采用xpath方式时,则格式如://元素名1[元素属性名1='元素属性值1']/元素名2[元素属性名2='元素属    性值2']/....
  
如:selenium.type("//input[@name='admin.password']","coship")

7.2
常用命令用法:
1)
type
的两种不同定位方式:
selenium.type("loginName", "coship");
//
以下语句的"xpath="可以省略
selenium.type("xpath=//input[@name='admin.password']","coship");
2)
click
的两种不同定位方式:
selenium.click("imageField"); 
即是通过ID定位:<input type="submit"value="  " id="imageField">
selenium.click("//input[@type='submit']"); (
通过属性input-type)
selenium.click("//input[@value='
确定']");  (通过属性input-value)
selenium.click("//input[@name='devTypeIds' and @value='000002']")(
还可通过属性@id)
3)
点击链接方式:
对于动态内容的获取,尽量避免采用第一种方式(若内容变了,则出错),而采用第二种方式.
实现方式一:
点击链接:<ahref=..>801830456628</a>
selenium.click("link=801830456628");
实现方式二:
获取id=adminListtable中的tbody下的第三行,第二列中的a href元素。
selenium.click("//table[@id='adminsList']/tbody/tr[3]/td[2]/a");
4)
选择下拉框:
实现方式一:
selenium.select("status", "label=
启用");
即是:<selectid="status"><optionvalue="1">启用</option></select>
实现方式二:
selenium.select("xpath=//SELECT[@id='status']","index=1"); 
具体应用,请见以下实例。

7.3
实例:
用于检测abmc系统各模块功能是否正常。
方式:
selenium IDE录制abmc系统各模块功能操作.(前提是:这些操作,这些功能都是正确成功),以后当abmc系统升级,更改后,即可运行此脚本,来检查升级是否影响系统功能实现。若系统更改有错,则selenium中运行中某一步骤时,会出错退出。
如:
系统更改后导致某一页面打不开,这时selenium运行到此页面时,就不能继续往下操作,就会出错而退出。

注意:
1.
同时,也可在测试代码中添加一些断言判断来判断成功,失败。
2.
对于firefox selenium IDE录制的脚本要进行适当的修改,尽量让selenium用元素ID来定位操作元素,而不通过元素名(元素名易变化)
3.
selenium RC检测代码出错,也不一定是系统升级有问题,可能是系统升级后,有些数据删除,修改了,selenium RC在回放操作时,找到原来录制时对应的数据而出错。

具体代码如下:
//
对于click,select,selectFrame去选择元素时,可以直接用元素的ID作为标记.//:selenium.click("元素ID");

public class AbmcSeleniumTest extendsSeleneseTestCase {
  public void setUp() throwsException {
    setUp("http://192.31.52.103:8080/","*iexplore");
  }

  public void testUntitled()throws Exception {
    selenium.open("/abmc/");
    
    //type
的两种不同定位方式
    selenium.type("loginName","coship");
                                //
以下语句的"xpath="可以省略
    selenium.type("xpath=//input[@name='admin.password']","coship");        
    
//    selenium.click("imageField");    
即是通过ID定位:<input type="submit"value="       id="imageField">
    selenium.click("//input[@type='submit']");        
    
    //
等待一个新的页面加载。以毫秒为单位,超过后该命令将返回错误。    
    selenium.waitForPageToLoad("30000");    
        //
即选择<frame src="device/index.jsp"id="mainFrame">
    selenium.selectFrame("mainFrame");
    //
对于动态内容的获取,尽量避免采用第一种方式(若内容变了,则出错),而采用第二种方式
    //
点击链接:<ahref=..>801830456628</a>
//    selenium.click("link=801830456628");    
    //
实现方式二:获取id=adminListtable中的tbody下的第三行,第二列中的a href元素。
    selenium.click("//table[@id='adminsList']/tbody/tr[3]/td[2]/a");
     selenium.waitForPageToLoad("30000");
    selenium.click("//input[@value='
返回']");
    selenium.waitForPageToLoad("30000");
    //
因为有多个查看应用列表,若不指定,默认获取第一个
    selenium.click("link=
查看应用列表");
    selenium.click("btn_dsure");
    //
方式一:
//selenium.click("//a[@onclick=\"showPage('
应用列表','deviceAppList.action?device.swType=2&device.deviceId=0000257&device.deviceName=801830456628&device.specName=DevTyp',750,400)\"]");
    //
方式二:
    selenium.click("//table[@id='adminsList']/tbody/tr[3]/td[5]/span[1]/a");
    selenium.click("btn_dsure");
    selenium.selectFrame("relative=up");
    selenium.selectFrame("leftFrame");
    selenium.click("link=
应用文件管理");
    selenium.click("link=
应用文件信息");
    selenium.selectFrame("relative=up");
    selenium.selectFrame("mainFrame");
    selenium.click("//a[@onclick=\"showPage('
匹配终端类型','appTypeList.action?application.appId=01&application.appName=maliao',750,400)\"]");
    selenium.click("btn_dsure");
    selenium.click("//table[@id='adminsList']/tbody/tr[7]/td[8]/span[2]/a");
    selenium.waitForPageToLoad("30000");
    selenium.click("//input[@name='devTypeIds'and @value='000002']");
    selenium.click("//input[@value='
确定']");
    selenium.waitForPageToLoad("30000");
    selenium.click("//a[@onclick=\"showPage('
匹配终端类型','appTypeList.action?application.appId=01&application.appName=maliao',750,400)\"]");
    selenium.click("btn_dsure");
    selenium.selectFrame("relative=up");
    selenium.selectFrame("leftFrame");
    selenium.click("link=
终端应用管理");
    selenium.click("link=
终端应用许可");
    selenium.selectFrame("relative=up");
    selenium.selectFrame("mainFrame");
    //    selenium.select("status","label=
启用");即是:<selectid="status"><optionvalue="1">启用</option></select>
    selenium.select("xpath=//SELECT[@id='status']","index=1");    
    selenium.click("//input[@type='image']");
    selenium.waitForPageToLoad("30000");
    selenium.click("//input[@type='image']");
    selenium.waitForPageToLoad("30000");
    selenium.selectFrame("relative=up"); 
    //
即选择<frame src="device/index.jsp"id="mainFrame">
    selenium.selectFrame("topFrame");    
    selenium.click("link=
注销"); 
    //
若要测试其它的网页,可以继续selenium.open(..)
  }
}

关于selenium RC其它命令用法,可以参照附件上的"selenium API"


原创粉丝点击