Транспортир: Ошибка: истекло время ожидания завершения асинхронных угловых задач через 11 секунд - PullRequest
0 голосов
/ 07 сентября 2018

Я получаю ошибку ниже:

Сбой: истекло время ожидания завершения асинхронных угловых задач через 11 секунд.Это может быть связано с тем, что текущая страница не является приложением Angular

Я видел похожий вопрос, но ни у одного из них нет хорошего решения

, работающего над 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) onPrepare

browser.params.tokens =токен перед запуском

3)

it('should authenticate',() => {
       browser.get('/home?'+browser.params.token)
       expect(browser.getCurrentUrl()).toContain('home');
})

на 3-м шаге выдает ошибку.

PS: я пробовал несколько опций, например ignoreSync, waitforangularenabled, sleep ничего не получалосьможет кто-нибудь указать мне, что я делаю здесь не так

1 Ответ

0 голосов
/ 09 сентября 2018

Здесь может быть проблема, вызванная конкретной структурой вашего приложения. Потому что по умолчанию Protractor ожидает вашего приложения Angular, пока Angular не перейдет в так называемый «спокойный режим»

Перед выполнением какого-либо действия Protractor ждет, пока в приложении Angular не будет отложенных асинхронных задач. Это означает, что все таймауты и HTTP-запросы завершены. - это «спокойный режим»

Многие люди сталкиваются с этим, вы можете увидеть много вопросов о StackOverFlow, давно я тоже задавал этот вопрос, а затем мы решили эту проблему с моей командой.

Сначала прочитайте его, чтобы узнать основу: https://github.com/angular/protractor/blob/master/docs/timeouts.md

В свою очередь, я предложу вам 2 варианта, из которых вам нужно выбрать один.

  1. В местах, где падает тест, поставьте waitForAngularEnabled(false); и после некоторых действий (которые вы определите при тестировании) верните его, поместив ту же строку кода с логическим значением true

    waitForAngularEnabled(true)

Это означает, что вы приказали своему транспортиру не ждать, пока Angular прекратит работать, и продолжит его работу, а затем в какой-то момент, когда вы узнаете, что Angular снова останавливает свою работу, вы снова включаете этот параметр, и Protractor будет ждать для Angular снова. Но это может быть не единственное место, где это может произойти, и если это так, вам нужно перейти к варианту 2

  1. Чтобы обсудить с вашими разработчиками, как изменить приложение, чтобы Protractor мог работать без препятствий. P.S. Это то, что я сделал в своей команде, и они исправили приложение, чтобы тесты Protractor работали без сбоев.
...