nimcok 发表于 2010-7-16 14:56:06

如何处理版本更新后对象html id属性发生变化导致对象库不识别的问题

如何处理版本更新后对象html id属性发生变化导致对象库不识别的问题
问题原因:Web测试中,对象库中很多对象都是采用html id属性来识别的,但是版本更新后对象的html id属性发生了改变,导致对象库不识别了,脚本无法运行

[ 本帖最后由 nimcok 于 2010-7-16 16:51 编辑 ]

wugecat 发表于 2010-7-16 17:16:40

一个是通过id规则遍历
在一个你可以通过文字来遍历,比如用户名输入框前的"用户名"文字.找到文字后,再找后边的输入框,用DOM来处理,总之没有解决不了的
另外不建议用对象库了.因为ID是变化的

nimcok 发表于 2010-7-19 16:29:35

原帖由 wugecat 于 2010-7-16 17:16 发表 http://bbs.51testing.com/images/common/back.gif
一个是通过id规则遍历
在一个你可以通过文字来遍历,比如用户名输入框前的"用户名"文字.找到文字后,再找后边的输入框,用DOM来处理,总之没有解决不了的
另外不建议用对象库了.因为ID是变化的

我当前可以通过下面办法解决:先得到可以通过其它属性(比如文字)识别的对象A的id,然后根据这个id计算出所要操作对象B的id,然后对所要操作的对象B进行id赋值,然后在对B进行操作,这样对于可以找到计算id方法的元素可以解决(同时需要存在可以通过其它属性识别的对象,比如A),但是如果找不到计算id的规则或找不到可以参照的对象(A)时,则我使用的这种方法可能就失效了,当然对于一些对象也可以通过正则表达式来处理,但是可以通过正则表达式来处理的很少
虽然我目前遇到的问题解决了,但是继续悬赏,希望得到更好的方法
楼上说的id规则遍历,怎么个遍历?可以详细说一下吗,没理解你说的意思。
另外可以说说DOM方法吗?

wugecat 发表于 2010-7-19 16:58:00

和你说的差不多了,比如一个动态的frame窗口id是iframe_34253462(后面的数字是随机的).那么你就可以通过document.getElementsBytagname("iframe")找到所有iframe,然后在循环判断iframe的id如果前面几位是"iframe_"那么就可以定位到这个iframe..比如
set objects=Browser(XXX:=XXX).page(XX:=XXX).object.getElementsBytagname("iframe")
for i=0 to objects.length-1
if (left(objects(i).id,7)="frame_")then
set obj=objects(i)
end if
next
具体的方法google一下就可以了,很简单的

[ 本帖最后由 wugecat 于 2010-7-19 16:59 编辑 ]

TIB 发表于 2010-7-19 20:26:50

如果id变化是有规律的或者格式是固定的,可以考虑用正则表达式匹配掉动态变化的部分,例如iframe_.*

nimcok 发表于 2010-7-20 09:11:38

原帖由 TIB 于 2010-7-19 20:26 发表 http://bbs.51testing.com/images/common/back.gif
如果id变化是有规律的或者格式是固定的,可以考虑用正则表达式匹配掉动态变化的部分,例如iframe_.*
楼上两位说的这样处理我都知道,或许是我没有说清楚,问题是:但是如果找不到计算id的规则或找不到可以参照的对象(A),也不能使用正则表达式处理时,怎么识别?
比如webelement的id为iframe_535,这个页面上还有其它很多webelement,他们的id都是类似于"iframe_538,iframe_542"这种,每更新一次版本时,后面三位数都是随机办法的,这个时候怎么处理的?
当前我是通过id值之间的关系来动态计算它们的具体id值,然后通过setToproperty赋值id,再对这个对象执行操作,能用正则表达式的话那样就太简单了,不是我想看到的结果

wugecat 发表于 2010-7-20 09:30:07

用文字来判断,查找某个中文旁边或者前面的对象,再不行就用对象在页面的结构来查找,如果真如你所说找不到任何规律,所有都是动态的,包括甚至连结构都不确定......我想不会有这样的系统出现吧
页: [1]
查看完整版本: 如何处理版本更新后对象html id属性发生变化导致对象库不识别的问题