Как устранить ошибку: Ошибка: ошибка при ожидании синхронизации транспортира со страницей - PullRequest
0 голосов
/ 17 января 2019

У меня тестирование e2e с использованием транспортира. Мой тест включает в себя угловую страницу и не угловую страницу. У меня нет проблем с тестированием на неугловой странице. Но у меня ошибка при завершении теста на неугловой странице и обратно на угловую страницу.

Мой тест начинается с домашней страницы (угловой страницы) и нажимает кнопку входа. Это перенаправит на неугловую страницу. Завершите ввод имени пользователя и пароля, затем снова перенаправьте на угловую страницу. У меня проблема с последним шагом при тестировании обратно на угловую страницу.

beforeAll(() => {
    page = new Abcflow();
});

fdescribe('step 1', () => {
   beforeEach(async () => await page.navigateToStart());

    fit('login as staff and come back to home page', async () => {
    //start from an angular page
    await page.clickButton('a', 'Login / Register');

    //now in a non-angular page
    browser.driver.findElement(by.id('Email')).sendKeys('email');
    browser.driver.findElement(by.id('Password')).sendKeys('password');
    browser.driver.findElement(by.name('button')).click();

    //navigate back to angular page
    await page.navigateToStart();

    expect(await page.getPageTitleText()).toEqual('abc title');
  });
});

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

  • Ошибка: ошибка при ожидании синхронизации Protractor со страницей: «и angularJS тестируемость, и угловая тестируемость не определены. Это может быть либо потому, что это неугловая страница, либо потому что ваш тест включает в себя навигацию на стороне клиента, которая может помешать начальной загрузке Protractor. Подробнее см. https://github.com/angular/protractor/issues/2643

Я попытался добавить строки:

browser.ignoreSynchronization = true;
browser.waitForAngularEnabled(false);

Затем я получил еще одну ошибку, которая гласила: «Не найден элемент с помощью локатора». Самое смешное, что если я не проверю страницу входа и просто перейду к последней строке, она пройдет успешно. Похоже, тесты угловых страниц перестали работать после навигации по неугловым страницам.

Ответы [ 2 ]

0 голосов
/ 21 января 2019

После добавления:

browser.ignoreSynchronization = true;
browser.waitForAngularEnabled(false);

Вы получили:

No element found using locator

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

browser.ignoreSynchronization = true;
browser.sleep(3000);

ignoreSynchronization=true используется для неангулярных страниц или когда транспортир не может распознать его как угловую страницу. По умолчанию Protractor использует ignoreSynchronization=false и ожидает полной загрузки сайта Angular.

Кроме того, вы не должны одновременно использовать ignoreSynchronization и waitForAngularEnabled, потому что они делают одно и то же ( В чем разница между waitForAngularEnabled и browser.ignoreSynchronization в транспортире? ).

0 голосов
/ 17 января 2019

Если ваш код работает так, как вы говорите, это может быть просто добавление browser.waitForAngularEnabled (false);

fdescribe('step 1', () => {
   beforeEach(async () => await page.navigateToStart());

    fit('login as staff and come back to home page', async () => {
    //start from an angular page
    await page.clickButton('a', 'Login / Register');

    //now in a non-angular page
    await browser.driver.findElement(by.id('Email')).sendKeys('email');
    await browser.driver.findElement(by.id('Password')).sendKeys('password');
    await browser.driver.findElement(by.name('button')).click();

    //Setting this before you navigate back to the Angular page will ensure it will wait 
    // wait for page to load correctly
    await browser.waitForAngularEnabled(false);

    //navigate back to angular page
    await page.navigateToStart();

    expect(await page.getPageTitleText()).toEqual('abc title');
  });
});

Эта ошибка, которую вы получаете, может быть подлинной ошибкой и проблемой с вашим локатором на угловой странице, но вам нужно будет опубликовать ваше сообщение об ошибке и часть вашего html.

...