2016-11-08 5 views
1

Итак, у меня есть функция объекта страницы, которая проверяет, что на экране появляется определенная ошибка. errorMsg - это селектор, который уже определен в varПроверка наличия элемента по индексу

this.isErrorMessageDisplayed = function() { 
     expect(errorMsg.isDisplayed()).to.become(true); 
} 

Эта функция отлично работает. Тем не менее, я продолжаю нарваться проблем при работе с элементами, которые имеют несколько .. Например, если это было определено как $$, и я хотел, чтобы проверить все вхождения их, я пытался, как это ..

this.isErrorMessageDisplayed = function() { 
     for(i = 0; i < errorMsg.count(); i++){ 
      expect(errorMsg.get(i).isDisplayed()).to.become(true); 
    } 
} 

Почему это не работает, однако всякий раз, когда есть только один элемент, который я пытаюсь определить, он отлично работает? Спасибо за помощь!

ответ

2

Прежде всего, транспортир работает асинхронно. Это означает, что когда транспортир выполнил линию и перешел к следующей строке, это не означает, что линия завершила выполнение. Добро пожаловать в мир программирования асинхронного: P

Следующий код моя рекомендация:

this.isErrorMessageDisplayed = function() { 
    errorMsg.each(function (elem,index) { 
     expect(elem.isDisplayed()).toBe(true) 
    }); 
}; 
+0

, если вы не собираетесь использовать индекс ни для чего, зачем включать его в функцию '.each()'? Просто держите 'elem' – Gunderson

+0

Вы, ребята, рок, это сработало, как только я изменил его на to.become (true). Спасибо вам большое – Tree55Topz

+0

Я только что узнал что-то .. эта функция все равно не сработает, потому что если счет равен нулю, он все равно пройдет. – Tree55Topz

3

Метод count() возвращает обещание. Он не может использоваться как верхняя граница для вашего цикла. Вместо того, чтобы использовать $$(...).each для перебора каждого элемента:

this.isErrorMessageDisplayed = function() { 
    errorMsg.each(e => { 
    expect(e.isDisplayed()).to.become(true); 
    }); 
}; 
+0

Это не кажется, нравится синтаксис е => {.. это правильный синтаксис для JS? – Tree55Topz

+0

Функция стрелки была введена ECMAScript 6 и поддерживается с узла 4.4.5. Вы можете заменить его простой функцией. –

0

Вы можете также использовать что-то вроде ниже,

this.isErrorMessageDisplayed = function() { 
    expect(errorMsg.isDisplayed()).not.to.include(false); 
}; 

, если у вас есть массив элементов, то isDisplayed возвратит вас с массивом отображаемого статуса, как [true,true,true]. Вам нужно проверить, что массив не содержит false.

Смежные вопросы