Как работает 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
Итак, вопрос:
- что произойдет после вызова waitForAngularEnabled(false)? (как только критерии соответствуют или тайм-аут происходит в моем случае)
- должен ли я вернуть waitForAngularEnabled (true) для продолжения нормального тестирования?
- если я должен сделать, где его поставить?
надеюсь получить четкие ответы с некоторым фоновым принципом.
спасибо!
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). Я не сталкивался с проблемами при таком подходе.