onlonely 发表于 2009-6-25 13:15:03

SetTOProperty方法赋值index属性问题

我们知道
1,当相同属性的对象出现多个后,一般会用index属性来区分这些对象
2.如果一个对象是唯一的,index属性值就是none

但是如果你用SetTOProperty方法去赋值对象库中一个index属性为none的对象,会发现属性可以正确赋值进去,但是无法用赋值属性后的对象来测试.
例:
有一个<删除>按钮,
在页面中有一个<删除>按钮情况下,index属性就是none
如果页面中有2个<删除>按钮,index属性就有一个是0,有一个是1
但是由于我们无法预知这个页面中是有1个还是2个,甚至可能1个<删除>都没有.

所以我就在删除前,先获得<删除>按钮的个数,然后根据这个个数,用SetTOProperty赋值index属性.用来定为我需要操作的那个删除按钮.
但现在的问题是,如果对象库中这个<删除>按钮的index属性是none,那么即使你用SetTOProperty赋值,也是无法用赋值后的对象来操作的实际对象

所以我想知道,对于这类情况,如何才能使用赋值后的对象呢.

[ 本帖最后由 onlonely 于 2009-6-29 13:04 编辑 ]

shiyi1022 发表于 2009-6-25 15:37:22

可以调试下,看你用settoproperty函数后,对象库的属性是否按照你的要求加上了index属性。
至于使用的话,还是一样的。

wugecat 发表于 2009-6-25 16:24:58

手动添加对象库中的index属性添加成"0"
还有就是既然对象是唯一的也就没有必要去赋值index了

onlonely 发表于 2009-6-26 11:45:53

回复 3# 的帖子

3楼的兄弟,思路就不正确喽
既然我会用SetTOProperty方法,自然是因为对象的属性会发生变化我才会用.
既然会发生变化,index属性就可能发生变化

onlonely 发表于 2009-6-29 08:51:34

无人知晓???

b47617 发表于 2009-6-29 12:41:52

你确认index的属性是none吗?
你要用none来判断什么,不防可以说说,扩展一下思路?

onlonely 发表于 2009-6-29 13:06:09

回复 6# 的帖子

对象库中的,index属性的确是none.
并且如果对象库中的index属性是一个非none的数值,这个现象就不会存在.

wugecat 发表于 2009-6-29 14:23:41

楼主...既然你很明确的知道对象可能存在多个,那么当你添加对象库的时候,就要将这个对象的index初始化为"0",维护对象库是测试工作之一,你如果使对象库的index是none,那样用SetTOProperty当然没有用了..所以应该手工添加index

fei.ge 发表于 2009-6-29 18:05:00

首先:没这样处理过对象...

有问题咨询楼主:
【所以我就在删除前,先获得<删除>按钮的个数,然后根据这个个数,用SetTOProperty赋值index属性.用来定为我需要操作的那个删除按钮.】
<<<1、你给某个具体的<删除>按钮赋值index属性时,如何找到这个按钮的,还是通过原来的index属性?
   2、赋值完index属性也是在run-time中可以使用的吧

3、楼主这样给对象赋值index属性的目的....,是对多个同类型同名的对象自定义?

onlonely 发表于 2009-6-30 08:48:19

回复 9# 的帖子

哎!恐怕是没人遇到这个情况了.

情况出现原因是这样的,
假如有一个系统,有好友功能,那么在最初肯定是没有好友的,所以没有删除.
当我录制<添加一个好友>,然后<删除一个好友>.这个时候录制下来的对象库中的<删除>按钮就肯定是index属性为none了.如果这点不知道的你可以先离开了.
然而录制和回放的情况是会发生变化的,当我添加了多个好友后,那么<删除>这个按钮就没有任何一个按钮的index属性是none了.
自然就需要用SetTOProperty赋值这个动态的index,首先取得好友个数,删除最后一个,自然index就是好友个数-1

fei.ge 发表于 2009-6-30 13:48:20

回复 10# 的帖子

总结下:1、1个删除按钮,index属性为none
                2、多个删除按钮,index属性值不为none,且可以通过SetTOProperty赋值

我在想可不可以通过childobjects来做?
1、通过childobjects可以得出删除按钮的个数,由此判断删除按钮存不存在;
2、如果存在多个删除按钮,那么这样objs(objs.count-1).click,是否是点击了最后一个删除按钮?

没有实践过....

onlonely 发表于 2009-7-1 09:04:03

回复 11# 的帖子

你的方法,的确是可行的,
不过感觉绕了好多圈圈....

经过几天实验,我感觉,
index属性为none的时候,赋值后确实不能使用.可是你用GetTOProperty取出来的结果却是正确的.

5555 发表于 2009-7-1 22:06:27

如果这些删除按钮是在一个 WebTable里的话,直接用WebTable的 ChildItem()来做会更简单,当然不知道楼主具体系统是什么样子的,如果有截图就更好了,大家研究研究:)

onlonely 发表于 2009-7-8 20:15:02

回复 11# 的帖子

今天再次回过头来看,11楼的方法还是不错的。

至少对于QTP能正确识别的对象是没问题的。
只是对于像webelement类型对象就无能为力了。

RayTM 发表于 2010-4-27 10:26:08

今天碰巧也遇到了这个问题,谢谢大家的回复。
对楼主的第二点可以做些调整,如果一个对象是唯一的,index属性值就是none,但也可以是index=0.如果你确定不需要使用多个同类型的对象,那么对象库中的属性是可以默认为index=none.而当你确定需要使用index属性的时候,就需要你将其设置为0,在这种情况下就可以通过SetTOProperty方法去动态调整对象的描述。
这其实和其他属性是一样的,比如对于Link对象,如果你在对象库中仅指定了属性html tag为A,然后用SetTOProperty属性去试图添加属性text,最后会导致对象无法识别是一样的道理。只有在对象库中留下你要修改的属性的位置的前提下SetTOProperty才可以生效,有点像使用前你需要声明的感觉。至于楼主未声明就使用而不会报错,那就要和HP好好讨论一下了。
8楼的回复比较清楚。
至于对于楼主说到的index=-1的情况是可以用index=0 + object.exist的方法来判断。
试想如果非index情况(即index=none),如果没有这个对象你也势必要通过exist方法来判断了。

[ 本帖最后由 RayTM 于 2010-4-27 10:39 编辑 ]
页: [1]
查看完整版本: SetTOProperty方法赋值index属性问题