原文地址:http://www.51testing.com/?uid-27374-action-viewspace-itemid-847208
在运行测试脚本时,QuickTest通过识别对象来判断脚本回放是否成功。当对象在默认的时间内未出现时,脚本回放就会报错。如果需要指定QuickTest暂停运行一个测试或组件,直到特定的对象属性存在后才开始运行下一步,那么可以插入同步点来实现。
- 同步点原理
- 同步点方法
---------------------------------------------------------------------------
同步点原理
同步点是指在一个测试过程中,指示QuickTest等待应用程序中某个特定过程运行完成以后再运行下一步操作。
Waits until the specified object property achieves the specified value or exceeds the specified timeout before continuing to the next step.
一般,在下列情况下使用同步点:
- 判断进度条是否已经100%完成。
- 判断某一状态消息的出现。
- 等待某按钮状态变为可用。
- 一个操作后,弹出一个消息对话框。
- 等待窗口打开并提交数据。
默认同步时间
QTP默认的同步时间为20s。(File>>>Settings>>>Run>>>Object synchronization timeout:)
可以手工更改对象识别的同步时间。
Web插件对于Web浏览器对象的默认同步时间为60s。(File>>>Settings>>>Web>>>Browser navigation timeout:)
同样,可以手工更改对象识别的同步时间。
插入同步点
语法:object.WaitProperty(PropertyName,PropertyValue,[TimeOut])
Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").WaitProperty "name","wd",5000
QTP默认同步时间为全局时间,手工设置的时间为同步点超时时间,总超时时间=全局时间+同步点超时时间。时间单位ms。
同步点方法
- 对象的默认等待时间
- Sync方法
- WaitProperty方法
- Exist方法
- Wait方法
对象的默认等待时间
QTP识别对象时,会有一个默认的等待时间,可以在File>>>Settings>>>Run>>>Object synchronization中设置,默认时间是20秒,也就是说当执行到第2步时,网页还没有完全打开,这样的话QTP找不到第2步中需要的对象,那么它会在20秒内不断的尝试查找对象,如果百度这个网页在20秒之内完全打开,那么这个方法就可行(网页全部打开的话,第2步所需的对象就会被找到),如果超过20秒还不行的话,请参考下面几种方式
Sync方法
Sync方法等待浏览器或页面加载完成后才进行下一步操作。常用对象中,只有Browser(浏览器对象)和Page(页面对象)具有Sync方法。
Browser.Sync:表示等待IE状态显示为完成后,再进行下一步操作。
Page.Sync:表示等待页面信息加载完成后,再进行下一步操作。
SystemUtil.Run "iexplore.exe","http://www.google.com"
Browser("Google").Page("Google").Sync
注意:虽然Sync方法会使QTP等待到页面加载完成后,才进行下一步操作,但是它无法判断页面是否加载成功,如果需要判断页面加载是否成功,可以通过判断页面中对象visible的属性值。
If Browser("Google").Page("Google").WebEdit("q").GetROProperty("visible")=true then
msgbox "加载成功"
else
msgbox "加载不成功"
end if
Sync方法只能在Web中使用,如果其他类型的对象需要等待时间怎么办?可以使用QTP自带的同步点功能。
WaitProperty方法
WaitProperty方法是指当指定的属性出现后或是指定时间后指定的属性还未出现,再进行下一步操作。
注意:该方法适用于除WinMenu对象(菜单对象)以外的所有标准Windows对象。
常用的比较方式有一下6种:
- micGreaterThan(大于)
- micLessThan(小于)
- micGreaterThanOrEqual(大于或等于)
- micLessThanOrEqual(小于或等于)
- micNotEqual(不等于)
- micRegExpMatch(正则表达式匹配)
Exist方法
Exist方法用于判断对象是否存在 语法:object.Exist([TimeOut]) 当设置超时时间时,如object.Exist 10,那么QTP会一直查找该对象,如果在指定的时间内未找到该对象,则提示无法找到该对象。时间单位ms。
如果设置超时时间为0,如object.Exist 0,那么QTP不会等待,而是直接返回查找的结果(True或False)。
如果未设置超时时间,如object.Exist,那么超时时间为QTP默认的同步时间。
Do until Browser("百度一下,你就知道").Page("百度一下,你就道").WebEdit("wd").Exist(5)
Wait(1)
Loop
判断WebEdite这个对象是否出现,如果没有出现,执行Wait(1),如果出现,跳出循环。
Wait方法
Wait方法又称为为死等大法。Wait方法使QTP暂停运行一定的时间。
与其他的方法不同的是,Wait方法强制QTP暂停运行一定的时间,并不会判断指定的对象是否出现。不管对象是否出现,当等待的时间结束后,QTP都将进行下一步操作。
当脚本走到Wait函数时,就开始执行这个函数,如:Wait(10),就等待10秒,然后再继续执行下面的语句。Wait函数的这个等待的时间,是比较固定的,Wait(10),就一定要等待10秒后在执行。时间单位s。
同步点的等待时间就比较灵活,它的等待时间是不固定的。设置同步点后,当脚本执行到这句话后,脚本就开始执行等待,脚本会在规定时间内不断的去检查,所同步的对象有没有出现,一但出现,脚本就继续往下执行,不需要等完所规定的时间。如果在固定的时间内,所要同步对象还没有出现,那就提示超时的错误信息。