В автоматизированном тестировании веб-приложений управление историей браузера является важным инструментом для проверки поведения страниц при навигации. Protractor предоставляет встроенные методы для управления переходами назад и вперёд, которые напрямую используют возможности Selenium WebDriver.
browser.navigate().back()Метод back() имитирует нажатие кнопки «Назад» в
браузере. Это позволяет тесту возвращаться на предыдущую страницу,
сохраняя состояние сессии и куки. Использование выглядит следующим
образом:
it('должен вернуться на предыдущую страницу', async () => {
await browser.get('https://example.com/page1');
await browser.get('https://example.com/page2');
await browser.navigate().back();
const url = await browser.getCurrentUrl();
expect(url).toBe('https://example.com/page1');
});
Особенности:
await.Promise<void>; результат
перехода проверяется через URL или элементы страницы.browser.navigate().forward()Метод forward() используется для движения по истории
браузера вперёд. Чаще всего применяется после вызова
back(), чтобы вернуться на следующую страницу:
it('должен перейти вперёд по истории браузера', async () => {
await browser.get('https://example.com/page1');
await browser.get('https://example.com/page2');
await browser.navigate().back();
await browser.navigate().forward();
const url = await browser.getCurrentUrl();
expect(url).toBe('https://example.com/page2');
});
Ключевые моменты:
forward() работает только после того, как была
осуществлена навигация назад.await.back() и forward() с ожиданиямиПри тестировании динамических страниц необходимо учитывать время загрузки элементов после навигации. В Protractor это обеспечивается встроенными ожиданиями:
const EC = protractor.ExpectedConditions;
it('должен корректно обновлять элементы при переходе назад и вперёд', async () => {
await browser.get('https://example.com/page1');
await element(by.id('nextPageButton')).click();
await browser.navigate().back();
await browser.wait(EC.presenceOf(element(by.id('page1Element'))), 5000);
await browser.navigate().forward();
await browser.wait(EC.presenceOf(element(by.id('page2Element'))), 5000);
const text = await element(by.id('page2Element')).getText();
expect(text).toContain('Страница 2');
});
Важные моменты при работе с динамическим контентом:
ExpectedConditions предотвращает ложные
ошибки теста, связанные с задержкой рендеринга.getCurrentUrl() и поиска элементов позволяет контролировать
корректность отображения страниц после переходов.await для методов
back() и forward().ExpectedConditions), чтобы избежать проблем с асинхронным
рендерингом.Методы навигации back() и forward() в
Protractor являются простыми, но мощными инструментами, позволяющими
моделировать поведение реального пользователя и проверять правильность
работы веб-приложений при переходах между страницами.