Ожидание инициализации AngularJS после использования navigateTo - PullRequest
0 голосов
/ 26 февраля 2019

Я заметил, что у меня есть для использования navigateTo для тестов, в которых используется уже аутентифицированный пользователь.Если я определяю их с помощью .page, это просто возвращает меня к экрану входа в систему, потому что кажется, что он не может видеть роль / состояние.

Я предполагаю, что это предназначено, но документация не так ясна,но это предположение, которое я сделал, может повлиять на мой реальный вопрос.

Я также считаю, что любая beforeEach логика запускается до метода navigateTo, который нарушает логику, необходимую нам для "waitForAngularJS"".

У меня есть метод waitForAngularJS, который я адаптировал из официального waitForAngular.Он отлично работает, когда используется без аутентификации (когда я могу использовать .page...), но не запускается на странице «переход к», когда я использую аутентификацию.

fixture `demo1`
    .beforeEach(async () => {
        await waitForAngularJS();
    });

test('modal title', async t => {
    await t
        .useRole(regularUser)
        .navigateTo('http://127.0.0.1/some/page')
        // .. the "wait for angular" needs to run here, but can't
        .expect(Selector('.modal-title').innerText).eql('My Modal');
});

Установка .wait(1000)в этом месте решает мою проблему.Когда я использую .debug(), я могу сказать, что логика waitForAngular не была запущена на новой странице.

Редактировать: Согласно форумам , порядок логики правильный:

открывает страницу прибора;выполняет функцию beforeEach;выполняет команду useRole: переходит на страницу инициализации роли (первый аргумент команды useRole), выполняет функцию инициализации и переходит на ранее открытую страницу в качестве зарегистрированного пользователя;возобновляет тест.

1 Ответ

0 голосов
/ 26 февраля 2019

Тест e2e должен быть независим от структуры, используемой для визуализации страницы.На мой взгляд, вы не должны использовать методы, такие как waitForAngularJS.Просто перепишите оператор ожидания следующим образом:

await t
  .expect(Selector('.modal-title').innerText).eql('My Modal', {timeout: 10000});

Вы также можете установить тайм-аут подтверждения непосредственно в командной строке TestCafe.

...