51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4200|回复: 12
打印 上一主题 下一主题

[求助] QTP中对象的Window Id属性,如何通过Win Api方法进行获取?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-6-8 17:27:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在QTP中用Spy功能定位窗口信息的时候,可以看到一条Window ID,请问如何越过QTP,通过Win Api提供的方法直接得到该值?
小弟不才,多方搜索均未果,请各位大侠不吝指点!
在线等候!
谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2009-6-8 17:48:48 | 只看该作者
自己顶一下,千万别沉了。高手们是不是还没下班啊。。。继续等待。。。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2009-6-8 18:02:47 | 只看该作者
应该是Control ID
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2009-6-8 18:16:17 | 只看该作者
先谢过大侠! 不知道Control id可以用什么方法得到啊?
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2015-9-21 13:50
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    5#
    发表于 2009-6-8 19:22:51 | 只看该作者
    关注,学习......
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2009-6-8 19:39:44 | 只看该作者
    等不到答案,怕是今晚睡不好觉了。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2009-6-9 15:13:18 | 只看该作者
    继续等待~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2009-6-9 15:35:07 | 只看该作者
    你为什么要越过QTP?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
     楼主| 发表于 2009-6-9 20:35:32 | 只看该作者

    回复 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去查询。。。
    请各位站友不吝赐教,不知道有没有什么更好的方法?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2009-6-10 11:07:33 | 只看该作者
    Win API 估计有通过HWND去获得window id的方法,但是HWND怎么获得呢,通过qtp提供的getRoProperty,
    问题又绕回来了,必须通过window id去识别唯一的控件。是先有鸡还是先有蛋呢。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2009-6-10 11:17:20 | 只看该作者
    我的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>
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
     楼主| 发表于 2009-6-10 14:03:10 | 只看该作者

    回复 11# 的帖子

    很有帮助!
    感谢这为仁兄!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2009-6-10 14:09:53 | 只看该作者
    你是说Win API的findwindow吧?可以根据控件的title来获取的,自己写一个dll然后调用就可以了
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-9-19 23:46 , Processed in 0.089551 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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