Транспортир: Сбой: истекло время ожидания завершения асинхронных угловых задач через 11 секунд
Я получаю ниже ошибки:
Ошибка: истекло время ожидания завершения асинхронных угловых задач через 11 секунд. Это может быть потому, что текущая страница не является угловым приложением
Я видел похожий вопрос, но ни у одного из них нет хорошего решения
работает над Angular 4
Моя настройка:
1) onBeforeLaunch: я использую webdrive и chromedriver для получения токена для аутентификации
beforeLaunch(){
const webdriver = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const path = require('chromedriver').path;
// do stuff like get token save it in variable
driver.quit();
}
2) на подготовить
browser.params.tokens = токен до запуска
3)
it('should authenticate',() => {
browser.get('/home?'+browser.params.token)
expect(browser.getCurrentUrl()).toContain('home');
})
на 3-м шаге его ошибка подачи.
PS: я попробовал несколько вариантов, как ignoreSync, waitforangularenabled, сон ничего не работает, может кто-то указать мне, что я делаю здесь неправильно
1 ответ
Здесь может быть проблема, вызванная конкретной структурой вашего приложения. Поскольку по умолчанию Protractor ожидает вашего приложения Angular, пока Angular не перейдет в так называемый "спокойный режим"
Перед выполнением какого-либо действия Protractor ждет, пока в приложении Angular не будет отложенных асинхронных задач. Это означает, что все таймауты и http-запросы завершены. - это "спокойный режим"
Многие люди сталкиваются с этим, вы можете увидеть много вопросов о StackOverFlow, давным-давно я тоже задавал этот вопрос, а затем мы решили эту проблему с моей командой.
Во-первых, прочитайте его, чтобы узнать основу: https://github.com/angular/protractor/blob/master/docs/timeouts.md
В свою очередь, я предложу вам 2 варианта, из которых вам нужно выбрать один.
В местах, где тест падает
waitForAngularEnabled(false);
и после некоторых действий (которые вы определите во время тестирования) верните его, поместив ту же строку кода с логическим значением truewaitForAngularEnabled(true)
Это означает, что вы приказали вашему транспортиру не ждать, пока Angular перестанет работать, и продолжите его работу, а затем в какой-то момент, когда вы узнаете, что Angular снова останавливает свою работу, вы снова включаете этот параметр, и Protractor снова будет ждать Angular., Но это может быть не единственное место, где это может произойти, и если это так, вам нужно перейти к варианту 2
- Чтобы обсудить с вашими разработчиками изменение приложения, чтобы Protractor мог работать без препятствий. PS Это то, что я сделал в своей команде, и они исправили приложение, чтобы тесты Protractor работали без сбоев.