在運行測試腳本時,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。
同步點的等待時間就比較靈活,它的等待時間是不固定的。設置同步點後,當腳本執行到這句話後,腳本就開始執行等待,腳本會在規定時間內不斷的去檢查,所同步的對象有沒有出現,一但出現,腳本就繼續往下執行,不需要等完所規定的時間。如果在固定的時間內,所要同步對象還沒有出現,那就提示超時的錯誤信息。