自己動手寫Web自動化測試框架5 - 判斷瀏覽器是否加載完成 軟件測試
上面的幾次課程中,我們介紹了如何打開瀏覽器,如何獲取每個web控件的信息,并且控制并驗證他們。
從上面的文章中,我相信大家已經可以寫出簡單的測試程序了。但是還有一個很重要的問題沒有解決:如何判斷瀏覽器是否加載完成?
前面的文章我們沒有對瀏覽器的加載進行判斷,而只是簡簡單單的等一段時間,這不是一個很好的解決方法,一方面浪費了時間,另一方面,我們也無法知道應該等多久,導致我們的測試程序不夠穩定。
接下來我們假設被測網頁沒有Ajax和框架,以這種情況來分析如何判斷網頁加載完畢。
現在比較常用判斷是否加載的方法有三種:
不停判斷IE的狀態,如果沒有準備好就等待。
實現IE的DocumentComplete事件,標志完成。
不停去查找頁面有沒有我們想要控件,沒有就等待。
第一種方法:不停判斷IE的狀態,我們要判斷IE的哪些狀態呢?
一方面,我們需要判斷IE的Busy狀態,看IE是不是在忙著解析東西,另一方面判斷IE的ReadyState狀態,看html文檔是不是被完全加載進來。
MILY: 新宋體"> while(ie.Busy || ie.ReadyState !=tagREADYSTATE.READYSTATE_COMPLETE) |
用如上的代碼就可以等待IE到完成。
這里只是簡簡單單的Demo,所以用了很簡單的預計進行判斷,我們假設我們的網頁沒有Ajax,也不會出現Load的死鎖,真正的實際工作要比這個復雜一些,比如要定一個Time out,如果除了Timeout的范圍,就強行終止,以防止測試過程中的死鎖。 而如何判斷Ajax是否被加載完,不是我們這個系列的討論范圍,請關注以后的其他系列文章。 |
這種方法是我比較推薦的一種方法,雖然《.net軟件測試自動化之道》推薦的是第二種方法,不過我經過實際的測試,推薦第一種方法。這個方法可以比較好的處理Navigate、Submit等情況,也是WatiN使用的方法(WatiN的用法要復雜很多,考慮到了Frame等其他情況)。
第二種方法:通過綁定DocumentComplete,用AutoResetEvent來等待。
InternetExplorer給我們提供了DocumentComplete事件,會在IE被Load之后被調用,我們可以使用這個來等待。等待方法就是使用System.Threading.AutoResetEvent對象來。
所以我們需要做的是:
聲明一個AutoResetEvent對象的實例,因為要在兩個方法直接調用,所以需要放到類的成員變量。
在InternatExplorer被獲取之后,綁定DocumentComplete事件。
在DocumentComplete事件中,調用AutoResetEvent.set()方法。
在等待頁面加載的時候調用AutoResetEvent.WaitOne()方法
下面是源代碼:
文章來源于領測軟件測試網 http://www.kjueaiud.com/