Protractor — это фреймворк для автоматизированного тестирования веб-приложений на Angular и не только. Одной из ключевых возможностей является взаимодействие с браузером на низком уровне, включая получение информации о его состоянии, свойствах и конфигурации. Эта функциональность позволяет писать более гибкие и устойчивые тесты.
browserВ Protractor объект browser представляет активный
браузерный сеанс. Через него осуществляется управление навигацией,
выполнение скриптов и получение информации о текущем окружении.
Основные методы для получения информации:
browser.getCurrentUrl(): возвращает текущий URL в
браузере. Пример использования:
browser.getCurrentUrl().then(function(url) {
console.log('Текущий URL:', url);
});browser.getTitle(): получает заголовок текущей
страницы. Полезно для проверки корректной загрузки страниц.
const title = await browser.getTitle();
console.log('Заголовок страницы:', title);browser.getPageSource(): возвращает HTML-код текущей
страницы. Может использоваться для детального анализа DOM или
отладки.
Для тестов, которые должны учитывать особенности браузеров, важно
уметь получать информацию о браузере и операционной системе. В
Protractor доступ к этим данным реализован через объект
browser.getCapabilities().
Пример:
const capabilities = await browser.getCapabilities();
console.log('Имя браузера:', capabilities.get('browserName'));
console.log('Версия браузера:', capabilities.get('version') || capabilities.get('browserVersion'));
console.log('Платформа:', capabilities.get('platform') || capabilities.get('platformName'));
Ключевые возможности:
browserName — имя браузера (например,
chrome, firefox).version или browserVersion — версия
браузера.platform или platformName — операционная
система.Иногда тесты должны выполняться только при наличии определённых
возможностей браузера (например, поддержка JavaScript или определённых
API). Для этого можно использовать комбинацию
browser.executeScript и проверку существования свойств
объекта window:
const supportsFetch = await browser.executeScript('return typeof window.fetch === "function";');
console.log('Поддержка fetch API:', supportsFetch);
Также возможно определять поддержку CSS-свойств или других веб-API через аналогичные проверки.
Protractor позволяет получать размеры окна и управлять ими. Эти данные полезны для тестирования адаптивного интерфейса.
const size = await browser.manage().window().getSize();
console.log('Ширина окна:', size.width);
console.log('Высота окна:', size.height);
const position = await browser.manage().window().getPosition();
console.log('Позиция окна X:', position.x);
console.log('Позиция окна Y:', position.y);
await browser.manage().window().setSize(1280, 720);
await browser.manage().window().setPosition(100, 50);
Эти методы позволяют создавать тесты для разных разрешений экрана и корректно проверять адаптивный дизайн.
Для комплексного анализа поведения приложения полезно собирать логи
браузера. Protractor поддерживает получение различных типов логов через
browser.manage().logs():
const logs = await browser.manage().logs().get('browser');
logs.forEach(entry => {
console.log(`[${entry.level.name}] ${entry.message}`);
});
Типы логов могут включать:
browser — ошибки и предупреждения JS.driver — внутренние сообщения WebDriver.performance — данные о производительности.Protractor позволяет работать с несколькими окнами браузера. Получение информации о текущем окне и переключение между ними:
const handles = await browser.getAllWindowHandles();
console.log('Все окна:', handles);
await browser.switchTo().window(handles[1]);
console.log('Переключились на второе окно');
Методы:
getAllWindowHandles() — возвращает массив
идентификаторов всех открытых окон.switchTo().window(handle) — переключение на конкретное
окно.getWindowHandle() — возвращает идентификатор текущего
окна.Эти возможности полезны для тестирования всплывающих окон, попапов и мультиокружных сценариев.
Все методы получения информации о браузере в Protractor возвращают
промисы. Использование async/await обеспечивает читаемость
кода и упрощает обработку данных:
async function printBrowserInfo() {
const url = await browser.getCurrentUrl();
const title = await browser.getTitle();
const capabilities = await browser.getCapabilities();
console.log(`URL: ${url}, Title: ${title}, Browser: ${capabilities.get('browserName')}`);
}
await printBrowserInfo();
Это особенно важно при написании сложных тестов, где необходимо последовательно собирать информацию о состоянии браузера и страницы.
browser.getCapabilities() позволяет
адаптировать тесты под конкретный браузер и платформу.getCurrentUrl(), getTitle(),
getPageSource() дают полный контроль над проверкой
состояния страницы.executeScript
помогают проверять функциональность и отлаживать ошибки.Комплексное использование этих инструментов позволяет создавать устойчивые, масштабируемые и адаптивные тестовые сценарии.