51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 17211|回复: 45
打印 上一主题 下一主题

[原创] 浅谈QTP,Window与Index

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-6-20 00:40:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
睡觉之前,在这里浅谈下QTP与Index。多有不是之处,还请大家指点下。
    之前使用QTP测试的VB程序,知道了Index在对象识别时候起到一个很重要的主用,和条街的门牌号一样。某某街某某号,然后QTP就通过这个东西去找出来,而且也是固定不变,因此,大家就开始偏向对描述性编程的喜好与拥护。优势如下:可移植性强,对对象库的依赖减少(一会有人丢我焦皮说我扯蛋,对象库是QTP精华什么的话一句句就出来,等我说完先)
    为什么说到它的移植性强呢,首先,通过对象库去识别对象并保存对象,会出现因为机器环境不同的情况,对象在不同机器上识别为不同类别而导致脚本可移植差。关于对象库的依赖,与上边那点有点类似。
     随着时间的推移,对QTP的了解加深。现在主要是在web方面写的脚本,发现了在web的page里面,对象标示用的index是会随着对象的变化而变化着,并非一成不变(我对这个观点一直很质疑,虽然是自己发现的,但还是反复的试验着)。
     首先说下自己的质疑点
     1,关于index的生成。在VB里面,大家知道,这是开发远自己就可以定义的,但是在web里面呢?如果是可以有开发自己定义的,哪么为什么对象的标示index却在变动。
     2,这个Index是否是QTP自己在运行程序过程中,自己对该程序做的标示,也就是非window的自己标示方法,才会导致这个值在变化着。
     
     自己研究了下,后来发现,当我们添加某一个web元素时候,这个对象会对应自己的一个index,这个是window或者是web程序自己对控件的标示。而我们使用description描述出来webelemenet的对象的index,这个是QTP自己对对象的标示方法。但这样是否会冲突和矛盾呢?其实是不会的。在对象库中添加的对象,我们在代码中直接编写,QTP就自己去对象库中查找这个东西,自然这个对象的标示是web或者window自己做的。而当我们用webelement去查找这个东西时候,QTP就在网页元素自己做好了标示,类似active Screen事先把对象页面存储起来一样,已经对它们分别做好了身份识别。

     好了,说了这么多,说说用处先吧。
     大家在测试web过程,最担心的问题就是,对象识别不到,或者识别到了,不是自己理想的类型,哎,委曲求全,来个低级录制吧....
    eg:之前看到论坛有人在求救一些关于无法识别的,类似view tree之类的东西,感到很郁闷...
    哪么,根据上边的那个原理,大家可以看到,其实我们通过描述的方法做到这样:以下是一棵可以张开的树,有3个可以张开的,并且QTP对他们分别节点标示 index为1,2,3,而我们把节点张开后...

至于代码,大家自己写写看。这里可能有些地方说错了,抛砖引玉,大家指点指点。

