Тестирование веб-приложений на реальных мобильных устройствах является критическим этапом обеспечения качества, особенно при разработке адаптивных и мобильных интерфейсов. Protractor, как инструмент для end-to-end тестирования Angular-приложений на JavaScript, позволяет интегрировать мобильные сценарии с минимальными модификациями существующих тестов.
Для работы с реальными устройствами требуется правильно настроенная среда:
Подключение устройства:
adb devices.Установка Appium: Protractor не взаимодействует напрямую с мобильными устройствами, поэтому для управления браузерами на устройствах используется Appium. Устанавливается через NPM:
npm install -g appium
После установки Appium запускается сервер, с которым Protractor взаимодействует через WebDriver.
Конфигурация Protractor: Основной файл
конфигурации (protractor.conf.js) должен включать
capabilities для мобильного устройства:
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4723/wd/hub',
specs: ['tests/mobile/*.spec.js'],
capabilities: {
platformName: 'Android', // или 'iOS'
deviceName: 'Pixel_5', // имя устройства или UDID
browserName: 'Chrome', // Safari для iOS
automationName: 'UiAutomator2', // XCUITest для iOS
noReset: true
}
};Эмуляция сенсорных событий Мобильные устройства
обрабатывают жесты, такие как свайпы и тапы. Protractor позволяет
использовать browser.actions() для имитации этих
событий:
let elementToSwipe = element(by.css('.carousel'));
browser.actions().dragAndDrop(elementToSwipe, {x: -200, y: 0}).perform();
Методы touchActions() Appium могут быть подключены для
более сложных жестов.
Управление ориентацией экрана Для проверки адаптивности интерфейса важно менять ориентацию экрана:
browser.driver.rotate({x: 0, y: 0, z: 90}); // Поворот в альбомный режим
Для iOS используется метод orientation в
capabilities.
Скриншоты и запись состояния Сохранение скриншотов позволяет фиксировать ошибки на конкретных устройствах:
browser.takeScreenshot().then(function(png) {
let stream = require('fs').createWriteStream('screenshot.png');
stream.write(new Buffer.from(png, 'base64'));
stream.end();
});
Параллельное выполнение Protractor поддерживает
параллельные тесты через параметр multiCapabilities. Это
позволяет запускать тесты одновременно на нескольких устройствах:
multiCapabilities: [
{ platformName: 'Android', deviceName: 'Pixel_5', browserName: 'Chrome' },
{ platformName: 'iOS', deviceName: 'iPhone_13', browserName: 'Safari' }
]
Разделение тестов по разрешению и платформе Лучше создавать отдельные папки или файлы для тестов под Android и iOS, чтобы избегать конфликтов при специфичных жестах или особенностях платформ.
Логирование и отладка Для мобильных тестов важно подключать расширенное логирование:
capabilities: {
...,
loggingPrefs: {
driver: 'INFO',
browser: 'ALL'
}
}
Это помогает выявлять ошибки взаимодействия с браузером на устройстве.
Скорость выполнения Тесты на реальных устройствах работают медленнее, чем на эмуляторах, из-за ограничений пропускной способности USB и медленного рендеринга.
Нестабильность сетевого соединения Мобильные устройства часто используют Wi-Fi или мобильный интернет, что может приводить к флейкам в тестах. Рекомендуется проверять стабильность соединения перед запуском тестов.
Различия в рендеринге Даже при одинаковых версиях браузеров могут быть различия в CSS и JavaScript поведении. Нужно учитывать адаптивные медиазапросы и платформенные баги.
Версия OS и браузера Тестирование на разных версиях Android и iOS критично для точной проверки кроссплатформенной совместимости.
ExpectedConditions для ожидания элементов,
чтобы уменьшить риск таймаутов на медленных устройствах.Тестирование на реальных мобильных девайсах с Protractor обеспечивает максимальное приближение к пользовательскому опыту, выявляет ошибки, которые невозможно воспроизвести на эмуляторах, и позволяет создавать качественные, адаптивные веб-приложения.