51Testing软件测试论坛

标题: 用QTP的描述性编程高亮显示任意对象 [打印本页]

作者: songfun    时间: 2007-5-15 20:34
标题: 用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 编辑 ]
作者: denisye    时间: 2007-5-15 21:52
学习中..............
作者: winfood    时间: 2007-5-16 09:32
sdlkfj3
斑竹提供的代码太有意思了,计算器的1-9按钮可以依次高亮显示。

代码里面有个地方不明白,能不能解释一下。高亮显示WinButton的那个方法是Highlight,这个方法是整个脚本的关键。但是查过VBScript和QTP之后,发现其中都没有提到这个方法。
在QTP中也对其它没有公布这个方法的控件使用了这个方法,比如
Browser("***").Page("***").WebButton("***").Highlight
发现也可以高亮显示WebButton。
Highlight方法是不是VBScript或者QTP隐藏的一个方法?
作者: czh84063149    时间: 2007-5-16 09:33
好像有点复杂
作者: surlary    时间: 2007-5-16 10:21
楼主的脚本感觉有些舍近求远啊,我觉得这样就足够了:

  1. Window("regexpwndclass:=SciCalc").Restore
  2. Window("regexpwndclass:=SciCalc").Activate
  3. Set objs = Window("regexpwndclass:=SciCalc").ChildObjects()

  4. For i = 0 to objs.Count - 1
  5.         If objs(i).GetROProperty("visible") then objs(i).HighLight
  6. Next


复制代码

作者: songfun    时间: 2007-5-17 00:04
标题: 请注意看我帖子的标题:任意对象!
你没看懂程序的真正含义。

你只是单纯的理解去高亮显示计算器而已,而我的程序实际上可以高亮显示任意对象——只是列举了计算器为例子,实际上换个其他对象也可以。


原帖由 surlary 于 2007-5-16 10:21 发表
楼主的脚本感觉有些舍近求远啊,我觉得这样就足够了:

Window("regexpwndclass:=SciCalc").Restore
Window("regexpwndclass:=SciCalc").Activate
Set objs = Window("regexpwndclass:=SciCalc").ChildObje ...

[ 本帖最后由 songfun 于 2007-5-17 00:06 编辑 ]
作者: wish_luckyman    时间: 2007-6-22 17:52
........
作者: MarsNoNo    时间: 2007-8-12 22:59
锋哥,这些隐藏的方法,你是怎么得到的?
像以前你就告诉过我“getvisibletext”,现在又来了一个“highlight”?
你的思维越来越广了~~~我想偷你的思维了……
作者: yabest    时间: 2007-8-13 01:36
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 编辑 ]
作者: zhangj8826    时间: 2007-8-15 11:55
sdlkfj2
作者: machao514    时间: 2008-3-28 12:35
原帖由 yabest 于 2007-8-13 01:36 发表
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 编辑 ]
作者: xmylll    时间: 2008-10-30 16:29
原帖由 songfun 于 2007-5-17 00:04 发表
你没看懂程序的真正含义。

你只是单纯的理解去高亮显示计算器而已,而我的程序实际上可以高亮显示任意对象——只是列举了计算器为例子,实际上换个其他对象也可以。



可是QTP真有那么神奇吗?看着有些代码根本都不像代码,居然还能运行。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2