2015-02-24 148 views
3

我使用量角器1.7.0和角度1.2。使用量角器+角度在進行ajax調用時測試事件使用量角器+角度

我有一個功能,當我點擊一個按鈕說'加載結果'ajax請求被解僱,同時結果回來我看到一個按鈕說'取消請求'(取消正在進行的ajax請求,此按鈕當收到Ajax響應時會隱藏)。

我們測試它在量角器我wirting這樣的事情

//to load the results 
element(by.css('#load-results')).click(); 

//to cancel ongoing ajax request to load results  
element(by.css('.search-cancelled')).then(function(){ 
    element(by.css('.search-cancelled')).click(); 
}); 

它給了我一個錯誤說該元素是不可見的。

就我所知,量角器在執行下一個語句之前等待角度來解決它的承諾。因此,直到它達到此代碼的時間

element(by.css('.search-cancelled')).then(function(){ 
     element(by.css('.search-cancelled')).click(); 
    }); 

ajax調用已返回,這就是爲什麼元素被隱藏。

有沒有一種方法可以讓量角器不等待角度承諾,並執行我的代碼時,Ajax請求正在進行?

回答

1

看起來你可以這樣來做:

$('#load-results').click(); 
waitElementToBeShown($('.search-cancelled')); 
$('.search-cancelled').click(); 

這裏是幫助功能的代碼:

var waitElementToBeShown = function (elm) { 
    browser.wait(function() { 
     return elm.isPresent(); 
    },15000); 
    browser.wait(function() { 
     return elm.isDisplayed(); 
    },15000); 
}; 
+0

你能解釋一下你正試圖在這裏做什麼? 我試着運行你的代碼,但同樣的事情也在這裏發生。 – user3522681 2015-02-25 09:05:34

+0

我試圖運行你的代碼,但同樣的事情也發生在這裏。 執行'$('#load-results')。click();'量角器等待執行'waitElementToBeShown'之前返回的響應。所以基本上它不起作用,因爲它只有在當前語句完全執行時才執行下一個語句。 量角器內部使用硒,使用這種風格https://code.google.com/p/selenium/wiki/WebDriverJs#Control_Flows – user3522681 2015-02-25 09:12:36

+0

如果我得到正確的初始文章,你點擊一些按鈕,並在它之後,你會收到額外的按鈕來取消AJAX請求。我在我的測試中使用了相同的模式,它工作正常。從字面上看,這段代碼點擊了按鈕,理想情況下,一旦它點擊DOM變化並出現新元素,您正在等待它出現在DOM 2中。要點擊它,並點擊它 – 2015-02-25 09:26:28