2016-02-19 61 views
1

我是量角器的新角色,用於自動化angularJs應用程序。我試圖從元素列表中選擇一個元素。我正在嘗試進行錯誤處理,但由於承諾,我無法按預期工作。角度量角器中的錯誤處理

在下面的代碼中,如果我傳遞一個無效的categoryName,它永遠不會打印錯誤,而是轉到驗證部分(期望)並失敗。

請幫我理解這一點,我該如何解決這個問題。我嘗試使用回調,但不是運氣。我也嘗試嘗試趕上,仍然沒有運氣。感謝這裏的任何幫助。由於

this.elements = element.all(by.css('.xyz')); 
this.selectCategory = function (categoryName) { 
    this.elements.each(function (category) { 
     category.getText().then(function (text) { 
      if (text === categoryName) { 
       log.info("Selecting Category"); 
       category.click(); 
      } 
     }, function (err) { 
      log.error('error finding category ' + err); 
      throw err; 
     }); 
    }) 
}; 

回答

1

使用filter()和檢查有多少元素匹配:

var filteredCategories = this.elements.filter(function (category) { 
    return category.getText().then(function (text) { 
     return text === categoryName; 
    }); 
}); 
expect(filteredCategories.count()).toEqual(1); 
filteredCategories.first().click(); 
+0

在我的用例中,我沒有從下拉列表或選擇框中選擇元素。我有一列具有不同類別名稱的元素。 filter()在那種情況下工作嗎? – kumarvarun

+0

@VarunMukka當然,試試看吧。 – alecxe

+0

謝謝,那工作:) – kumarvarun

1

如果你想記錄無效的情況下,你可以這樣做。

this.selectCategory = function (categoryName) { 

    var filteredCategories = this.categoryElements.filter(function (category) { 
     return category.getText().then(function (text) { 
      return text === categoryName; 
     }) 
    }) 

    filteredCategories.count().then(logInvalidCategory) 

    expect(filteredCategories.count()).toEqual(1); 
    filteredCategories.first().click(); 
} 

function logInvalidCategory(count) { 

    if(count === 0) { 
     log.info("Invalid Category"); 
    } 
}