Транспортир: ждать углового после смены страницы (асинхронный / ожидание) - PullRequest
0 голосов
/ 17 декабря 2018

Я запускаю тесты транспортира для моего приложения AngularJS.

Я сталкиваюсь со следующей проблемой - иногда после изменения страницы транспортир продолжает работу, не дожидаясь инициализации angular.Вот как я выполняю навигацию.

beforeAll(async function() {
    await browser.get('#/page-url');
})

И время от времени первый тест в комплекте не проходит, потому что он пытается получить доступ к некоторому элементу на странице, который еще не существует, репортер показывает мне скриншот пустой страницы.

Я попробовал следующее решение из аналогичный вопрос ответа

beforeAll(async function() {
    await browser.waitForAngular();
    await browser.get('#/page-url');
})

Но у меня это тоже не работает.Что я делаю не так?(AngularJS версия 1.7.2 / транспортир версия 5.4.0)

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Вот как бы я это сделал:

describe('your test spec description', async () => {    

    beforeAll( async ()  => {
        await browser.waitForAngular();
        await browser.get('#/page-url');
    });

    it('we can verify that ...', async () => {

        let importantElement = element(by.xxx(''));

        await browser.wait(
            ExpectedConditions.presenceOf(importantElement ),
            SHORT_TIMEOUT_MS, 'element is not present')

        //test code here, your element is ready 

    });
});
0 голосов
/ 18 декабря 2018

Я не уверен, почему вы разместили waittForAngular() еще до того, как страница открылась, так что это может быть вашей проблемой, так как ждать пока нечего.Таким образом, попробуйте этот способ

beforeAll( async ()  => {
    await browser.get('#/page-url');
    await browser.waitForAngular();
});

, но иногда этого недостаточно, и ответ Хаунса применим в этом случае.Во-первых, вы можете подождать столько элементов, сколько захотите, во-вторых, вы можете посмотреть, какой элемент заполняется последним, и дождаться его, или вы можете дождаться следующего элемента, с которым хотите взаимодействовать (не нужно ждать всех элементов.).

0 голосов
/ 17 декабря 2018

В Protractor вы можете использовать следующий подход

var EC = protractor.ExpectedConditions;
// Wait for new page url to contain newPageName
browser.wait(EC.urlContains('newPageName'), 10000);
So your code will look something like,

emailEl.sendKeys('username');
passwordEl.sendKeys('pwd');

btnLoginEl.click();

var EC = protractor.ExpectedConditions;
// Wait for new page url to contain efg
ptor.wait(EC.urlContains('efg'), 10000);

expect(ptor.getCurrentUrl()).toEqual(url + 'abc#/efg');

Примечание. Это может не означать, что новая страница завершила загрузку и DOM готов.Последующее выражение «ожидаем ()» обеспечит, чтобы Транспортир ожидал, что DOM будет доступен для тестирования.

Ссылка: Транспортир Ожидаемые условия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...