2015-06-25 71 views
1

我對量角器和承諾一般都比較陌生。我已經看了一下,雖然有很多關於回覆承諾的帖子,或者排隊行爲的結果,但是沒有一個對我很有意義,所以我對一個相當容易描述的答案做了一個我希望的結果簡單的問題!量角器e2e測試從實用步驟返回承諾

我想爲我的angularjs網站編寫一些量角器測試。

我主要使用引導和角度,沒有其他第三方庫,除了偶爾的角度附加,如烤麪包機和自舉模態。

在我開始測試的斷言部分之前,我有幾個'安排步驟'。比方說:

  • 一)
  • B)的人訪問選項形式(其中可能會或可能 不已經顯示依賴於一些外部 因素在屏幕上的人的日誌,但如果它不存在,他們可以用按鈕打開它 )。
  • c)人員對選項表單執行操作。
  • d)斷言窗體上的文本框現在包含正確的值。

我可以讓我測試通過很容易當的形式已經在屏幕上,但是這讓我卡住位是步驟b),我需要先檢查是否存在活動的窗體,然後點擊一個按鈕如果它不在執行步驟c之前。

我試圖返回從isDisplayed像這樣的承諾:

// 
// Is the user settings form active at the mo? 
// 
function _isUserSettingsFormActive() 
{ 
    var result = element(by.id(logoutFormID)).isDisplayed; 
    return result; 
} 

但是,如果我打電話。然後在_isUserSettingsFormActive()我收到以下錯誤:

[31mTypeError: undefined is not a function[0m 

但是如果我輸出結果_isUserSettinsFormActive()我看到下面,所以我知道它是返回的東西:

function() { 
return self.elementArrayFinder_[fnName]. 
apply(self.elementArrayFinder_, arguments).toElementFinder_(); 
} 

我想要做的就是檢查一個項目是否存在,並在執行我的斷言之前採取行動。

它需要在一個函數中,因爲這個代碼將在我的測試套裝中的很多地方使用。這不是「期望」本身,更多的是可能需要或可能不需要採取措施來設置瀏覽器以便我的測試通過的步驟。

回答

1

isDisplayed是一個函數,所以它應該被稱爲這樣的:

function _isUserSettingsFormActive() 
{ 
    var result = element(by.id(logoutFormID)).isDisplayed(); 
    return result; 
} 
+0

由於dmitankin。我想我在咆哮錯誤的樹。我有點困惑,因爲isDisplayed的文檔狀態它返回 一個承諾,將解決此元素是否目前在頁面上可見。這就是爲什麼我試圖獲得工作/回報的承諾。如果它只是一個功能,你能澄清一下這些文檔對我來說意味着什麼嗎?只是讓我明白我未來的讀物! :) – LinKeCodes

+1

這是有點混亂,是的,但主要是因爲缺乏例子。 'isDisplayed'是一個返回promise的函數,所以你可以這樣做:'element(by.id(logoutFormID))。isDisplayed()。then(function(visible){console.log(visible);});'' –

1

量角器並不像硒的Java或C#綁定工作會(它funner但更多的工作來實現什麼是簡單的動作在Java或C#中)。如果選項表單也不在DOM中,但如果它在DOM中並且只是隱藏,則可以使用isDisplayed(),這將會更安全一些。我爲兩種情況寫了兩個例子,包括根據條件點擊按鈕。

選項1(在DOM不存在,並且不顯示):

function _isUserSettingsFormActive() { 
    //$$('#logoutFormId') is the equivalent of element.all(by.id('logoutFormId')) 
    $$('#logoutFormId').count().then(function(num){ 
     if(num < 1) { 
      element(by.id('openLogoutButton').click(); 
     } 
    }); 
}; 

OR

選項2(存在於DOM但不顯示):

function _isUserSettingsFormActive() { 
    //$('#logoutFormId') is the equivalent of element(by.id('logoutFormId')) 
    $('#logoutFormId').isDisplayed().then(function(visible){ 
     if(!visible) { 
       element(by.id('openLogoutButton').click(); 
     } 
    }); 
};