В тестировании веб-приложений на JavaScript одним из частых
требований является проверка того, что браузер находится на нужной
странице. Для этого используется получение текущего URL. В Protractor
для работы с URL применяется объект browser, который
предоставляет методы для взаимодействия с окном браузера и
навигации.
browser.getCurrentUrl()Основной инструмент для получения текущего URL — метод
browser.getCurrentUrl(). Этот метод
возвращает Promise, который разрешается в строку с
адресом текущей страницы.
Пример использования:
it('Должен получить текущий URL', async () => {
await browser.get('https://example.com/login');
const currentUrl = await browser.getCurrentUrl();
console.log('Текущий URL:', currentUrl);
});
browser.get(url) — открывает указанный URL в
браузере.browser.getCurrentUrl() — возвращает URL текущей
страницы.await или метод
.then() для обработки промиса.Protractor работает с асинхронными операциями через async/await или через промисы. При проверке URL важно учитывать, что страница может загружаться не мгновенно.
Пример с ожиданием изменения URL после действия на странице:
it('URL изменяется после нажатия кнопки', async () => {
await browser.get('https://example.com/login');
const loginButton = element(by.id('loginButton'));
await loginButton.click();
// Ждем, пока URL изменится на страницу профиля
await browser.wait(async () => {
const url = await browser.getCurrentUrl();
return url.includes('/profile');
}, 5000, 'URL не изменился на /profile за 5 секунд');
const currentUrl = await browser.getCurrentUrl();
console.log('Новый URL:', currentUrl);
});
browser.wait(conditionFn, timeout, message) — позволяет
ждать выполнения определённого условия.conditionFn должен возвращать
Promise/profile.Полученный URL часто проверяется с помощью библиотек ассерций, таких как Jasmine или Chai:
it('URL должен быть страницей логина', async () => {
await browser.get('https://example.com/login');
const currentUrl = await browser.getCurrentUrl();
expect(currentUrl).toBe('https://example.com/login');
});
expect(actual).toBe(expected) — проверяет полное
совпадение URL.toContain(substring) для проверки,
что URL содержит определённую часть.Ожидания загрузки страницы Для динамических
приложений Angular Protractor автоматически ждёт завершения асинхронных
операций, но для сторонних страниц рекомендуется использовать
browser.wait() или проверки наличия элементов.
Избегание магических строк Желательно хранить ожидаемые URL в константах или файлах конфигурации, чтобы облегчить поддержку тестов при изменении маршрутов.
const LOGIN_PAGE_URL = 'https://example.com/login';
expect(await browser.getCurrentUrl()).toBe(LOGIN_PAGE_URL);
const currentRoute = await browser.getCurrentUrl();
expect(currentRoute).toContain('/dashboard');
browser.getCurrentUrl() от browser.get()browser.get(url) открывает указанную страницу и
возвращает промис после её загрузки.browser.getCurrentUrl() не открывает
страницу, а только получает адрес текущей вкладки.Для отладки тестов удобно выводить URL в консоль, что помогает убедиться, что переходы происходят корректно:
const url = await browser.getCurrentUrl();
console.log('Проверяем текущий URL:', url);
Protractor интегрирован с Angular, поэтому
browser.getCurrentUrl() автоматически учитывает завершение
асинхронных операций Angular, что делает проверку URL более стабильной
на страницах с динамическим контентом.
Если требуется, могу написать следующую подробную главу о сравнении текущего URL с ожидаемым в сложных сценариях навигации, где будет показано, как работать с редиректами и параметрами URL.