QTP 中的exist方法与do…loop的配合使用

技术流评论9,959阅读模式

使用QTP录制内容时经常会遇到如下问题:在前一个页面点击了‘提交’,需要到下一个页面查看提交后的结果,但是,有时由于系统反应迟缓或数据量太大的原因,导致在下一个页面尚未刷出之前,qtp就开始进行检查,这样,就会造成无法找到对象的错误,使程序意外终止。

其实,qtp内置了解决这种问题的一个语句‘exist’,用法如下:
Browser("Internet Explorer").Page("搜索引擎亲和度查询 (我要啦提供)").Link("SEO 数据").exist(3)文章源自原紫番博客-https://www.yuanzifan.com/315.html

其中,括号里的3表示等待的时间,即三秒后查询名叫‘SEO数据’的连接是否存在,当然,这个方法要配合if then 一起使用才有效,如下:文章源自原紫番博客-https://www.yuanzifan.com/315.html

if Browser("Internet Explorer").Page("搜索引擎亲和度查询 (我要啦提供)").Link("SEO 数据").exist(3) Then文章源自原紫番博客-https://www.yuanzifan.com/315.html

Browser("Internet Explorer").Page("搜索引擎亲和度查询 (我要啦提供)").Link("SEO 数据").click文章源自原紫番博客-https://www.yuanzifan.com/315.html

End if文章源自原紫番博客-https://www.yuanzifan.com/315.html

说明:即等待三秒,查询连接是否存在,如果存在,则点击。文章源自原紫番博客-https://www.yuanzifan.com/315.html

但是,这样仍然有一个问题,即exist里面的参数,如果我系统反应很慢,可能3秒也刷不出来,这样还是会报错,同时也有可能我系统时快时慢,有时候会用5秒,有时候只用1秒,如果全都设成5呢,则会浪费很多时间,但是全都设成1呢,又会导致程序出错。这可咋整捏?文章源自原紫番博客-https://www.yuanzifan.com/315.html

没什么大不了,我有我奥妙!文章源自原紫番博客-https://www.yuanzifan.com/315.html

哦,跑题了,唉,被广告洗脑啊!文章源自原紫番博客-https://www.yuanzifan.com/315.html

答案是:使用do...until循环解决此问题。文章源自原紫番博客-https://www.yuanzifan.com/315.html

Dim nTimeout '定义为等待的秒数

Dim bEventexist '定义为布尔型,以确定是否可以退出循环
nTimeout=1
bEventexist=false

Do

if Browser("Internet Explorer").Page("搜索引擎亲和度查询 (我要啦提供)").Link("SEO 数据").exist(3) Then

Browser("Internet Explorer").Page("搜索引擎亲和度查询 (我要啦提供)").Link("SEO 数据").click

bEventexist=true ‘如果存在且点击成功,把此数值赋值成‘是’
Else
nTimeout=nTimeout+1 '如果不存在,继续等待
End If
Loop until bEventexist=true or nTimeout>15 ‘循环退出条件为bEventexist值是‘是’,或等待时间过长

如此,即可做到智能化判断操作对象是否存在。

 最后更新:2013-12-10

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证