用QTP的描述性编程高亮显示任意对象
这里运用描述性编程实现高亮显示计算器中的0到9的按钮对象。把以下代码拷到QTP中,点“运行”,看看效果。
注:本程序以windows XP下的计算器演示,若使用windows 2000的计算器无效。
SystemUtil.Run "C:\WINDOWS\system32\calc.exe","","C:\WINDOWS\system32","open"
For i =0 to 9
HighlightAll Window("regexpwndclass:=SciCalc").WinButton("text:=" & cstr(i) )
Next
Sub HighlightAll(TestObject)
Dim Parent, Desc, Props, PropsCount, MaxIndex, i, Objs
If IsEmpty(TestObject.GetTOProperty("parent")) Then
Set Parent = Desktop
Else
Set Parent = TestObject.GetTOProperty("parent")
End If
Set Desc = Description.Create
Set Props = TestObject.GetTOProperties
PropsCount = Props.Count - 1
For i = 0 to PropsCount
Desc(Props(i).Name).Value = Props(i).Value
Next
Set Objs = Parent.ChildObjects(Desc)
MaxIndex= Objs.Count - 1
For i = 0 to MaxIndex
Objs.Item(i).Highlight
Next
End Sub
[ 本帖最后由 songfun 于 2007-5-15 20:58 编辑 ] 学习中.............. sdlkfj3
斑竹提供的代码太有意思了,计算器的1-9按钮可以依次高亮显示。
代码里面有个地方不明白,能不能解释一下。高亮显示WinButton的那个方法是Highlight,这个方法是整个脚本的关键。但是查过VBScript和QTP之后,发现其中都没有提到这个方法。
在QTP中也对其它没有公布这个方法的控件使用了这个方法,比如
Browser("***").Page("***").WebButton("***").Highlight
发现也可以高亮显示WebButton。
Highlight方法是不是VBScript或者QTP隐藏的一个方法? 好像有点复杂 楼主的脚本感觉有些舍近求远啊,我觉得这样就足够了:
Window("regexpwndclass:=SciCalc").Restore
Window("regexpwndclass:=SciCalc").Activate
Set objs = Window("regexpwndclass:=SciCalc").ChildObjects()
For i = 0 to objs.Count - 1
If objs(i).GetROProperty("visible") then objs(i).HighLight
Next
请注意看我帖子的标题:任意对象!
你没看懂程序的真正含义。你只是单纯的理解去高亮显示计算器而已,而我的程序实际上可以高亮显示任意对象——只是列举了计算器为例子,实际上换个其他对象也可以。
原帖由 surlary 于 2007-5-16 10:21 发表 http://bbs.51testing.com/images/common/back.gif
楼主的脚本感觉有些舍近求远啊,我觉得这样就足够了:
Window("regexpwndclass:=SciCalc").Restore
Window("regexpwndclass:=SciCalc").Activate
Set objs = Window("regexpwndclass:=SciCalc").ChildObje ...
[ 本帖最后由 songfun 于 2007-5-17 00:06 编辑 ] ........ 锋哥,这些隐藏的方法,你是怎么得到的?
像以前你就告诉过我“getvisibletext”,现在又来了一个“highlight”?
你的思维越来越广了~~~我想偷你的思维了…… LZ你这个函数的复杂点并不在于HightLight,而在于搜索所有符合TestObject的RuntimeObjects!
所以最好还是要将函数设计分离,将搜索所有符合TestObject的RuntimeObjects这部分代码独立成一个函数。
这样代码看起来就很好理解,不然大家看了容易糊涂,不知道为什么要搞得这么复杂!
而且搜索对象这个函数可以供其他用途使用。
一时手痒就做了修改,代码如下,见笑了:)
SystemUtil.Run "C:\WINDOWS\system32\calc.exe","","C:\WINDOWS\system32","open"
HightLight_All_Object Window("regexpwndclass:=SciCalc").WinButton("text:=1|2|3|4|5|6|7|8|9|0")
Function Get_All_Runtime_Objects(TestObject, RuntimeObjects)
Dim Parent, Desc, Props, PropsCount
If IsEmpty(TestObject.GetTOProperty("parent")) Then
Set Parent = Desktop
Else
Set Parent = TestObject.GetTOProperty("parent")
End If
Set Desc = Description.Create
Set Props = TestObject.GetTOProperties
PropsCount = Props.Count - 1
For i = 0 to PropsCount
Desc(Props(i).Name).Value = Props(i).Value
Next
Set RuntimeObjects = Parent.ChildObjects(Desc)
Get_All_Runtime_Objects = RuntimeObjects.Count
End Function
Function HightLight_All_Object(TestObject)
Dim allRuntimeObjects
Dim objIndex, objNum
objNum = Get_All_Runtime_Objects(TestObject, allRuntimeObjects)
For objIndex = 0 to ObjNum-1
allRuntimeObjects.Item(objIndex).Highlight
Next
End Function
//原来写错了,allRuntimeObjects.Items(objIndex)要改为allRuntimeObjects.Item(objIndex),多谢hsjzfling兄纠正
[ 本帖最后由 yabest 于 2008-3-28 22:14 编辑 ] sdlkfj2 原帖由 yabest 于 2007-8-13 01:36 发表 http://bbs.51testing.com/images/common/back.gif
LZ你这个函数的复杂点并不在于HightLight,而在于搜索所有符合TestObject的RuntimeObjects!
所以最好还是要将函数设计分离,将搜索所有符合TestObject的RuntimeObjects这部分代码独立成一个函数。
这样代码看起来 ...
这个看起来确实好理解一点,不过好像有点问题,函数HightLight_All_Object中的变量allRuntimeObjects并不能获得RuntimeObjects对象(函数Get_All_Runtime_Objects中)的引用,
当这句objNum = Get_All_Runtime_Objects(TestObject, allRuntimeObjects)运行完毕后,
变量allRuntimeObjects的值并没有任何改变
拙劣之见,望兄台见谅!
[ 本帖最后由 machao514 于 2008-3-28 19:49 编辑 ] 原帖由 songfun 于 2007-5-17 00:04 发表 http://bbs.51testing.com/images/common/back.gif
你没看懂程序的真正含义。
你只是单纯的理解去高亮显示计算器而已,而我的程序实际上可以高亮显示任意对象——只是列举了计算器为例子,实际上换个其他对象也可以。
可是QTP真有那么神奇吗?看着有些代码根本都不像代码,居然还能运行。
页:
[1]