这几天自学QTP,所以总结一下自己的知识。
首先,什么是RO和TO?
RO:run-time object,运行时的被测实际对象;
TO:test object,对象库中存储的测试对象。
什么是Get和Set?
顾名思义,Get是取得对象,这个可以从运行的对象中取,也可以从已有的被测对象库中去取;Set是进行设置,正如如果遇到实际测试对象和对象库中的对象不一致时,为了省去重新录制的工作量,我们就可以把正在运行的某个对象加入到对象库中。
运行时,QTP就是以对象库中对象的属性描述,寻找匹配该属性的对象,从而进行操作,仓库中的对象不仅可以在录制时进行自动添加,也可以人工spy添加,同时还支持运行时从实际对象中动态添加。
相关的函数:
GetTOProperty():取得仓库对象的某个属性的值
GetTOProperties():取得仓库对象的所有属性的值
SetTOProperty():设置仓库对象的某个属性的值
GetROProperty():取得实际对象的某个属性的值
仍旧拿计算器来举例:
如果我们想从datatable中取出一个数字,然后对其点击,当前,为了满足能对任意键进行点击,已经在对象库中添加了一个对象名叫AnyButton,属性为text,属性值为任意字符的正则表达式/*。
然后使用如下两句即可完成任何满足text属性的按键的点击,这里我貌似遇到一个问题,不用"text:="+cstr(a)用Anybutton的话
会报错,提示匹配到多个。
window("计算器").WinButton("Anybutton").SetTOProperty "text",a
window("计算器").WinButton("text:="+cstr(a)).Click
再比如,要进行结果比较,从datatable中的值和实际对象属性的值的比较结果得出是否通过,就可以用如下的脚本:
If datatable.Value("Result",dtglobalsheet)=window("计算器").WinEdit("Edit").GetRoProperty("text") then
reporter.ReportEvent micPass,"pass","pass"
end if
关于datatable,reporter,Set/GetToProperty,GetRoproperty的更多的用法,请参考QTP Help。
调试版本是QTP10.0,并附上部分脚本:
systemutil.Run "calc"
'从高位取得一个整数的值,循环点击
Sub NumGet(Num)
Dim i,j
i=len(Num)
ReDim a(i-1)
For j=0 to i-1
a(j)=int (Num / 10 ^ (i-j-1) )
Num=Num mod (10 ^ (i-j-1 ))
ButtonSelect(a(j))
Next
End Sub
'操作满足属性的的对象
Sub ButtonSelect(Butt)
Window("计算器").WinButton("anybutton").SetTOProperty "text",Butt
Window("计算器").WinButton("text:="+cstr(Butt)).Click
End Sub
Dim Divisor,Dividend
Adda=datatable("Divisor",dtGlobalSheet)
Addb=datatable( "Dividend",dtGlobalSheet)
NumGet Divisor
Window("计算器").WinButton("/").Click
NumGet Dividend
Window("计算器").WinButton("=").Click
If datatable.Value("Result",dtglobalsheet)=window("计算器").WinEdit("Edit").GetRoProperty("text") then
reporter.ReportEvent micPass,"pass","pass"
end if
Window("计算器").Close
首先,什么是RO和TO?
RO:run-time object,运行时的被测实际对象;
TO:test object,对象库中存储的测试对象。
什么是Get和Set?
顾名思义,Get是取得对象,这个可以从运行的对象中取,也可以从已有的被测对象库中去取;Set是进行设置,正如如果遇到实际测试对象和对象库中的对象不一致时,为了省去重新录制的工作量,我们就可以把正在运行的某个对象加入到对象库中。
运行时,QTP就是以对象库中对象的属性描述,寻找匹配该属性的对象,从而进行操作,仓库中的对象不仅可以在录制时进行自动添加,也可以人工spy添加,同时还支持运行时从实际对象中动态添加。
相关的函数:
GetTOProperty():取得仓库对象的某个属性的值
GetTOProperties():取得仓库对象的所有属性的值
SetTOProperty():设置仓库对象的某个属性的值
GetROProperty():取得实际对象的某个属性的值
仍旧拿计算器来举例:
如果我们想从datatable中取出一个数字,然后对其点击,当前,为了满足能对任意键进行点击,已经在对象库中添加了一个对象名叫AnyButton,属性为text,属性值为任意字符的正则表达式/*。
然后使用如下两句即可完成任何满足text属性的按键的点击,这里我貌似遇到一个问题,不用"text:="+cstr(a)用Anybutton的话
会报错,提示匹配到多个。
window("计算器").WinButton("Anybutton").SetTOProperty "text",a
window("计算器").WinButton("text:="+cstr(a)).Click
再比如,要进行结果比较,从datatable中的值和实际对象属性的值的比较结果得出是否通过,就可以用如下的脚本:
If datatable.Value("Result",dtglobalsheet)=window("计算器").WinEdit("Edit").GetRoProperty("text") then
reporter.ReportEvent micPass,"pass","pass"
end if
关于datatable,reporter,Set/GetToProperty,GetRoproperty的更多的用法,请参考QTP Help。
调试版本是QTP10.0,并附上部分脚本:
systemutil.Run "calc"
'从高位取得一个整数的值,循环点击
Sub NumGet(Num)
Dim i,j
i=len(Num)
ReDim a(i-1)
For j=0 to i-1
a(j)=int (Num / 10 ^ (i-j-1) )
Num=Num mod (10 ^ (i-j-1 ))
ButtonSelect(a(j))
Next
End Sub
'操作满足属性的的对象
Sub ButtonSelect(Butt)
Window("计算器").WinButton("anybutton").SetTOProperty "text",Butt
Window("计算器").WinButton("text:="+cstr(Butt)).Click
End Sub
Dim Divisor,Dividend
Adda=datatable("Divisor",dtGlobalSheet)
Addb=datatable( "Dividend",dtGlobalSheet)
NumGet Divisor
Window("计算器").WinButton("/").Click
NumGet Dividend
Window("计算器").WinButton("=").Click
If datatable.Value("Result",dtglobalsheet)=window("计算器").WinEdit("Edit").GetRoProperty("text") then
reporter.ReportEvent micPass,"pass","pass"
end if
Window("计算器").Close