自己動手寫Web自動化測試框架(5):判斷瀏覽器是否載入完成
從上面的文章中,我相信大家已經可以寫出簡單的測試程式了。但是還有一個很重要的問題沒有解決:如何判斷瀏覽器是否載入完成?
前面的文章我們沒有對瀏覽器的載入進行判斷,而只是簡簡單單的等一段時間,這不是一個很好的解決方法,一方面浪費了時間,另一方面,我們也無法知道應該等多久,導致我們的測試程式不夠穩定。
接下來我們假設被測網頁沒有Ajax和框架,以這種情況來分析如何判斷網頁載入完畢。
現在比較常用判斷是否載入的方法有三種:
1. 不停判斷IE的狀態,如果沒有準備好就等待。
2. 實現IE的DocumentComplete事件,標誌完成。
3. 不停去查詢頁面有沒有我們想要控制元件,沒有就等待。
第一種方法:不停判斷IE的狀態,我們要判斷IE的哪些狀態呢?
一方面,我們需要判斷IE的Busy狀態,看IE是不是在忙著解析東西,另一方面判斷IE的ReadyState狀態,看html文件是不是被完全載入進來。
while (ie.Busy || ie.ReadyState != tagREADYSTATE.READYSTATE_COMPLETE) { Thread.Sleep(100); } |
這裡只是簡簡單單的Demo,所以用了很簡單的預計進行判斷,我們假設我們的網頁沒有Ajax,也不會出現Load的死鎖,真正的實際工作要比這個複雜一些,比如要定一個Time out,如果除了Timeout的範圍,就強行終止,以防止測試過程中的死鎖。
而如何判斷Ajax是否被載入完,不是我們這個系列的討論範圍,請關注以後的其他系列文章。
這種方法是我比較推薦的一種方法,雖然《.net軟體測試自動化之道》推薦的是第二種方法,不過我經過實際的測試,推薦第一種方法。這個方法可以比較好的處理Navigate、Submit等情況,也是WatiN使用的方法(WatiN的用法要複雜很多,考慮到了Frame等其他情況)。
第二種方法:通過繫結DocumentComplete,用AutoResetEvent來等待。
InternetExplorer給我們提供了DocumentComplete事件,會在IE被Load之後被呼叫,我們可以使用這個來等待。等待方法就是使用System.Threading.AutoResetEvent物件來。
所以我們需要做的是:
1. 宣告一個AutoResetEvent物件的例項,因為要在兩個方法直接呼叫,所以需要放到類的成員變數。
2. 在InternatExplorer被獲取之後,繫結DocumentComplete事件。
3. 在DocumentComplete事件中,呼叫AutoResetEvent.set()方法。
4. 在等待頁面載入的時候呼叫AutoResetEvent.WaitOne()方法
下面是原始碼:
//1.宣告AutoResetEvent物件例項 |
省略了一些前幾篇文章的東西,完整程式碼請下載原始碼。
這種方法有自己的好處,就是使用了IE自己的事件,判斷程式碼很簡單,不過有也不好的地方,第一就是幫度DocumentComplete事件以後,開啟的 IE會變得響應很慢,尤其是當設定斷點除錯的時候,IE會變得尤其的慢。第二個缺點就是如果加上框架,還有頁面的跳轉,就會是這個方法很難捉摸。比如,如果上面的例子裡面,URL寫成"baidu.cn",就會出錯。
第三種方法是不停的去讀我們要的控制元件是否出來。這個方法一般需要配合前面兩個使用,而且也可以部分解決Ajax的問題。因為具體實現程式碼比較多,而又不是我們要講的重點,就不貼出原始碼,只是講一下實現的思路,讓大家瞭解一下。
具體實踐方法是:設定一個Timeout,在這個Timeout時間之前,不停的去看我們要驗證的控制元件是不是被Load進來。如果對頁面進行建模,就會去看我們的這個頁面的所有的已經定義了的控制元件是不是被Load進來,如果出了Timeout,就會報錯。
這個方法的優點是可以部分解決Ajax,但是缺點也就是實現比較複雜,而且如果報錯,無法分清是因為頁面沒有這個控制元件,還是因為速度較慢,控制元件還沒有被讀入。
以上介紹了在沒有Ajax和框架情況下,如何判斷瀏覽器是否已經載入完成。從下一篇文章開始,我們就要進入正題,開始我們的自動化測試框架了。
相關文章
- 自己動手寫Web自動化測試框架Web框架
- 自己動手寫Web自動化測試框架(1) :概述Web框架
- 自己動手寫Web自動化測試框架(6):自動化測試框架的規劃Web框架
- 自己動手寫Web自動化測試框架(3):操縱Web控制元件Web框架控制元件
- 自己動手寫Web自動化測試框架(4):驗證Web控制元件Web框架控制元件
- 自己動手寫Web自動化測試框架(7):框架架構的設計Web框架架構
- 自己動手寫Web自動化測試框架(2):開啟和操縱IEWeb框架
- 自動化測試系列(2)—— 下載瀏覽器驅動瀏覽器
- 自動化介面測試,怎樣判斷 Bug 是否存在
- js判斷是否移動端及瀏覽器核心JS瀏覽器
- 自動化測試中如何判斷測試是否通過?詳解 Pytest 測試框架的斷言用法框架
- Web自動化之瀏覽器啟動Web瀏覽器
- web自動化測試框架-06 如何快速編寫自動化指令碼Web框架指令碼
- PHP判斷訪客是否移動端瀏覽器訪問PHP瀏覽器
- 判斷是否在微信瀏覽器中瀏覽器
- 如何判斷是否是360瀏覽器瀏覽器
- php判斷是否是微信瀏覽器PHP瀏覽器
- 如何判斷當前瀏覽器是否支援html5瀏覽器HTML
- 關閉webkit瀏覽器的自動完成,修正,大寫WebKit瀏覽器
- js 判斷是什麼瀏覽器、是否為谷歌瀏覽器JS瀏覽器谷歌
- js如何判斷當前瀏覽器是否是谷歌瀏覽器JS瀏覽器谷歌
- js如何判斷是否是IE瀏覽器JS瀏覽器
- Web自動化-Selenium自動化測試-4-編寫測試用例Web
- 自動化測試框架框架
- javascript如何判斷一張圖片是否載入完成JavaScript
- js判斷是否是IE瀏覽器程式碼JS瀏覽器
- 如何判斷當期瀏覽器是否支援canvas瀏覽器Canvas
- 如何判斷瀏覽器是否是IE11瀏覽器IE11
- 判斷客戶瀏覽器是否支援cookie (轉)瀏覽器Cookie
- 自動化測試框架Selenium入門框架
- 軟體測試框架——自動化測試框架框架
- 【自動化測試入門】自動化測試思維
- android 5個自動化測試Ui框架AndroidUI框架
- H5 自動化測試框架推薦H5框架
- 加速Web自動化測試Web
- 自動化測試框架思路框架
- 自動化測試框架指南框架
- RemoteBrowser:類似Puppeteer的瀏覽器自動化框架REM瀏覽器框架