在测试web应用时,我们常常需要面对web页面对象变化频繁,并且使用预定义方式识别对象慢的困难。为了解决这些问题,SilkTest引入了dynamic object recognition技术,它使用xpath来查找和识别界面上的对象。它可以使用Find和FindAll方法来识别这些对象,从而避免了在页面更改后不得不频繁改变frame.inc的问题。下面我用一个简单的项目来演示一下如何使用dynamic object recognition技术来测试borland提供的web gmo应用。

1. 新建一个xbrowser的project名为gmo


2. 打开IE输入我们要测试的web页
http://demo.borland.com/gmopost/


3. 在silktest中,点击工具栏上的enable extensions,在出现的enable extensions对话框中,选择iexplorer应用的Welcome to Green Mountain Outpost条目。 silktest会自动为其选中win32和xbrowser等extensions功能,你需要点击"enable extensions"按钮来激活它。然后点击close按钮关闭该对话框。


4. 点击basic workflow工具栏上的set recovery system按钮为系统设置一个appstate GMO。这是silktest会自动为你生成一个frame.inc文件,内容如下所示:

[ ] const wMainWindow = InternetExplorer
[ ]
[-] window BrowserApplication InternetExplorer
[-]  multitag TAG_IS_OPEN_AGENT
[ ]  "InternetExplorer"
[ ]
[ ] // The working directory of the application when it is invoked
[ ]  const sDir = "C:/Documents and Settings/ZengYuetian/桌面"
[ ]
[ ] // The command line used to invoke the application
[ ]  const sCmdLine = """C:/Program Files/Internet Explorer/iexplore.exe"" "
[ ]
[ ] // The first window to appear when the application is invoked
[ ] // const wStartup = ?
[ ]
[ ] // The list of windows the recovery system is to leave open

[ ] // const lwLeaveOpen = {?}
[ ]

5.现在你需要手工加入一个appstate GMO
[-] appstate GMO() basedon DefaultBaseState
[ ] window browser = InternetExplorer.Find(".//BrowserWindow")
[ ] browser.navigate("http://demo.borland.com/gmopost/")
它的意义在于运行这个appstate会让浏览器自动导航至待测web页面http://demo.borland.com/gmopost/。同时我们还应该注意到其第二行中使用了Find函数来查找一个XPath为.//BrowserWindow的控件,该控件并未在我们的frame.inc中声明,这就是dynamic object recognition技术和通常我们用的先定义控件后使用的方法最大不同。

6. 新建一个testcase文件gmo_test.t,用record菜单下面的window identifiers来识别页面上的enter GMO online按钮,这个时候你会采集到如下的dynamic object recognition ".//DomButton[@language='JavaScript' and @type='button' and @name='bSubmit' and @value='Enter GMO OnLine']",这个就是该按钮的的XPath,我们并不需要所有的内容,只需要能够唯一标识该按钮的一部分内容,这里我们选择.//DomButton[@name='bSubmit']即可。

7. 在gmo_test.t中输入下面的内容,该测试用例用来进入gmo online page

[-] testcase goto_online() appstate GMO
[ ] window browser = InternetExplorer.find(".//BrowserWindow")
[ ] browser.find(".//DomButton[@name='bSubmit']").click()

8. 运行一下,看看测试用例是否带我们进入了http://demo.borland.com/gmopost/online-catalog.htm页面

SilkTest天龙八部系列7-动态对象识别的更多相关文章

  1. SilkTest天龙八部系列4-ChildWin

    一直觉得SilkTest的ChildWin不好理解,今天大致看了一下,其实它和DialogBox每啥区别,也是一种window类型.帮助里面说,典型的ChildWin就是文档窗口.在Windows上, ...

  2. SilkTest天龙八部系列3-动态父窗口

    SilkTest中用parent语句来声明某个window的父窗口,这会帮助silktest在识别该对象时检查其是否是由该父窗口打开,如果parent语句申明的父窗口并不存在,那么该对象无法被正确识别 ...

  3. SilkTest天龙八部系列1-初始化和构造函数

    SilkTest没有提供专门的构造函数机制,但是在类对象生成的过程中,会先初始化在类中申明的变量.我们可以在初始化该变量的时, 调用某些函数完成对象初始化工作,看上去好像是调用了构造函数一样.不过要记 ...

  4. SilkTest天龙八部系列5-类的属性

    SilkTest的面向对象机制让用户可以为类定义属性,用property语句实现.除此以外用户在类中还可以定义成员变量和不可变的setting属性.也就是是说Silktest类中可以有以下三种属性/变 ...

  5. SilkTest天龙八部系列6-用open agent进行测试

    SilkTest支持两种测试模式,一种是用classic agent,另一种就是用我们今天要介绍的open agent. open agent可以提供和classic agent差不多的录制回放功能. ...

  6. C/C++注册动态对象到Lu系统并进行运算符重载

    欢迎访问Lu程序设计 C/C++注册动态对象到Lu系统并进行运算符重载 1 说明 要演示本文的例子,你必须下载Lu32脚本系统.本文的例子需要lu32.dll.lu32.lib.C格式的头文件lu32 ...

  7. C/C++对Lu系统内置动态对象进行运算符重载

    欢迎访问Lu程序设计 C/C++对Lu系统内置动态对象进行运算符重载 1 说明 要演示本文的例子,你必须下载Lu32脚本系统.本文的例子需要lu32.dll.lu32.lib.C格式的头文件lu32. ...

  8. C++基础知识:动态类型识别

    1.动态类型指的是基类指针所指向的对象的实际类型 2.C++中的多态根据实际的对象类型调用对应的虚函数(1)可以在基类中定义虚函数返回具体的类型信息(2)所有的派生类都必须实现类型相关的虚函数(3)每 ...

  9. lodash用法系列(2),处理对象

    Lodash用来操作对象和集合,比Underscore拥有更多的功能和更好的性能. 官网:https://lodash.com/引用:<script src="//cdnjs.clou ...

随机推荐

  1. 阻止系统自动睡眠的小软件,附C#制作过程

    原文 http://www.cnblogs.com/h46incon/p/SleepPreventer.html 因为有时下载东西的时候,不想让电脑自动深入睡眠,所以就开启了离开模式.这样不但不节能环 ...

  2. spring学习总结(mybatis,事务,测试JUnit4,日志log4j&slf4j,定时任务quartz&spring-task,jetty,Restful-jersey等)

    在实战中学习,模仿博客园的部分功能.包括用户的注册,登陆:发表新随笔,阅读随笔:发表评论,以及定时任务等.Entity层设计3张表,分别为user表(用户),essay表(随笔)以及comment表( ...

  3. Spring Boot Admin Reference Guide

    1. What is Spring Boot Admin? Spring Boot Admin is a simple application to manage and monitor your S ...

  4. 提高IOS开发效率的常用网站、开源类库及工具

    时间过得很快,学习iOS也已经2年左右了.在这里整理一下,在平台平常开发过程中使用比较多的开源类库.网站与工具吧! 一.网站: UI网站: 1.https://www.cocoacontrols.co ...

  5. Warning: Unable to send packet: Error with PF_PACKET send() [11]: Message too long (errno = 90)

    今天在使用tcpreplay重放流量时,发现有的数据包没有发送成功: Warning: Unable to send packet: Error with PF_PACKET send() [215] ...

  6. ASP.NET 母版页和内容页的加载顺序

    Master 模板页Content 内容页如果希望Master页面的数据传给Content页面,请Init如果希望Content页面的数据传给Master页面,请重载Load具体细节不多说了,看下面页 ...

  7. MySQL的字段设计

    1.尽量使用数字,因为文本占空间,不利于查询(针对有限种类文本)

  8. ASP.net体系

  9. CAEmitterLayer 粒子发射器

    在iOS 5中,苹果引入了一个新的CALayer子类叫做CAEmitterLayer.CAEmitterLayer是一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果. CAEm ...

  10. 五毛的cocos2d-x学习笔记05-场景与场景动画,动作

    场景切换函数: Director->getInstance()->replaceScene(Scene*); Director->getInstance()->runWithS ...