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

  • A+
所属分类:技术流

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

其实,qtp内置了解决这种问题的一个语句‘exist’,用法如下:
Browser("Internet Explorer").Page("搜索引擎亲和度查询 (我要啦提供)").Link("SEO 数据").exist(3)

其中,括号里的3表示等待的时间,即三秒后查询名叫‘SEO数据’的连接是否存在,当然,这个方法要配合if then 一起使用才有效,如下:

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

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

End if

说明:即等待三秒,查询连接是否存在,如果存在,则点击。

但是,这样仍然有一个问题,即exist里面的参数,如果我系统反应很慢,可能3秒也刷不出来,这样还是会报错,同时也有可能我系统时快时慢,有时候会用5秒,有时候只用1秒,如果全都设成5呢,则会浪费很多时间,但是全都设成1呢,又会导致程序出错。这可咋整捏?

没什么大不了,我有我奥妙!

哦,跑题了,唉,被广告洗脑啊!

答案是:使用do...until循环解决此问题。

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值是‘是’,或等待时间过长

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

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: