假装不在 发表于 2008-9-26 09:33:59

【QTP 编码小知识 二】

大家看看下面代码,代码是运行在谷歌的主页面,如果大家要试的话,大家同样也可以试试这代码的运行结果。
      Dim LinkDes
   Set LinkDes=description.Create()
   LinkDes("html tag").value="A"

   Set LinkObj=browser("Google").Page("Google").ChildObjects(LinkDes)
   For i=0 to LinkObj.count
        LinkObj(i).click
        browser("Google").Back
   Next
   
    代码运行完后,你会发现,原来在循环第2次连接点击的时候,抛出了一个“General run error”。这个是为什么会这样?之前也同样有论坛的朋友问到这样的问题,所以今天就在这里提到。
    问题是出在了对第一个连接点击后,做了返回操作所导致的,在第一次back的时候,LinkObj对象就已经丢失了,失效了。所以你在做第2次操作的时候,LinkObj(i)就已经找不到了,因此它会出错。
    正确的方法,这个也是我目前想到的,或者还有其它达人能做更好的方法出来。
      Dim LinkDes
   Set LinkDes=description.Create()
   LinkDes("html tag").value="A"

   Set LinkObj=browser("Google").Page("Google").ChildObjects(LinkDes)
   For i=0 to LinkObj.count
         Set LinkObj=browser("Google").Page("Google").ChildObjects(LinkDes)
        LinkObj(i).click
        browser("Google").Back
   Next

hsjzfling 发表于 2008-9-26 10:28:27

原帖由 假装不在 于 2008-9-26 09:33 发表 http://bbs.51testing.com/images/common/back.gif
大家看看下面代码,代码是运行在谷歌的主页面,如果大家要试的话,大家同样也可以试试这代码的运行结果。
      Dim LinkDes
   Set LinkDes=description.Create()
   LinkDes("html tag").value="A"

   ...

如果页面上的链接排序可能发生变化,即假设点击某个链接后该链接在页面上的排序会发生变化,则lz这个方法就要不灵咯~~

先去取到页面上所有链接的url,然后逐一跳转,就不会有这一问题了

hsjzfling 发表于 2008-9-26 10:36:04

顺便在补充下~
For i=0 to LinkObj.count
这里.count后不要忘记再-1...
最近老看到有人贴的代码里没有这个-1

假装不在 发表于 2008-9-26 10:41:15

你说的是,例如
a(i)=cstr(linkobj(j))
for k=0 to count
borwser().page().link("url:="&a(k)).click
next

这样?

helius 发表于 2008-9-26 10:55:21

看到“蛛丝马迹”了:victory:

heqingbluesky 发表于 2008-9-26 11:02:01

你的都支持一下,虽然测试的不是BS架构的软件。

hsjzfling 发表于 2008-9-26 12:06:14

原帖由 假装不在 于 2008-9-26 10:41 发表 http://bbs.51testing.com/images/common/back.gif
你说的是,例如
a(i)=cstr(linkobj(j))
for k=0 to count
borwser().page().link("url:="&a(k)).click
next

这样?

这样。。。
Dim LinkDes, LinkObj, i
Dim urls(1000)
Set LinkDes=description.Create()
LinkDes("micclass").value="Link"
Set LinkObj=browser(":=").Page(":=").ChildObjects(LinkDes)
For i=0 to LinkObj.count-1
urls(i)=LinkObj(i).GetROProperty("url")
Next
For i=0 to LinkObj.count-1
browser(":=").navigate urls(i)
Next

假装不在 发表于 2008-9-26 12:13:44

:L 我不赞成你用navigate 的方法。我支持click。:L
起码可以改写成
For i=0 to LinkObj.count-1
browser(":=").page().link("url:="&urls(i)).click
browser().back
Next
尽多的模拟操作。

假装不在 发表于 2008-9-27 11:14:13

原帖由 heqingbluesky 于 2008-9-26 11:02 发表 http://bbs.51testing.com/images/common/back.gif
你的都支持一下,虽然测试的不是BS架构的软件。

:( 同志,你盲目崇拜

testman 发表于 2008-9-27 15:11:45

我的帖子“脚本的奇怪问题”和你的这个很相似。

这样的问题,规避的方法有很多。

但是这种问题产生的原因是什么?

我认为丢失对象的说法不是很准确。如果是丢失对象,那为什么会丢失呢?

hsjzfling 发表于 2008-9-27 15:27:55

原帖由 假装不在 于 2008-9-26 12:13 发表 http://bbs.51testing.com/images/common/back.gif
:L 我不赞成你用navigate 的方法。我支持click。:L
起码可以改写成
For i=0 to LinkObj.count-1
browser(":=").page().link("url:="&urls(i)).click
browser().back
Next
尽多的模拟操作。

如果只是简单的link,navigate效果是一样的,如果有js的话那就还是得去click了,大思路是一样的,就是先去取url

假装不在 发表于 2008-9-27 16:13:29

原帖由 hsjzfling 于 2008-9-27 15:27 发表 http://bbs.51testing.com/images/common/back.gif


如果只是简单的link,navigate效果是一样的,如果有js的话那就还是得去click了,大思路是一样的,就是先去取url



2个理由简单推翻你:
1,link click是同时是可以检查例如点击连接后IE死掉(非正常关闭)的情况,也就是我们要抓到的BUG目的之一,如果直接使用跳转,失去意义。
2,使用click的目的还有一些跳出的msgbox可以接受处理,如果使用跳转,同样的道理

hsjzfling 发表于 2008-9-27 17:04:21

请注意我的假设前提

假装不在 发表于 2008-9-27 17:32:47

原帖由 hsjzfling 于 2008-9-27 17:04 发表 http://bbs.51testing.com/images/common/back.gif
请注意我的假设前提
假装没看到:lol

zengyixun 发表于 2008-10-3 05:00:47

回复 14# 的帖子

晕,假装不在意问题核心,顾左右而言它!

vprince 发表于 2008-12-1 14:21:54

有点启发,大家的讨论意见都很不错。

sanlo 发表于 2008-12-4 13:40:38

学习中~~~

lery 发表于 2009-9-9 22:41:36

原帖由 假装不在 于 2008-9-26 09:33 发表 http://bbs.51testing.com/images/common/back.gif
大家看看下面代码,代码是运行在谷歌的主页面,如果大家要试的话,大家同样也可以试试这代码的运行结果。
      Dim LinkDes
   Set LinkDes=description.Create()
   LinkDes("html tag").value="A"

   ...





LZ,有个问题不明白 请教你:
我现在那个项目上要获取某个TABLE上的所有链接在QTP8.2上要用links=browser("XXX").Page("XXX").WebTable("XXX").getelementsbytagname("A")才能获取到,
但是在QTP9.2上却要用links=browser("XXX").Page("XXX").WebTable("XXX").ChildObjects(DesLink)才可以呢?(家里用的QTP和公司用的版本不一样,呵呵)
另外在WebTable的方法中还存在着ChildItem这个方法,它和ChildObjects的获取子对象有什么区别呢?

dabeixiong 发表于 2009-9-10 00:25:27

QTP的bug:lol

xc202 发表于 2010-6-14 14:03:32

按你这样运行后还会出现相同的错误啊
页: [1]
查看完整版本: 【QTP 编码小知识 二】