51Testing软件测试论坛

标题: Qtp循环后,找不到对象的问题~求解决一下 [打印本页]

作者: weinicm    时间: 2012-2-27 16:09
标题: Qtp循环后,找不到对象的问题~求解决一下
各位老大,谁帮我解决一下这个问题啊。
这个问题都困惹我好久了,百度也就一个Init来解决,但是在我这里还是不行。
我总觉得,在循环体内,进行对象定义感觉怪怪的。。。。
虽然这个问题可以通过其它方法解决,但是问题仍然存在,让我耿耿于怀啊
'循环外定义对象,在I=1的之候,提示找不到对象
set a=Browser("**").Page("**").WebElement("class:=category_list category_list_r").ChildObjects(Link)
For i=0 to  a.count
    a(i).click
        Browser("**").Page("**").Link("html tag:=a","innertext:=返回","class:=c7").Click
     wait 2
Next
'在循环内定义对象,能正常通过
For i=0 to 7
        set a=Browser("**").Page("**").WebElement("class:=category_list category_list_r").ChildObjects(Link)
    a(i).click
        Browser("**").Page("**").Link("html tag:=a","innertext:=返回","class:=c7").Click
     wait 2
Next


set a=Browser("**").Page("**").WebElement("class:=category_list category_list_r").ChildObjects(Link)
For i=0 to  a.count
        'a(i).init    加入这一句以后,则下句通过不了提示:找不到a(i)对象
    a(i).click
        Browser("**").Page("**").Link("html tag:=a","innertext:=返回","class:=c7").Click
     wait 2
Next
作者: 026300    时间: 2012-2-27 17:15
看看a.count返回的值是多少
作者: xiaoxiaogt    时间: 2012-2-29 15:03
你的脚本是循环完毕之后才能跳出,你中间
Browser("**").Page("**").Link("html tag:=a","innertext:=返回","class:=c7").Click
这句话执行之后就把前面的控件挡住了。所以才会出现a(i)这个对象找不到。
作者: hsjzfling    时间: 2012-2-29 16:23
对象集合若定义在循环外,那么在循环内点击link跳转页面后,对象失效,所以会提示缺少对象
定义在循环内就是每次都会重新取集合,则不会出现失效的问题了
作者: hsjzfling    时间: 2012-2-29 16:24
bty,a.count应该改为a.count-1
作者: lvtianhai    时间: 2012-2-29 18:18
楼主,有结果了吗,结果是什么呢?

麻烦楼主给个完美的结局!
作者: lyscser    时间: 2012-2-29 19:27
http://bbs.51testing.com/viewthr ... p;page=1#pid2097758
http://bbs.51testing.com/viewthr ... p;page=1#pid1867479
作者: weinicm    时间: 2012-3-1 22:20
回复 2# 026300
返回值是正常的,这个确认没有错,主要是click之后,会进入到iframe中,再返回时,就找不到对象了
作者: weinicm    时间: 2012-3-1 22:21
回复 3# xiaoxiaogt
对,确实是这样。但是我现在想要QTP再次正确识别到刚才的控件~
作者: weinicm    时间: 2012-3-1 22:22
回复 5# hsjzfling

这个是我忽略了。不过在溢出之前,就已经找不到对象了
作者: weinicm    时间: 2012-3-1 22:23
回复 6# lvtianhai


    看来给不了结果了。。。。
作者: weinicm    时间: 2012-3-1 22:23
回复 7# lyscser


    呵呵,以后会多搜搜贴子,谢谢了
作者: weinicm    时间: 2012-3-1 22:57
这两天忙死,现在还在加班,抽空来补充一下吧。
我看了两个帖子:
目前的两种说法是:
1.在循环体内set,重新构造对象.
这种方法把和把对象直接放到循环体内无区别。所以就不讨论。
2.使用init。此方法我确实没有通过。我看了一些例子。一般的都是举百度或Google的例子
try
set objbutton=browser("title:=百度一下,你就知道").page("title:=百度一下,你就知道").webbutton("name:=百度一下")
For i=1 To 4
if i>1 then
objbutton.init
msgbox i
end if
objbutton.click   '''''
next
我测试了段脚本也未能正常通过...

所以我现在只能说,这个暂时没有完整的答案,先把对象放到循环体内吧。
我会持继跟踪这个问题,哪天解决了的话,我来挖坟~~!!
作者: lyscser    时间: 2012-3-2 19:32
说一下:
第一、对象标号只能到count - 1
  1. set a=Browser("**").Page("**").WebElement("class:=category_list category_list_r").ChildObjects(Link)
  2. For i=0 to  a.count - 1
  3.     a(i).click
  4.         Browser("**").Page("**").Link("html tag:=a","innertext:=返回","class:=c7").Click
  5.      wait 2
  6. Next
复制代码
第二、描述性语言创建的对象必须保持不变才能继续下面的操作,中途其他的Click或者refresh都可能造成不识别,除非重新创建
第三、由上一点可知,如果能养成Set A = ……,用完之后Set A = Nothing的习惯,一切都不成问题了




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2