QTP识别对象的原理(转)
QTP识别对象的原理(转)
一.QTP识别对象的原理
QTP要求先在仓库文件里定义仓库对象,里面存有实际对象的特征属性的值,
运行的时候,QTP会根据仓库对象的特征属性描述,寻找到实际对象,然后操作实际对象。
仓库对象TO一般在录制/编写脚本时加入仓库文件,它不仅可以在编写时进行修改,
也可以在运行过程中进行动态修改,以匹配实际对象。
相关的几个函数有:
GetTOProperty():取得仓库对象的某个属性的值
GetTOProperties():取得仓库对象的所有属性的值
SetTOProperty():设置仓库对象的某个属性的值
GetROProperty():取得实际对象的某个属性的值
理解了TO的含义,你就可以自由的用SetTOProperty()定义TO,以灵活的操作RO
比如有个测试任务,窗口上有很多待检查的记录,每条记录右边都有一个Check按钮,用来检查各条记录。
记录个数不定,所以Check按钮个数也就不定,只有一个Edit显示记录个数。
我们要对每条记录进行检查,也就是要点击每个Check按钮。
但是Check按钮个数不定,不好录制,而且个数可能也很多(上百个),即使能一一录制,那也很麻烦。
那我有一个好办法,只录制一个按钮对象,它设有两个特征属性 label=OK, index=0
然后用下面的脚本,就可以完成测试
buttonNum = CInt(JavaWindow("Test\").JavaEdit("Record Num").GetROProperty("value"))
For buttonIndex = 0 to buttonNum - 1
JavaWindow("Test").JavaButton("Check").SetTOProperty("index", buttonIndex)
JavaWindow("Test").JavaButton("Check").Click
Next
或者窗口上有New、Modify、Delete、Check等好几个按钮,要把这几个按钮一一按过去
我在对象仓库里只设置一个按钮对象AnyButton,label特征属性值填任意值,然后用下面脚本执行测试
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "New")
JavaWindow("Test").JavaButton("AnyButton").Click
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Modify")
JavaWindow("Test").JavaButton("AnyButton").Click
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Delete")
JavaWindow("Test").JavaButton("AnyButton").Click
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Check")
JavaWindow("Test").JavaButton("AnyButton").Click
另外,QTP还支持脚本描述的方法来定义和访问对象,即不需要在仓库里定义,也能访问和操作实际对象
如上面两个任务,可以如下实现
1. 不需要在仓库里定义Check按钮对象,直接用下面脚本来实现测试
buttonNum = CInt(JavaWindow("Test").JavaEdit("Record Num").GetROProperty("value"))
For buttonIndex = 0 to buttonNum - 1
JavaWindow("Test").JavaButton("label:=Check", "index:="+CStr(buttonIndex)).Click
Next
2. 不需要在仓库里定义New、Modify、Delete、Check按钮对象,直接用下面脚本来实现测试
JavaWindow("Test").JavaButton("label:=New").Click
JavaWindow("Test").JavaButton("label:=Modify").Click
JavaWindow("Test").JavaButton("label:=Delete").Click
JavaWindow("Test").JavaButton("label:=Check").Click
二.操作对象的原理
QTP为用户提供了两种操作对象的接口,一种就是对象的封装接口,另一种是对象的自身接口。
对象的自身接口是对象控件本身的接口,只要做过软件开发,使用过控件的人应该很清楚。
对象的封装接口是QTP为对象封装的另一层接口,它是QTP通过调用对象的自身接口来实现的。
两种接口的脚本书写格式的差别在于:
自身接口需要在对象名后面加object再加属性名或方法名,
封装接口就不用在对象名后面加object。
比如操作JavaEdit对象,通过QTP封装的封装接口,脚本如下:
设置JavaEdit的内容:
JavaDialog("Add NE").JavaEdit("NE Name").Set "NE1"
读取JavaEdit的内容:
msgbox JavaDialog("Add NE").JavaEdit("NE Name").GetROProperty("value")
如果通过JavaEdit的自身接口,脚本如下:
设置JavaEdit的内容:
JavaDialog("Add NE").JavaEdit("NE Name").object.setText("NE1")
读取JavaEdit的内容:
Msgbox JavaDialog("Add NE").JavaEdit("NE Name").object.getText()
QTP执行JavaEdit().Set语句时,是通过执行JavaEdit().object.setText()来实现的。
QTP执行JavaEdit().GetROProperty("value"),是通过执行JavaEdit().object.getText()来实现的。
JavaEdit对象的封装接口Set()和GetROProperty("value"),是QTP封装JavaEdit对象的自身接口setText()和getText()而得来的。
对象的封装接口是QTP使用的缺省接口,我们录制出来的脚本都是使用封装接口,大家用的也都是封装接口。
但是封装接口不如自身接口丰富,因为QTP只是封装了部分常用的自身接口嘛。
所以我们在需要时,可以绕过封装接口,直接调用对象的自身接口。
不过有些自身接口不够稳定,在实践中偶尔会出现问题,但是概率很少。
封装接口有相应功能的话,就尽量用封装接口吧!
理解了封装接口和自身接口的原理,我们就可以更加灵活的操作对象了。
但是我们怎么知道对象都有哪些封装接口和自身接口呢?
其实很简单,用对象查看器(Object Spy)查看对象,在查看窗口里有列出这些接口,包括属性和方法。
窗口中间有选择栏让你选择Run-time Object或者Test Object,
当你选择Run-time Object时,它显示的就是对象的自身接口(自身的属性和方法)
当你选择Test Object时,它显示的就是对象的封装接口(封装的属性和方法)
明白了这些,你还等什么呢?快拿起对象查看器,看看对象都有哪些封装接口和自身接口,肆意的操作它,玩弄它吧!
QTP常用函数说明(转)
2008-05-30 10:18:05
Left函数
返回Variant (String),其中包含字符串中从左边算起指定数量的字符。
语法
Left(string,length)
Left函数的语法有下面的命名参数:
部分 | 说明 |
string | |
length | 必要参数;为Variant (Long)。数值表达式,指出将返回多少个字符。如果为0,返回零长度字符串("")。如果大于或等于string的字符数,则返回整个字符串。 |
说明
欲知string的字符数,使用Len函数。
注意 LeftB函数作用于包含在字符串中的字节数据。所以length指定的是字节数,而不是要返回的字符数。
Mid函数
从字符串中返回指定数目的字符。
Mid(string, start[, length])
参数
string
字符串表达式,从中返回字符。如果string包含Null,则返回Null。
Start
string中被提取的字符部分的开始位置。如果start超过了string中字符的数目,Mid将返回零长度字符串("")。
Length
要返回的字符数。如果省略或length超过文本的字符数(包括start处的字符),将返回字符串中从start到字符串结束的所有字符。
说明
要判断string中字符的数目,可使用Len函数。
下面的示例利用Mid函数返回字符串中从第四个字符开始的六个字符:
Dim MyVar
MyVar = Mid("VB脚本is fun!", 4, 6) 'MyVar包含"scrīpt"。
注意 MidB函数与包含在字符串中的字节数据一起使用。其参数不是指定字符数,而是字节数。
Len函数
返回字符串内字符的数目,或是存储一变量所需的字节数。
Len(string| varname)
参数
string
任意有效的字符串表达式。如果string参数包含Null,则返回Null。
Varname
任意有效的变量名。如果varname参数包含Null,则返回Null。
说明
下面的示例利用Len函数返回字符串中的字符数目:
Dim MyString
MyString = Len("VBscrīpt") 'MyString包含8。
注意 LenB函数与包含在字符串中的字节数据一起使用。LenB不是返回字符串中的字符数,而是返回用于代表字符串的字节数。
Right函数
从字符串右边返回指定数目的字符。
Right(string, length)
参数
string
字符串表达式,其最右边的字符被返回。如果string参数中包含Null,则返回Null。
Length
数值表达式,指明要返回的字符数目。如果为0,返回零长度字符串;如果此数大于或等于string参数中的所有字符数目,则返回整个字符串。
说明
要确定string参数中的字符数目,使用Len函数。
下面的示例利用Right函数从字符串右边返回指定数目的字符:
Dim AnyString, MyStr
AnyString = "Hello World" '定义字符串。
MyStr = Right(AnyString, 1) '返回"d"。
MyStr = Right(AnyString, 6) '返回" World"。
MyStr = Right(AnyString, 20) '返回"Hello World"。
注意 RightB函数用于字符串中的字节数据,length参数指定返回的是字节数目,而不是字符数目。
InStr函数
返回某字符串在另一字符串中第一次出现的位置。
InStr([start, ]string1,string2[,compare])
参数
start
可选项。数值表达式,用于设置每次搜索的开始位置。如果省略,将从第一个字符的位置开始搜索。如果start包含Null,则会出现错误。如果已指定compare,则必须要有start参数。
string1
必选项。接受搜索的字符串表达式。
string2
必选项。要搜索的字符串表达式。
compare
可选项。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。如果省略,将执行二进制比较。
设置
compare参数可以有以下值:
常数 | 值 | 描述 |
vbBinaryCompare | 0 | 执行二进制比较。 |
vbTextCompare | 1 | 执行文本比较。 |
返回值
InStr函数返回以下值:
如果 | InStr返回 |
string1为零长度 | 0 |
string1为Null | Null |
string2为零长度 | start |
string2为Null | Null |
string2没有找到 | 0 |
在string1中找到string2 | 找到匹配字符串的位置 |
start > Len(string2) | 0 |
说明
下面的示例利用InStr搜索字符串:
Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP" '要搜索的字符串。
SearchChar = "P" ' Search for "P".
MyPos = Instr(4, SearchString, SearchChar, 1) '在位置4进行的文本比较。返回6。
MyPos = Instr(1, SearchString, SearchChar, 0) '在位置1进行的二进制比较。返回9。
MyPos = Instr(SearchString, SearchChar) '默认情况下,进行的是二进制比较(省略了最后的参数)。返回9。
MyPos = Instr(1, SearchString, "W") '在位置1进行的二进制比较。返回0(找不到"W")。
注意 InStrB函数使用包含在字符串中的字节数据,所以InStrB返回的不是一个字符串在另一个字符串中第一次出现的字符位置,而是字节位置。
LTrim、RTrim与Trim函数
返回不带前导空格(LTrim)、后续空格(RTrim)或前导与后续空格(Trim)的字符串副本。
LTrim(string)
RTrim(string)
Trim(string)
string参数是任意有效的字符串表达式。如果string参数中包含Null,则返回Null。
说明
下面的示例利用LTrim, RTrim,和Trim函数分别用来除去字符串开始的空格、尾部空格、开始和尾部空格:
Dim MyVar
MyVar = LTrim(" vbscrīpt ") 'MyVar包含"vbscrīpt "。
MyVar = RTrim(" vbscrīpt ") 'MyVar包含" vbscrīpt"。
MyVar = Trim(" vbscrīpt ") 'MyVar包含"vbscrīpt"。
Rnd函数示例
本示例使用Rnd函数随机生成一个1到6的随机整数。
TAG:
我的栏目
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | 5 | 6 | ||||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 |
我的存档
数据统计
- 访问量: 111181
- 日志数: 670
- 建立时间: 2007-07-19
- 更新时间: 2013-03-11