51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2622|回复: 13
打印 上一主题 下一主题

[原创] Qtp循环后,找不到对象的问题~求解决一下

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-2-27 16:09:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位老大,谁帮我解决一下这个问题啊。
这个问题都困惹我好久了,百度也就一个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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2012-2-27 17:15:31 | 只看该作者
看看a.count返回的值是多少
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2012-2-29 15:03:43 | 只看该作者
你的脚本是循环完毕之后才能跳出,你中间
Browser("**").Page("**").Link("html tag:=a","innertext:=返回","class:=c7").Click
这句话执行之后就把前面的控件挡住了。所以才会出现a(i)这个对象找不到。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2012-2-29 16:23:17 | 只看该作者
对象集合若定义在循环外,那么在循环内点击link跳转页面后,对象失效,所以会提示缺少对象
定义在循环内就是每次都会重新取集合,则不会出现失效的问题了
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2012-2-29 16:24:44 | 只看该作者
bty,a.count应该改为a.count-1
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2012-2-29 18:18:42 | 只看该作者
楼主,有结果了吗,结果是什么呢?

麻烦楼主给个完美的结局!
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2012-2-29 19:27:35 | 只看该作者
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2012-3-1 22:20:27 | 只看该作者
回复 2# 026300
返回值是正常的,这个确认没有错,主要是click之后,会进入到iframe中,再返回时,就找不到对象了
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2012-3-1 22:21:41 | 只看该作者
回复 3# xiaoxiaogt
对,确实是这样。但是我现在想要QTP再次正确识别到刚才的控件~
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2012-3-1 22:22:40 | 只看该作者
回复 5# hsjzfling

这个是我忽略了。不过在溢出之前,就已经找不到对象了
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2012-3-1 22:23:02 | 只看该作者
回复 6# lvtianhai


    看来给不了结果了。。。。
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2012-3-1 22:23:35 | 只看该作者
回复 7# lyscser


    呵呵,以后会多搜搜贴子,谢谢了
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2012-3-1 22:57:28 | 只看该作者
这两天忙死,现在还在加班,抽空来补充一下吧。
我看了两个帖子:
目前的两种说法是:
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
我测试了段脚本也未能正常通过...

所以我现在只能说,这个暂时没有完整的答案,先把对象放到循环体内吧。
我会持继跟踪这个问题,哪天解决了的话,我来挖坟~~!!
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2012-3-2 19:32:16 | 只看该作者
说一下:
第一、对象标号只能到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的习惯,一切都不成问题了
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-10 20:10 , Processed in 0.083595 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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