SilkTest天龙八部系列7-动态对象识别
在测试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-动态对象识别的更多相关文章
- SilkTest天龙八部系列4-ChildWin
一直觉得SilkTest的ChildWin不好理解,今天大致看了一下,其实它和DialogBox每啥区别,也是一种window类型.帮助里面说,典型的ChildWin就是文档窗口.在Windows上, ...
- SilkTest天龙八部系列3-动态父窗口
SilkTest中用parent语句来声明某个window的父窗口,这会帮助silktest在识别该对象时检查其是否是由该父窗口打开,如果parent语句申明的父窗口并不存在,那么该对象无法被正确识别 ...
- SilkTest天龙八部系列1-初始化和构造函数
SilkTest没有提供专门的构造函数机制,但是在类对象生成的过程中,会先初始化在类中申明的变量.我们可以在初始化该变量的时, 调用某些函数完成对象初始化工作,看上去好像是调用了构造函数一样.不过要记 ...
- SilkTest天龙八部系列5-类的属性
SilkTest的面向对象机制让用户可以为类定义属性,用property语句实现.除此以外用户在类中还可以定义成员变量和不可变的setting属性.也就是是说Silktest类中可以有以下三种属性/变 ...
- SilkTest天龙八部系列6-用open agent进行测试
SilkTest支持两种测试模式,一种是用classic agent,另一种就是用我们今天要介绍的open agent. open agent可以提供和classic agent差不多的录制回放功能. ...
- C/C++注册动态对象到Lu系统并进行运算符重载
欢迎访问Lu程序设计 C/C++注册动态对象到Lu系统并进行运算符重载 1 说明 要演示本文的例子,你必须下载Lu32脚本系统.本文的例子需要lu32.dll.lu32.lib.C格式的头文件lu32 ...
- C/C++对Lu系统内置动态对象进行运算符重载
欢迎访问Lu程序设计 C/C++对Lu系统内置动态对象进行运算符重载 1 说明 要演示本文的例子,你必须下载Lu32脚本系统.本文的例子需要lu32.dll.lu32.lib.C格式的头文件lu32. ...
- C++基础知识:动态类型识别
1.动态类型指的是基类指针所指向的对象的实际类型 2.C++中的多态根据实际的对象类型调用对应的虚函数(1)可以在基类中定义虚函数返回具体的类型信息(2)所有的派生类都必须实现类型相关的虚函数(3)每 ...
- lodash用法系列(2),处理对象
Lodash用来操作对象和集合,比Underscore拥有更多的功能和更好的性能. 官网:https://lodash.com/引用:<script src="//cdnjs.clou ...
随机推荐
- [Windows编程] #pragma once 和#ifndef ... #define ... #endif 比较
C++中防止头文件被多次include 的常见方式有: 1) 用#ifndef ... #define ... #endif 宏 #ifndef __MYHEADER_H__#define __M ...
- Mobile上的viewport及各种概念澄清贴
device Pixel & CSS Pixel 物理像素指显示设备上的物理像素点,比如HTC G11宽是480px,这的480是用物理像素衡量的. CSS像素的话则指我们写页面时理解的那个像 ...
- 制作cdlinux u盘启动
U盘一个 CDlinux的iso镜像文件 UltraISO grub4dos grubinst 方法/步骤1 1 [第一步]:用UltraISO把CDlinux的镜像刻录进U盘. 打开UltraISO ...
- POJ 1655 - Balancing Act 树型DP
这题和POJ 3107 - Godfather异曲同工...http://blog.csdn.net/kk303/article/details/9387251 Program: #include&l ...
- OC学习那些事:点语法
1.使用自定义的方法创建get/set方法 Person.h文件: #import <Foundation/Foundation.h> @interface Person : NSObje ...
- android AChartEngine源代码
昨天翻自己曾经下过的apache开源project项目,看到一个AChartEnginee看了一下自带的Demo才意识到这个东西的强大.立刻想把源代码down一份,在CSDN上有人挂5分让人下载,实在 ...
- zend framework多模块配置
上次接触zend framework已经很久远了,10年的事情了.最近在做一个项目,时间不紧,就又把ZF拿出来折腾.而我发现以前做ZF的记忆已经在我脑中如梦幻泡影,消失无踪,为了配置多模块还又去查了资 ...
- 集合ArrayList案例
1.添加元素,读取 ArrayList n = new ArrayList(); n.Add();//集合中添加元素用Add,分别添加了1,2 n.Add(); foreach (int a in n ...
- 使用PHP搭建自己的MVC框架
一.什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...
- python成长之路16
阅读(72) 一:jQuery是一个兼容多浏览器的javascript类库,核心理念是write less,do more(写得更少,做得更多),对javascript进行了封装,是的更加便捷的开发, ...