#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);
});
}