51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 9180|回复: 11
打印 上一主题 下一主题

[原创] 用QTP的描述性编程高亮显示任意对象

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-5-15 20:34:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这里运用描述性编程实现高亮显示计算器中的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 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-5-15 21:52:16 | 只看该作者
学习中..............
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-5-16 09:32:39 | 只看该作者
sdlkfj3
斑竹提供的代码太有意思了,计算器的1-9按钮可以依次高亮显示。

代码里面有个地方不明白,能不能解释一下。高亮显示WinButton的那个方法是Highlight,这个方法是整个脚本的关键。但是查过VBScript和QTP之后,发现其中都没有提到这个方法。
在QTP中也对其它没有公布这个方法的控件使用了这个方法,比如
Browser("***").Page("***").WebButton("***").Highlight
发现也可以高亮显示WebButton。
Highlight方法是不是VBScript或者QTP隐藏的一个方法?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-5-16 09:33:36 | 只看该作者
好像有点复杂
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-5-16 10:21:38 | 只看该作者
楼主的脚本感觉有些舍近求远啊,我觉得这样就足够了:

  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


复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2007-5-17 00:04:49 | 只看该作者

请注意看我帖子的标题:任意对象!

你没看懂程序的真正含义。

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


原帖由 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 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-6-22 17:52:16 | 只看该作者
........
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-8-12 22:59:14 | 只看该作者
锋哥,这些隐藏的方法,你是怎么得到的?
像以前你就告诉过我“getvisibletext”,现在又来了一个“highlight”?
你的思维越来越广了~~~我想偷你的思维了……
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-8-13 01:36:42 | 只看该作者
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 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2007-8-15 11:55:50 | 只看该作者
sdlkfj2
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2008-3-28 12:35:55 | 只看该作者
原帖由 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 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2008-10-30 16:29:20 | 只看该作者
原帖由 songfun 于 2007-5-17 00:04 发表
你没看懂程序的真正含义。

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



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

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-28 05:26 , Processed in 0.072129 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表