Тестирование на реальных мобильных девайсах

Тестирование веб-приложений на реальных мобильных устройствах является критическим этапом обеспечения качества, особенно при разработке адаптивных и мобильных интерфейсов. Protractor, как инструмент для end-to-end тестирования Angular-приложений на JavaScript, позволяет интегрировать мобильные сценарии с минимальными модификациями существующих тестов.


Настройка среды для мобильного тестирования

Для работы с реальными устройствами требуется правильно настроенная среда:

  1. Подключение устройства:

    • Для Android необходимо включить USB Debugging и убедиться, что устройство распознаётся системой через adb devices.
    • Для iOS используется Xcode и WebDriverAgent; устройство должно быть доверено компьютеру, на котором выполняются тесты.
  2. Установка Appium: Protractor не взаимодействует напрямую с мобильными устройствами, поэтому для управления браузерами на устройствах используется Appium. Устанавливается через NPM:

    npm install -g appium

    После установки Appium запускается сервер, с которым Protractor взаимодействует через WebDriver.

  3. Конфигурация 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'
    }
}

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


Проблемы и особенности

  1. Скорость выполнения Тесты на реальных устройствах работают медленнее, чем на эмуляторах, из-за ограничений пропускной способности USB и медленного рендеринга.

  2. Нестабильность сетевого соединения Мобильные устройства часто используют Wi-Fi или мобильный интернет, что может приводить к флейкам в тестах. Рекомендуется проверять стабильность соединения перед запуском тестов.

  3. Различия в рендеринге Даже при одинаковых версиях браузеров могут быть различия в CSS и JavaScript поведении. Нужно учитывать адаптивные медиазапросы и платформенные баги.

  4. Версия OS и браузера Тестирование на разных версиях Android и iOS критично для точной проверки кроссплатформенной совместимости.


Лучшие практики

  • Использовать ExpectedConditions для ожидания элементов, чтобы уменьшить риск таймаутов на медленных устройствах.
  • Минимизировать количество жестов и сложных действий в одном тесте, разделяя их на отдельные сценарии.
  • Сохранять лог действий и скриншоты для анализа проблем на конкретном устройстве.
  • Настраивать отдельные конфигурации для разных платформ с разными capabilities.

Тестирование на реальных мобильных девайсах с Protractor обеспечивает максимальное приближение к пользовательскому опыту, выявляет ошибки, которые невозможно воспроизвести на эмуляторах, и позволяет создавать качественные, адаптивные веб-приложения.