51Testing软件测试论坛

标题: QTP中对象的Window Id属性,如何通过Win Api方法进行获取? [打印本页]

作者: qq6666566    时间: 2009-6-8 17:27
标题: QTP中对象的Window Id属性,如何通过Win Api方法进行获取?
在QTP中用Spy功能定位窗口信息的时候,可以看到一条Window ID,请问如何越过QTP,通过Win Api提供的方法直接得到该值?
小弟不才,多方搜索均未果,请各位大侠不吝指点!
在线等候!
谢谢!
作者: qq6666566    时间: 2009-6-8 17:48
自己顶一下,千万别沉了。高手们是不是还没下班啊。。。继续等待。。。
作者: shanxi    时间: 2009-6-8 18:02
应该是Control ID
作者: qq6666566    时间: 2009-6-8 18:16
先谢过大侠! 不知道Control id可以用什么方法得到啊?
作者: fei.ge    时间: 2009-6-8 19:22
关注,学习......
作者: qq6666566    时间: 2009-6-8 19:39
等不到答案,怕是今晚睡不好觉了。。。
作者: qq6666566    时间: 2009-6-9 15:13
继续等待~
作者: intothestorm    时间: 2009-6-9 15:35
你为什么要越过QTP?
作者: qq6666566    时间: 2009-6-9 20:35
标题: 回复 8# 的帖子
举个例子,在QTP中,Window Id是识别对象时自动抓取的,而且是在测试运行之前保存于Object Repository里面的,无法在运行测试时实时更新。
如果项目中所有对象的Window Id信息是由开发提供的,每个对象的Window Id在不同版本都会变化,而Object Text信息因为软件的多语言开发不能作为唯一识别符,那么是否可以通过读取开发人员提供的Window Id列表文件,达到给对象的Window Id灵活赋值的目的?因为每个版本更改的对象、更改的Window Id数量太大了,无法通过QTP手动去更新,这也就是问题的所在。
查找了QTP的帮助文档,没发现QTP提供接口返回对象的属性信息(例如Window Id、Object text),这才想到通过Win Api去查询。。。
请各位站友不吝赐教,不知道有没有什么更好的方法?
作者: intothestorm    时间: 2009-6-10 11:07
Win API 估计有通过HWND去获得window id的方法,但是HWND怎么获得呢,通过qtp提供的getRoProperty,
问题又绕回来了,必须通过window id去识别唯一的控件。是先有鸡还是先有蛋呢。
作者: intothestorm    时间: 2009-6-10 11:17
我的OR里也有一些开发自定义的控件,需要通过win id去唯一标示,但是这些值都是长期不变的,你可以向开发提要求。
如果你被开发无情地驳回 ,可以考虑我想到的一个方法:

将你的OR导出为XML,做一份开发提供的控件名称与下面的Name映射表。
开发控件Name XXX->Name="YACLSimpleVObj"
开发控件WinId  NNN->10019
然后写个脚本,根据这个映射关系将10019替换为NNN

<qtpRep:Object Class="WinObject" Name="YACLSimpleVObj">
<qtpReproperties>
<qtpReproperty Name="window id" Hidden="0" ReadOnly="0" Type="NUMBER">
<qtpRep:Value RegularExpression="0">10019</qtpRep:Value>
</qtpReproperty>
作者: qq6666566    时间: 2009-6-10 14:03
标题: 回复 11# 的帖子
很有帮助!
感谢这为仁兄!
作者: rayblue    时间: 2009-6-10 14:09
你是说Win API的findwindow吧?可以根据控件的title来获取的,自己写一个dll然后调用就可以了




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