Управление физическими устройствами

WebdriverIO — это популярный инструмент для автоматизации браузеров и тестирования веб-приложений. Однако в реальной практике задачи тестирования часто выходят за пределы работы исключительно с браузерами на десктопных машинах. В условиях мобильных приложений, а также при тестировании на реальных физических устройствах, WebdriverIO может также продемонстрировать свою силу и гибкость. Управление физическими устройствами при помощи WebdriverIO требует определённых настроек и использования дополнительных инструментов.

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

Для того чтобы WebdriverIO мог работать с физическими устройствами, необходимы специфические настройки и интеграция с мобильными платформами. Важнейшие из них:

  1. Appium — это один из самых популярных инструментов для автоматизации мобильных приложений, который поддерживает как Android, так и iOS устройства. WebdriverIO может работать с Appium, предоставляя расширенные возможности для тестирования на реальных устройствах.

  2. Настройка WebdriverIO с Appium. Для начала нужно установить и настроить Appium, а затем подключить его к WebdriverIO. На практике это выглядит следующим образом:

    • Установка Appium и WebdriverIO через npm:

      npm install --save-dev appium webdriverio
    • Затем в конфигурационном файле WebdriverIO нужно указать параметры для подключения к мобильному устройству, такие как платформа, версия устройства, и параметры устройства, с которым нужно работать.

Подключение к реальному Android-устройству

Для работы с реальными Android-устройствами через WebdriverIO необходимо выполнить несколько шагов:

  1. Установка Android SDK. Убедитесь, что на компьютере установлен Android SDK и настроены переменные окружения ANDROID_HOME, а также добавлены пути до инструментов Android в системную переменную PATH.

  2. Подключение устройства. Подключите Android-устройство через USB или используйте удалённое подключение через Wi-Fi, предварительно активировав в устройстве режим разработчика и отладку по USB. Затем можно проверить, видит ли Appium устройство командой:

    adb devices
  3. Конфигурация WebdriverIO. В конфигурационном файле WebdriverIO (wdio.conf.js) добавляются настройки для подключения:

    capabilities: [{
        platformName: 'Android',
        platformVersion: '10.0',
        deviceName: 'Android Emulator',
        app: '/path/to/your/app.apk',
        automationName: 'UiAutomator2'
    }],
  4. Запуск теста. После настройки можно запускать тесты, и WebdriverIO будет взаимодействовать с реальным Android-устройством через Appium.

Подключение к реальному iOS-устройству

Работа с реальными iOS-устройствами несколько сложнее, поскольку требует наличия MacOS и Xcode, но основные шаги аналогичны Android-устройствам.

  1. Установка Xcode. На MacOS необходимо установить Xcode для работы с инструментами командной строки, такими как xcode-select и xcrun.

  2. Конфигурация устройства. Для iOS-устройства необходимо настроить профили разработчика в Xcode и подключить устройство с включённой отладкой.

  3. Подключение к WebdriverIO. В конфигурации WebdriverIO нужно указать параметры для iOS:

    capabilities: [{
        platformName: 'iOS',
        platformVersion: '14.4',
        deviceName: 'iPhone 11',
        app: '/path/to/your/app.app',
        automationName: 'XCUITest'
    }],
  4. Запуск теста. После завершения всех настроек и подключения устройства тестирование может быть начато.

Важные аспекты работы с реальными устройствами

  1. Производительность. Работа с реальными устройствами может существенно отличаться от эмуляторов и симуляторов. Скорость тестирования может снижаться, поскольку фактическое устройство ограничено по мощности в отличие от эмулятора.

  2. Устойчивость соединения. Плохое соединение или нестабильная работа USB-порта могут вызывать проблемы при тестировании на реальном устройстве. Часто могут возникать ошибки подключения, потеря связи с устройством, что требует перезагрузки устройств или обновления драйверов.

  3. Сложности с настройкой и калибровкой устройств. Разные устройства могут иметь различия в разрешении экрана, версии операционной системы, поддержке аппаратных возможностей. Эти различия могут требовать дополнительных настроек, таких как использование специальных настроек для масштабирования интерфейсов или оптимизации тестов для разных разрешений экрана.

  4. Ограничения устройств. Некоторые устройства могут ограничивать выполнение тестов, например, из-за малой производительности, несовместимости с определёнными версиями операционной системы или наличия сторонних приложений, влияющих на работу тестов.

Примеры автоматизации на реальных устройствах

Пример простого теста для Android устройства с использованием WebdriverIO и Appium может выглядеть так:

describe('Android Test', () => {
    it('should launch the app and perform an action', async () => {
        const inputField = await $('~inputField');
        await inputField.setValue('Hello, WebDriver!');
        const button = await $('~submitButton');
        await button.click();
        const resultText = await $('~resultText');
        expect(await resultText.getText()).toBe('Success');
    });
});

Этот тест запускает приложение, вводит текст в поле ввода, нажимает кнопку и проверяет, что текст на экране изменился.

Для iOS устройства аналогичный тест будет выглядеть почти идентично, только с изменением локаторов и настроек устройства.

Проблемы и способы их решения

  1. Проблемы с подключением устройств. Иногда устройства не отображаются в списке подключённых, или приложение не запускается. В таких случаях стоит проверять настройки USB-драйверов, переподключать устройства или использовать альтернативные способы подключения, такие как Wi-Fi или ADB over TCP.

  2. Ошибки в взаимодействии с элементами UI. При взаимодействии с элементами на мобильных устройствах могут возникать ошибки, связанные с тем, что элементы недоступны на момент выполнения теста. Это можно решить, добавив явные ожидания (explicit waits) или методы проверки видимости элементов перед взаимодействием.

  3. Нестабильность тестов. Иногда тесты могут быть нестабильными, что связано с производительностью устройства или с сетевыми задержками. В таких случаях стоит использовать дополнительные настройки для управления тайм-аутами и ожиданиями.

Заключение

Управление физическими устройствами с использованием WebdriverIO и Appium открывает широкий спектр возможностей для автоматизированного тестирования мобильных приложений. Эта интеграция позволяет тестировать приложения на реальных устройствах, что помогает обнаружить проблемы, которые могут не проявляться в эмуляторах или симуляторах.