Как работает waitForAngularEnabled?

мне любопытно, как работает waitForAngularEnabled ()? Хотя это не кажется сложным, однако, я не мог получить удовлетворенных ответов нигде. Надеюсь, кто-то поможет мне получить разрешение.

моя цель-проверить критерии и приостановить / заблокировать запуск теста, пока критерии не будут выполнены. Вот примеры, например.

A. чтобы приостановить выполнение теста и дождаться загрузки страницы

    ...
    let theElement = ...;
    browser.waitForAngularEnabled(false);
    browser.wait(protractor.ExpectedConditions.presenceOf(theElement));

B. использовать браузер.wait (), альтернативный способ для аналогичной цели с

    browser.wait(() => {
        browser.waitForAngularEnabled(false);
        return browser.isElementPresent(by.id('the-element-id'));
    }, timeout); // timeout may not be given

Итак, вопрос:

  1. что произойдет после вызова waitForAngularEnabled(false)? (как только критерии соответствуют или тайм-аут происходит в моем случае)
  2. должен ли я вернуть waitForAngularEnabled (true) для продолжения нормального тестирования?
  3. если я должен сделать, где его поставить?

надеюсь получить четкие ответы с некоторым фоновым принципом.

спасибо!

1 ответов


1. Что произойдет после вызова waitForAngularEnabled(false)? (как только критерии соответствуют или тайм-аут происходит в моем случае)

эмпирически я обнаружил, что это, похоже, заставляет транспортир вести себя как просто Webdriver. Он не ждет, пока Angular "успокоится" (без ожидающих HTTP-запросов или обновлений), что является поведением для true. Вместо этого, если вы используете false настройка, вам нужно будет использовать ExpectedConditions или аналогичные подходы в порядке чтобы проверить предварительные условия для надежного выполнения шагов теста, как и при обычном тесте Webdriver.

2. Должен ли я вернуть waitForAngularEnabled(true) для продолжения нормального тестирования?

да. Однако я обнаружил, что в Транспортире 5.1.1 и 5.1.2, независимо от использования потока управления или нет, рассеяние отличается waitForAngularEnabled значения во всех тестах в одном и том же выполнении, похоже, дают непредсказуемые результаты; то есть включенное состояние не следует та же асинхронная семантика других вызовов транспортира/Webdriver. До сих пор мой вывод заключается в том, что вы не можете надежно смешивать waitForAngularEnabled(false) и waitForAngularEnabled(true) в одном и том же исполнении. Я подозреваю, что это ошибка транспортира, но я еще не разработал простой и надежный тест, чтобы доказать это в поддержку отправки проблемы транспортира. Была, возможно, связанная с этим проблема здесь, теперь закрыто, но не полностью диагностировано.

3. Если я должен делай, куда положить?

"перед" Вы делаете вызовы транспортира / Webdriver, которые требуют восстановления ожидающей угловой семантики. Однако, как упоминалось выше, неясно, что вы можете надежно гарантировать, что такие вызовы действительно будут сделаны в контексте true настройка.

если вы должны иметь некоторые тесты, которые используют false и другие true, вы можете запускать их в отдельных исполнениях (отдельные процессы; не запускайте их с тем же protractor или ng e2e command). Я не сталкивался с проблемами при таком подходе.