Выполнение транспортира зависает при перенаправлении страницы

#angular #typescript #protractor

#angular #typescript #транспортир

Вопрос:

У меня проблема, когда выполнение транспортира зависает при перенаправлении страницы.

 describe('describe something', () => {
  beforeAll(() => {
    helpers.login();
    page.elementThatNavigatesToAnotherPage.click();
  });

  afterAll(() => {
    helpers.logout();
  });

  it('should something', () => {
    expect(page.someElement.isPresent()).toBe(true);
  });
});
  

Всякий раз, когда page.elementThatNavigatesToAnotherPage.click() находится в beforeAll() , выполнение транспортира зависает и истекает время ожидания. Если я удалю его, тест пройдет успешно и продолжит выполнение других тестов.

Моя login() функция выглядит следующим образом:

 export function login(): void {
  const loginPage = new LoginPage();

  browser.get('#/login');

  browser.wait(until.presenceOf(elementOnLoginPage), TIMEOUT).then(() => {
    loginPage.submit('username', 'password');
    loginPage.optionButton.click();

    browser.wait(until.presenceOf(elementOnNextPage), TIMEOUT);
  });
}
  

Комментарии:

1. Пожалуйста, покажите ошибку тайм-аута. И страница входа, и страница перенаправления являются страницей Angular или нет?

Ответ №1:

Ваша функция входа в систему кажется ошибочной. Все функции транспортира — ожидание, щелчок и отправка — асинхронны. Они возвращают обещание. Это означает, что вы должны дождаться разрешения возвращенного обещания, прежде чем сможете продолжить выполнение. Например.

 loginPage.submit('username', 'password')
 .then(() => {
     loginPage.optionButton.click()
     .then(() => {
          browser.wait(until.presenceOf(elementOnNextPage), TIMEOUT);
      });
  });
  

Ответ №2:

Как упоминал @Robert, вам нужно дождаться, пока ваша функция helpers.login() вернет обещание. Вот фрагмент, который я сейчас использую

 describe('Go to login page and then admin', () => {
    beforeAll(() => {
        navigateTo('login').then(()=> {
            <do something>
        });
        navigateTo('admin');
    });
});

navigateTo(path: string) {
    browser.waitForAngularEnabled(true);
    return browser.get(path).then(() => {
        browser.waitForAngularEnabled(false);
    });
}