Переход по URL

Protractor — это фреймворк для автоматизированного тестирования веб-приложений на базе Angular и AngularJS, построенный поверх Selenium WebDriver. Одной из ключевых операций при тестировании является переход по URL, поскольку большинство сценариев тестирования начинается с открытия страницы приложения.

Методы перехода на URL

В Protractor для навигации используется объект browser. Основной метод для перехода на конкретный URL — это browser.get(). Его синтаксис:

browser.get('https://example.com');

Особенности метода:

  • browser.get(url) возвращает Promise, который завершится после полной загрузки страницы.
  • Метод корректно работает с Angular-приложениями, автоматически ожидая завершения асинхронных процессов Angular.
  • Для не-Angular страниц следует использовать дополнительную настройку browser.waitForAngularEnabled(false):
browser.waitForAngularEnabled(false);
browser.get('https://non-angular-site.com');

После загрузки страницы browser.get() позволяет продолжать работу с элементами DOM.

Альтернативные методы навигации

  1. browser.navigate().to(url) Этот метод аналогичен browser.get(), но предоставляет дополнительные возможности цепочки навигации:
browser.navigate().to('https://example.com');
  1. browser.navigate().back() Позволяет вернуться на предыдущую страницу в истории браузера.
browser.navigate().back();
  1. browser.navigate().forward() Двигает браузер вперед по истории.
browser.navigate().forward();
  1. browser.refresh() Перезагружает текущую страницу, сохраняя состояние сессии.
browser.refresh();

Управление ожиданиями при переходе

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

const EC = protractor.ExpectedConditions;
const elementToWait = element(by.css('.main-content'));

browser.get('https://example.com');
browser.wait(EC.visibilityOf(elementToWait), 5000);

Здесь browser.wait() ожидает видимость элемента в течение 5 секунд, предотвращая ошибки из-за попытки взаимодействия с элементом до его появления.

Работа с динамическими URL

В современных приложениях URL часто формируются динамически. Protractor поддерживает использование переменных и шаблонных строк:

const userId = 42;
browser.get(`https://example.com/users/${userId}`);

При работе с параметризованными маршрутами это позволяет создавать универсальные тесты для разных данных без дублирования кода.

Проверка текущего URL

Для проверки, что браузер перешел на нужную страницу, используется метод browser.getCurrentUrl():

browser.getCurrentUrl().then((url) => {
    expect(url).toContain('/users/42');
});

Такой подход позволяет валидировать корректность перехода и интегрировать проверки в тестовые сценарии.

Советы по организации переходов

  • Для упрощения поддержки тестов рекомендуется вынести URL в конфигурационный файл или объект с константами:
const urls = {
    home: 'https://example.com',
    login: 'https://example.com/login',
    userProfile: (id) => `https://example.com/users/${id}`
};
  • Использование методов навигации browser.navigate().back() и browser.navigate().forward() помогает тестировать сценарии с историей браузера, что важно для SPA-приложений.

  • При тестировании не-Angular страниц browser.waitForAngularEnabled(false) нужно включать до вызова перехода и включать обратно после завершения работы со страницей, чтобы не нарушить синхронизацию с Angular на других страницах.

Примеры комплексного использования

it('должен переходить между страницами и проверять URL', async () => {
    await browser.get('https://example.com/login');
    await element(by.id('login-button')).click();

    await browser.waitForAngular();
    expect(await browser.getCurrentUrl()).toContain('/dashboard');

    await browser.navigate().back();
    expect(await browser.getCurrentUrl()).toContain('/login');

    await browser.navigate().forward();
    expect(await browser.getCurrentUrl()).toContain('/dashboard');

    await browser.refresh();
    const mainElement = element(by.css('.dashboard-content'));
    const EC = protractor.ExpectedConditions;
    await browser.wait(EC.visibilityOf(mainElement), 5000);
});

Этот пример демонстрирует полный цикл навигации: переход на страницу, проверку URL, работу с историей браузера и использование ожиданий.


Переход по URL в Protractor является фундаментальной операцией для построения стабильных тестов. Понимание различий между browser.get() и browser.navigate(), правильное управление ожиданиями и работа с динамическими URL позволяет создавать надежные автоматизированные сценарии для любых веб-приложений.