浅谈QTP,Window与Index
睡觉之前,在这里浅谈下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 编辑 ]
昨天晚上太困,没往下写,再补点
也就是说,QTP对对象的INDEX的标示,会因为对象的变动而变动着。[ 本帖最后由 假装不在 于 2008-6-20 12:11 编辑 ] 你想表达的意思是什么呢? 就是可以用index来对对象进行描述还是不能用index来描述呢?
用index属性来进行描述性编程这个大家都知道的吧,没发现有什么问题啊。 关于index我也有一些疑惑
有些对象本身没有index
而有些对象本身就有index
那么没有index的对象,为什么QTP还能使用index这个属性??
这个index是QTP创建的吗? 这些确实是 QTP自己创建的。
我的意思是说,QTP有自己对对象识别的INDEX机制和Window对对象识别的Index。
默认情况下,也就是在对象未变化,例如增加对象之类的,QTP会采用window配套的index。但如果对象发生了变化,哪么QTP会在原来的基础上,对对象的标示做变动。 原帖由 假装不在 于 2008-6-20 00:40 发表 http://bbs.51testing.com/images/common/back.gif
睡觉之前,在这里浅谈下QTP与Index。多有不是之处,还请大家指点下。
之前使用QTP测试的VB程序,知道了Index在对象识别时候起到一个很重要的主用,和条街的门牌号一样。某某街某某号,然后QTP就通过这个东西去找 ...
对象库是QTP的精华,你竟然~&%#^%& 。。。 !!! :@
哈哈,吓吓你的!
index只是表示符合其它条件的第n个对象而已,是QTP附加的属性!
你的用法完全是错误的,因为可能窗口上多一个对象,所有对象的index就全变了! 原帖由 yabest 于 2008-6-20 11:48 发表 http://bbs.51testing.com/images/common/back.gif
因为可能窗口上多一个对象,所有对象的in ...
这个就是我所说的。INDEX会应为对象的变化而变动着。所以使用描述编程时候,对INDEX的依靠要重新定位和掂量 原帖由 假装不在 于 2008-6-20 11:47 发表 http://bbs.51testing.com/images/common/back.gif
这些确实是 QTP自己创建的。
我的意思是说,QTP有自己对对象识别的INDEX机制和Window对对象识别的Index。
默认情况下,也就是在对象未变化,例如增加对象之类的,QTP会采用window配套的index。但如果对象发生了变化 ...
既然是QTP自己识别的index,那么如何确定这个index值呢?
我不知道在哪里查看,因为看对象的属性看不到。 其实,因为它是有点动态的,所以建议这个还是少用点的好,例如用name,用tags。
但在某些地方,会例如图片之类的,有2张一样的图片,哪么识别才去用index。 比如:google搜索
搜索出出来的列表中,每个链接,QTP默认给他一个index
那么当连接的对象发生变化的时候,这个index值改变吗? 假设一页显示10条
那么对应是10个index(0-9)
过一段时间
该页显示的10个连接全变了
这时,还是对应10个index还是(0-9)吗?
如果不是,后来的10个index和原来10个index的关系是什么呢?
[ 本帖最后由 sally_0817 于 2008-6-20 12:49 编辑 ] 原帖由 yabest 于 2008-6-20 11:48 发表 http://bbs.51testing.com/images/common/back.gif
对象库是QTP的精华,你竟然~&%#^%& 。。。 !!! :@
哈哈,吓吓你的!
index只是表示符合其它条件的第n个对象而已,是QTP附加的属性!
你的用法完全是错误的,因为可能窗口上多一个对象,所有对象的in ...
那如果对象不多的话,只是对象其他属性发生了变化,或对象本身发生了变化,数量还和原来的一样多,那么index值就不会变? http://bbs.51testing.com/viewthread.php?tid=118017&page=1#pid998341
这个应该不会变。但如果在第8条和9条中间,多出一条,哪么QTP会对9,10的INDEX做相应调整。 OK,有空来尝试一下。 原帖由 sally_0817 于 2008-6-20 11:58 发表 http://bbs.51testing.com/images/common/back.gif
既然是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 编辑 ] 原帖由 yabest 于 2008-6-20 13:26 发表 http://bbs.51testing.com/images/common/back.gif
index不是对象的属性!QTP只是在有多个对象符合条件时,用index表示符合条件的对象里选择第index个!
比如窗口上有 爷爷、奶奶、爸爸、妈妈、儿子、女儿 6个对象
那么符合 “性别=男” 的条件就有3个对象 ...
:handshake :hug: 谢谢15#的解释。
也就是说,这个index值是从0开始,按顺序往上递增的
[ 本帖最后由 sally_0817 于 2008-6-20 15:56 编辑 ] :lol 发现这个帖子看的人不怎么多呀。没什么冲击性....嘿嘿。 这个主题太好了,我一直弄不清楚INDEX,有空要好好研究下。 原帖由 wtucel 于 2008-6-20 10:09 发表 http://bbs.51testing.com/images/common/back.gif
你想表达的意思是什么呢? 就是可以用index来对对象进行描述还是不能用index来描述呢?
用index属性来进行描述性编程这个大家都知道的吧,没发现有什么问题啊。
这兄台看东西很不仔细....:D