[ 本帖最后由 假装不在 于 2008-6-20 12:10 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2008-6-20 09:24:20 | 只看该作者

昨天晚上太困,没往下写,再补点

也就是说,QTP对对象的INDEX的标示,会因为对象的变动而变动着。

[ 本帖最后由 假装不在 于 2008-6-20 12:11 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2008-6-20 10:09:26 | 只看该作者
你想表达的意思是什么呢? 就是可以用index来对对象进行描述还是不能用index来描述呢?

用index属性来进行描述性编程这个大家都知道的吧,没发现有什么问题啊。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-6-20 11:15:37 | 只看该作者
关于index我也有一些疑惑
有些对象本身没有index
而有些对象本身就有index

那么没有index的对象,为什么QTP还能使用index这个属性??
这个index是QTP创建的吗?
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2008-6-20 11:47:22 | 只看该作者
这些确实是 QTP自己创建的。
我的意思是说,QTP有自己对对象识别的INDEX机制和Window对对象识别的Index。
默认情况下,也就是在对象未变化,例如增加对象之类的,QTP会采用window配套的index。但如果对象发生了变化,哪么QTP会在原来的基础上,对对象的标示做变动。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-6-20 11:48:24 | 只看该作者
原帖由 假装不在 于 2008-6-20 00:40 发表
睡觉之前,在这里浅谈下QTP与Index。多有不是之处,还请大家指点下。
    之前使用QTP测试的VB程序,知道了Index在对象识别时候起到一个很重要的主用,和条街的门牌号一样。某某街某某号,然后QTP就通过这个东西去找 ...


对象库是QTP的精华,你竟然~&%#^%& 。。。 !!!

哈哈,吓吓你的!

index只是表示符合其它条件的第n个对象而已,是QTP附加的属性!
你的用法完全是错误的,因为可能窗口上多一个对象,所有对象的index就全变了!
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2008-6-20 11:51:28 | 只看该作者
原帖由 yabest 于 2008-6-20 11:48 发表

因为可能窗口上多一个对象,所有对象的in ...



这个就是我所说的。INDEX会应为对象的变化而变动着。所以使用描述编程时候,对INDEX的依靠要重新定位和掂量
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2008-6-20 11:58:46 | 只看该作者
原帖由 假装不在 于 2008-6-20 11:47 发表
这些确实是 QTP自己创建的。
我的意思是说,QTP有自己对对象识别的INDEX机制和Window对对象识别的Index。
默认情况下,也就是在对象未变化,例如增加对象之类的,QTP会采用window配套的index。但如果对象发生了变化 ...



既然是QTP自己识别的index,那么如何确定这个index值呢?
我不知道在哪里查看,因为看对象的属性看不到。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2008-6-20 12:14:51 | 只看该作者
其实,因为它是有点动态的,所以建议这个还是少用点的好,例如用name,用tags。
但在某些地方,会例如图片之类的,有2张一样的图片,哪么识别才去用index。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2008-6-20 12:41:46 | 只看该作者
比如:google搜索
搜索出出来的列表中,每个链接,QTP默认给他一个index
那么当连接的对象发生变化的时候,这个index值改变吗?
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2008-6-20 12:46:59 | 只看该作者
假设一页显示10条
那么对应是10个index(0-9)

过一段时间

该页显示的10个连接全变了
这时,还是对应10个index还是(0-9)吗?
如果不是,后来的10个index和原来10个index的关系是什么呢?

[ 本帖最后由 sally_0817 于 2008-6-20 12:49 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2008-6-20 12:48:33 | 只看该作者
原帖由 yabest 于 2008-6-20 11:48 发表


对象库是QTP的精华,你竟然~&%#^%& 。。。 !!!

哈哈,吓吓你的!

index只是表示符合其它条件的第n个对象而已,是QTP附加的属性!
你的用法完全是错误的,因为可能窗口上多一个对象,所有对象的in ...



那如果对象不多的话,只是对象其他属性发生了变化,或对象本身发生了变化,数量还和原来的一样多,那么index值就不会变?
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2008-6-20 13:00:23 | 只看该作者
http://bbs.51testing.com/viewthr ... mp;page=1#pid998341


这个应该不会变。但如果在第8条和9条中间,多出一条,哪么QTP会对9,10的INDEX做相应调整。
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2008-6-20 13:24:55 | 只看该作者
OK,有空来尝试一下。
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2008-6-20 13:26:40 | 只看该作者
原帖由 sally_0817 于 2008-6-20 11:58 发表



既然是QTP自己识别的index,那么如何确定这个index值呢?
我不知道在哪里查看,因为看对象的属性看不到。



index不是对象的属性!QTP只是在有多个对象符合条件时,用index表示符合条件的对象里选择第index个!

比如窗口上有 爷爷、奶奶、爸爸、妈妈、儿子、女儿 6个对象

那么符合 “性别=男” 的条件就有3个对象,是爷爷、爸爸、儿子,
为了区别这三个对象,QTP就用"性别=男,index=0"表示爷爷,"性别=男,index=1"表示爸爸,"性别=男,index=2"表示儿子

符合 “婚姻状况=已婚” 的条件的就有4个对象,分别是爷爷、奶奶、爸爸、妈妈,
为了区分这四个对象,QTP就用"婚姻状况=已婚,index=0"表示爷爷,"婚姻状况=已婚,index=1"表示奶奶,"婚姻状况=已婚,index=2"表示爸爸,"婚姻状况=已婚,index=3"表示妈妈

我这样说明,很明白了吧? index不是对象本身的属性! index只是表示QTP在有多个对象符合条件时,选择其中第index个对象 !

同一个对象,选用不同的条件,则它的index也不同。比如爸爸:
你用“性别=男”做条件,那么就必须用"性别=男,index=1"来表示,意思是第2个男人;
你用“婚姻状况=已婚”做条件,那么就必须用"婚姻状况=已婚,index=2"来表示,意思是第3个已婚的人。

所以index并不是爸爸对象的属性,你不要想着用QTP查看爸爸对象的index属性值是多少!
(QTP称呼index为附加属性,与对象的本身属性相区别)

如果只有一个对象符合条件,那么QTP会忽略index,不管你设置了index等于什么值
比如窗口上儿子对象只有一个,那么条件“名称=儿子”, “名称=儿子,index=0”, “名称=儿子,index=100000”都会指向这个唯一的儿子对象。

[ 本帖最后由 yabest 于 2008-6-20 13:39 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

16#
 楼主| 发表于 2008-6-20 15:17:18 | 只看该作者
原帖由 yabest 于 2008-6-20 13:26 发表



index不是对象的属性!QTP只是在有多个对象符合条件时,用index表示符合条件的对象里选择第index个!

比如窗口上有 爷爷、奶奶、爸爸、妈妈、儿子、女儿 6个对象

那么符合 “性别=男” 的条件就有3个对象 ...


回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2008-6-20 15:54:54 | 只看该作者
谢谢15#的解释。

也就是说,这个index值是从0开始,按顺序往上递增的

[ 本帖最后由 sally_0817 于 2008-6-20 15:56 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

18#
 楼主| 发表于 2008-6-21 00:22:27 | 只看该作者
发现这个帖子看的人不怎么多呀。没什么冲击性....嘿嘿。
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2008-6-21 09:27:30 | 只看该作者
这个主题太好了,我一直弄不清楚INDEX,有空要好好研究下。
回复 支持 反对

使用道具 举报

该用户从未签到

20#
 楼主| 发表于 2008-6-21 10:21:30 | 只看该作者
原帖由 wtucel 于 2008-6-20 10:09 发表
你想表达的意思是什么呢? 就是可以用index来对对象进行描述还是不能用index来描述呢?

用index属性来进行描述性编程这个大家都知道的吧,没发现有什么问题啊。



这兄台看东西很不仔细....
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-19 01:32 , Processed in 0.087446 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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