Selenium測試Ajax程式

來源:互聯網
上載者:User

上周末參加了Qclub的百度技術沙龍,聽了百度的孫景衛講了Web自動化測試,講的非常好,然後在小組討論時又有幸座在了一起。我們討論的一個內容,就是Ajax應用程式比原來的非Ajax程式更不易測試,這裡有兩個主要原因。

第一:Ajax使得基於純錄製的方式無法工作,因為錄製一個操作,這次返回需要5秒鐘,下次會更多或更少。

第二:一些測試載入器是基於原來非Ajax程式來開發的,後面沒做對應的升級。

但是,同樣有很多工具支援Ajax的測試,今天我們就來看一下大名鼎鼎的Selenium如何測試Ajax程式。

準備Ajax程式

這裡我們使用ASP.NET MVC,實際上你可以使用任何程式來類比一個AJAX調用。

a. 準備一個頁面,這裡我們使用了JQuery.

 <input id="GetContent" value="Get" type="button" onclick="GetAjaxContent();" /> <div id="results" style="border:solid 1px red; display:none;"> </div> <script type="text/javascript">        function GetAjaxContent() {            $.ajax({                url: "Home/GetAjaxContent",                success: function (html) {                    $("#results").show().append(html);                }            });                }</script>

b. 準備背景程式,把下面的代碼加入HomeController.

public ContentResult GetAjaxContent(){   Thread.Sleep(9000);   return new ContentResult { Content = "Hello World" };}

c. 效果 當我們點擊Get時,頁面出現Hello World。

使用Selenium進行Ajax測試

如果你沒用個Selenium,請參考我的這篇文章Web測試:Selenium使用

如果我們點擊Get按鈕後,直接判斷頁面是否返回”Hello World”時,這樣會出錯,因為現在還沒有立即返回。

這時我們就需要使用Selenium的WaitForCondition方法,這個方法會不停的去判斷一個javascript運算式是否是true. 知道返回true時才繼續執行。

 

我們可以看到,我們需要寫js運算式,如果我們需要判斷的很複雜,那麼些運算式也是一件很麻煩的事,同時這個方法經過我的使用,它對IE的支援不好。那麼有沒有更好的方法呢?

更好的方法判斷Ajax調用是否結束

事實上我們測試Ajax程式最大的麻煩,就是想上面一樣來判斷Ajax調用是否結束,上面我們是判斷頁面中如果出現”Hello World”,證明Ajax已經結束了,那麼什麼是更好的方法呢,我們經常使用的javascript的類庫是JQuery,如何判斷JQuery的Ajax調用已經結束了呢?

經過研究發現當沒有ajax調用時,Jquery.active=0.

所以,我們可以使用這個萬能的運算式判斷Ajax是否返回。

selenium.WaitForCondition("selenium.browserbot.getCurrentWindow().jQuery.active == 0", "50000");

是不是整個世界清靜多了

 

下面我收集了判斷其它類庫的Ajax活動狀態

jQuery: “jQuery.active”

Prototype: “Ajax.activeRequestCount”

Dojo: “dojo.io.XMLHTTPTransport.inFlight.length”

ASP.NET AJAX:

Javascript:

function isInAsyncPostBack() {

instance = Sys.WebForms.PageRequestManager.getInstance();

return instance.get_isInAsyncPostBack();

}

C#

selenium.WaitForCondition(“!selenium.browserbot.getCurrentWindow().isInAsyncPostBack()”, “1000″);

 

 

 

最後,打個小廣告,招聘Web測試人員,有Web測試經驗,較好的英語能力,思路清晰,能夠理解客戶需求(不依賴開發人員)和寫出較好的測試案例。有編程經驗者優先考慮,有Web Service測試經驗者優先考慮,要求工作態度認真,積極好學者。 薪水範圍5K--8K。上崗時間2周之內,有意者或者有介紹人的,請聯絡我,我的郵箱wangdeshui@gmail.com

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.