Внимание, хардкор! Для понимания происходящего ниже, нужно хорошо разбираться в том, как устроены и работают: selenium, selenium-hub, selenium-grid, docker, appium, adb. Я тебя предупредил.
Зачем нужна фильтрация девайсов
В вэб-тестах выбор браузера ограничевается тремя основными параметрами - имя браузера, версия и платформа. Всё остальное можно настроить налету - отключить куки/js, изменить размер окна и т.п. В случае с нативными приложениями всё несколько сложнее. Кроме имени браузера (мы для всех устройств используем имя “Android”), и платформы (Android/iOS), есть еще ряд параметров, которые важны для отдельных тестов. У нас это:
- тип устройства: телефон или планшет
- размер экрана
- эмулятор или реальный
- root-права: наличие/отсутствие
- кнопки меню: hardware (как у самсунгов) или software (как у LG)
- аппаратная платформа: ARM/X86
Например, для тестирования регулярных событий в приложении, мы переводи время на устройстве. Это можно сделать только при наличии root-прав и нужно уметь выбирать эти устройства.
Как получается “профиль” девайса
Изначально мы прописывали эти параметры для каждого устройства вручную. Так мы сначала решили проблему фильтрации, а уже потом стали думать над системным решением. Сейчас этот конфиг генерируется скриптом при подключении девайса внутри контейнера:
Мне кажется в самом скрипте всё довольно просто и в комментариях он не нуждается. Гораздо интересней вопрос, как об этих параметрах узнаёт selenium-hub, ведь он знает только про имя, версию и платформу?
Custom capabilities
Решение подробно описано в этой статье. Если в двух словах:
- реализуешь java-класс, в котором описываешь capabilities и способы их сравнения
- пакуешь его в jar и подсовываешь в classpath при старте хаба
- прописываешь свой класс в “capabilityMatcher” в конфиге хаба
- профит!
На сегодня всё, а в следующих постах расскажу, как собираются образы с эмуляторами и как девайсы автоматически появляются в selenium-grid при подключении к USB. А если у тебя есть вопросы по автоматизации на Android - не стесняйся спрашивать в коментах :-)
comments powered by Disqus