使用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值是‘是’,或等待时间过长
如此,即可做到智能化判断操作对象是否存在。
评论