#angularjs #testing #protractor
#angularjs #тестирование #транспортир
Вопрос:
Я пытаюсь привести свои тесты protractor к wait
условию, но я получаю непоследовательное поведение. Сценарий такой:
- Пользователь вводит некоторые термины в поле поиска
- Запускается отмененное событие. Итак, это зависит от того, когда пользователь прекращает печатать.
- Мы делаем запрос API, тем временем мы показываем
is loading
отзыв и скрываемclose button
. - Обратная связь исчезает,
close button
появляется снова, продолжается.
Итак, для достижения этого я наблюдаю за close button
. Виден промежуток между прекращением записи пользователем и срабатыванием события отмены close button
. После срабатывания отмененного события (мы отправляем запрос) is loading
элемент отображается и close button
скрывается [1]. По завершении close button
снова отображается.
Любая идея действительно ценится, спасибо!
1: Чтобы упростить тестирование, я сделал так, чтобы close button
сообщение исчезало как минимум через 200 мс, чтобы на локальном хостинге оно не исчезало сверхбыстро. Это должно быть нормально, поскольку webdriver опрашивает условие ожидания каждые 100 мс.
Итак, это мой тест:
it('should show "no results" feedback when there are no results', function () {
app.getHomepage();
app.topMenu.searchLink.click();
app.search.termsInput.sendKeys('chipijanders');
app.search.waitForSearch();
expect(app.search.noResults.isDisplayed()).toBe(true);
// Checking the waitForSearch consistency
for (var i = 0; i < 10; i ) {
app.search.closeLink.click();
app.topMenu.searchLink.click();
app.search.termsInput.sendKeys('chipijanders');
app.search.waitForSearch();
expect(app.search.noResults.isDisplayed()).toBe(true);
}
});
И вот waitForSearch
:
waitForSearch: function () {
var self = this;
browser.driver.wait(function() {
return self.closeLink.isDisplayed().then(function (isDisplayed) {
return !isDisplayed;
});
});
browser.driver.wait(function() {
return self.closeLink.isDisplayed().then(function (isDisplayed) {
return isDisplayed;
});
});
}
Ответ №1:
Недавно возникла проблема с ожиданием отмененного метода в подчеркивании. Решение, которое я использовал, заключалось в переопределении _.debounced в protractor.conf следующим образом
onPrepare: function () {
var debounceRightNow = function () {
angular.module('debounceRightNow', []).run(
function () {
_.debounce = function (callback) {
return callback;
};
});
};
browser.addMockModule('debounceRightNow', debounceRightNow);
}
Не уверен, отвечает ли это на ваш вопрос, но это отличное решение
Комментарии:
1. Прошло некоторое время с тех пор, как возникла эта проблема, но мне кажется, что это хороший подход.