Методы браузера browser.get()

В Protractor объект browser представляет браузер, управляемый WebDriver, и предоставляет широкий набор методов для навигации, управления окнами, ожиданий и выполнения скриптов. Метод browser.get() является основным инструментом для загрузки веб-страниц и взаимодействия с ними.

Основной синтаксис

browser.get(url, timeout);
  • url — строка с адресом страницы, которую необходимо открыть.
  • timeout — необязательный параметр, задающий максимальное время ожидания загрузки страницы (в миллисекундах). Если время превышено, тест завершится ошибкой.

Метод возвращает Promise, который разрешается после полной загрузки страницы и выполнения Angular, если приложение является Angular-приложением. В Protractor все методы браузера асинхронны, поэтому важно использовать await в сочетании с async функциями.

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

Особенности работы с Angular

Protractor автоматически ожидает завершения всех асинхронных операций Angular перед разрешением промиса browser.get(). Это означает, что нет необходимости добавлять явные ожидания при стандартной загрузке страниц Angular-приложений.

Если тестируемое приложение не является Angular, нужно отключить ожидания Angular:

browser.waitForAngularEnabled(false);
await browser.get('https://non-angular-site.com');

Метод waitForAngularEnabled(false) временно отключает внутреннюю синхронизацию Protractor с Angular. После загрузки страницы можно вернуть синхронизацию:

browser.waitForAngularEnabled(true);

Использование browser.getCurrentUrl() и browser.getTitle()

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

const currentUrl = await browser.getCurrentUrl();
const pageTitle = await browser.getTitle();
  • getCurrentUrl() возвращает URL текущей страницы.
  • getTitle() возвращает заголовок страницы <title>.

Эти методы особенно полезны для проверки успешной навигации после вызова browser.get().

Передача параметров и хэш-маршрутов

browser.get() поддерживает работу с URL, содержащими параметры или хэши. Например, для SPA-приложений:

await browser.get('https://example.com/dashboard#section=users');

В этом случае Protractor корректно обрабатывает загрузку страницы и позволяет сразу работать с элементами, относящимися к указанному разделу.

Таймауты и ожидания загрузки

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

await browser.get('https://example.com', 10000); // 10 секунд

Также рекомендуется использовать явные ожидания элементов, чтобы убедиться в готовности страницы к взаимодействию:

const EC = protractor.ExpectedConditions;
const elementToCheck = element(by.id('main-content'));

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

Совместное использование с browser.refresh()

Метод browser.get() загружает страницу заново. В некоторых случаях после выполнения действий на странице требуется перезагрузка:

await browser.get('https://example.com');
await browser.refresh();  // перезагрузка текущей страницы

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

Асинхронность и порядок выполнения

Protractor использует Control Flow, который управляет последовательностью выполнения асинхронных операций. В новых версиях рекомендуется полностью отключить Control Flow и использовать async/await:

await browser.get('https://example.com');
await element(by.css('.button')).click();

Это гарантирует, что переход на страницу завершен до взаимодействия с элементами.

Советы по оптимизации тестов

  • Использовать browser.get() в сочетании с ожиданиями ExpectedConditions для стабильности тестов.
  • Для многостраничных сценариев лучше создавать отдельные функции навигации:
async function goToDashboard() {
    await browser.get('https://example.com/dashboard');
    await browser.wait(EC.visibilityOf(element(by.id('dashboard-main'))), 5000);
}
  • Отключать ожидание Angular только для внешних или не-Angular страниц.
  • Избегать многократных вызовов browser.get() без необходимости, чтобы ускорить выполнение тестов.

Заключение по методам browser.get()

Метод browser.get() является базовым инструментом управления навигацией в Protractor. Он обеспечивает загрузку страниц, синхронизацию с Angular, управление таймаутами и интеграцию с ожиданиями элементов. Правильное использование метода, в сочетании с async/await, ExpectedConditions и настройками Angular, позволяет создавать стабильные и предсказуемые автотесты.