Обработка ошибок в угловом транспортире

Я новичок в транспортире для автоматизации приложений 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;
        });
    })
};

2 ответа

Решение

Использование 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();

Если вы хотите регистрировать неверные случаи, вы можете сделать это следующим образом.

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");
   }
}
Другие вопросы по тегам