在测试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. JavaScript闭包理解的关键 - 作用域链

    阮一峰的一篇文章已经对闭包的用途.概念讲解地相对清晰了. 闭包就是能够读取其他函数内部变量的函数. 但我认为里面对于作用域链的解释还不够清晰,这里作一些补充. 闭包之所以可以读取外部函数的内部变量,即 ...

  2. TCP/IP笔记 四.应用层(1)——DNS

    1. DNS DNS(Domain Name System ):域名系统,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机 ...

  3. Linux相关问题-CentOS6.5 x64版本号下Tomcat无法自启动的解决的方法

    前段时间使用阿里云server.使用的是Linux CentOS6.5系统,在搭建完Tomcat后发现,Tomcat无法自启动. 将启动tomcat的命令为tomcat_home/bin/startu ...

  4. 【Android病毒分析报告】 - ZxtdPay 吸费恶魔

    本文章由Jack_Jia编写,转载请注明出处.  文章链接:http://blog.csdn.net/jiazhijun/article/details/11581543 作者:Jack_Jia    ...

  5. 改变status bar的状态

    两种改变status bar状态的方法 一 :(全局的) 直接在当前控制器中(一般是在navigationcontroller) //- (UIStatusBarStyle)preferredStat ...

  6. 关于Repeater中使用DorpWownList的问题

    关于Repeater中使用DorpWownList的问题 前台: <asp:Repeater ID="Repeater1" runat="server" ...

  7. Nginx小技巧(一)隐藏版本号

    修改nginx.conf server_tokens作用域是http server location语句块 server_tokens默认值是on,表示显示版本信息,设置server_tokens值是 ...

  8. 基于原生js的图片延迟加载

    当页面图片比较多的时候,我们通常会做一个延迟加载,避免页面打开时一下子的请求数太多,加载过慢影响用户体验. 如果项目用了jquery框架,则可以直接用 jquery.lazyload.可在jquery ...

  9. QT https post请求(QNetworkRequest要设置SSL证书,而SSL证书认证有三种,实测成功)

    以VS开发为例.因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com ...

  10. jQuery入门学习贴

    先引一下阮一峰大牛翻译的书<软件随想录>中的一句话: “ joel认为,软件开发,最缺的是天才.而我认为,最缺的是全才.什么“全”:全面.全局.全心全意.全力以赴. ” 最近再学习jQue ...