google搜索 站内搜索                 软件测试门户 | 软件测试培训 | 文章资料精选 | 软件测试论坛 | 测试解决方案 | 软件测试博客 | 测试招聘求职 
打印

[原创] 【QTP 编码小知识 二】

本帖已经被作者加入个人空间

【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
我的测试博客:http://www.51testing.com/?uid/174770
MSN:luchenzhi@hotmail.com
M群:group283284@msnzone.cn
觅广州自动化测试职位

TOP

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

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

先去取到页面上所有链接的url,然后逐一跳转,就不会有这一问题了
路漫漫其修远兮,吾需努力再努力

欢迎加我MSN共同讨论QTP疑难杂症~加好友时请注明51testing~

TOP

顺便在补充下~
For i=0 to LinkObj.count
这里.count后不要忘记再-1...
最近老看到有人贴的代码里没有这个-1
路漫漫其修远兮,吾需努力再努力

欢迎加我MSN共同讨论QTP疑难杂症~加好友时请注明51testing~

TOP

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

这样?
我的测试博客:http://www.51testing.com/?uid/174770
MSN:luchenzhi@hotmail.com
M群:group283284@msnzone.cn
觅广州自动化测试职位

TOP

看到“蛛丝马迹”了

TOP

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

TOP

引用:
原帖由 假装不在 于 2008-9-26 10:41 发表
你说的是,例如
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
路漫漫其修远兮,吾需努力再努力

欢迎加我MSN共同讨论QTP疑难杂症~加好友时请注明51testing~

TOP

我不赞成你用navigate 的方法。我支持click。
起码可以改写成
For i=0 to LinkObj.count-1
browser(":=").page().link("url:="&urls(i)).click
browser().back
Next
尽多的模拟操作。
我的测试博客:http://www.51testing.com/?uid/174770
MSN:luchenzhi@hotmail.com
M群:group283284@msnzone.cn
觅广州自动化测试职位

TOP

引用:
原帖由 heqingbluesky 于 2008-9-26 11:02 发表
你的都支持一下,虽然测试的不是BS架构的软件。
同志,你盲目崇拜
我的测试博客:http://www.51testing.com/?uid/174770
MSN:luchenzhi@hotmail.com
M群:group283284@msnzone.cn
觅广州自动化测试职位

TOP

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

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

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

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

TOP

引用:
原帖由 假装不在 于 2008-9-26 12:13 发表
我不赞成你用navigate 的方法。我支持click。
起码可以改写成
For i=0 to LinkObj.count-1
browser(":=").page().link("url:="&urls(i)).click
browser().back
Next
尽多的模拟操作。
如果只是简单的link,navigate效果是一样的,如果有js的话那就还是得去click了,大思路是一样的,就是先去取url
路漫漫其修远兮,吾需努力再努力

欢迎加我MSN共同讨论QTP疑难杂症~加好友时请注明51testing~

TOP

引用:
原帖由 hsjzfling 于 2008-9-27 15:27 发表


如果只是简单的link,navigate效果是一样的,如果有js的话那就还是得去click了,大思路是一样的,就是先去取url
2个理由简单推翻你:
1,link click是同时是可以检查例如点击连接后IE死掉(非正常关闭)的情况,也就是我们要抓到的BUG目的之一,如果直接使用跳转,失去意义。
2,使用click的目的还有一些跳出的msgbox可以接受处理,如果使用跳转,同样的道理
我的测试博客:http://www.51testing.com/?uid/174770
MSN:luchenzhi@hotmail.com
M群:group283284@msnzone.cn
觅广州自动化测试职位

TOP

请注意我的假设前提
路漫漫其修远兮,吾需努力再努力

欢迎加我MSN共同讨论QTP疑难杂症~加好友时请注明51testing~

TOP

引用:
原帖由 hsjzfling 于 2008-9-27 17:04 发表
请注意我的假设前提
假装没看到
我的测试博客:http://www.51testing.com/?uid/174770
MSN:luchenzhi@hotmail.com
M群:group283284@msnzone.cn
觅广州自动化测试职位

TOP

回复 14# 的帖子


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

TOP

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

TOP

学习中~~~

TOP

 
当前时区 GMT+8, 现在时间是 2008-12-5 18:28Copyright(C)上海博为峰软件技术有限公司 2001-2007 电话:021-64471599-8017
当您在访问网站、论坛及博客过程中遇到问题时可发送email:webmaster@51testing.com或发送论坛短信至管理员风在吹