Ожидание транспортира() для отмененного события загрузка

#angularjs #testing #protractor

#angularjs #тестирование #транспортир

Вопрос:

Я пытаюсь привести свои тесты protractor к wait условию, но я получаю непоследовательное поведение. Сценарий такой:

  1. Пользователь вводит некоторые термины в поле поиска
  2. Запускается отмененное событие. Итак, это зависит от того, когда пользователь прекращает печатать.
  3. Мы делаем запрос API, тем временем мы показываем is loading отзыв и скрываем close button .
  4. Обратная связь исчезает, 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. Прошло некоторое время с тех пор, как возникла эта проблема, но мне кажется, что это хороший подход.