<style>.lazy{display:none}</style>Автоматизация системных приложений iOS и Android с помощью Appium

Автоматизация системных приложений iOS и Android с помощью Appium

Перевод статьи «Automating System Apps with Appium — iOS and Android».

В этой статье мы рассмотрим, как автоматизировать определенный тип приложений – приложения, встроенные в саму ОС телефона. Замечательная особенность технологии Appium заключается в том, что в зависимости от используемого драйвера мы можем автоматизировать не только установленные нами приложения. Мы можем автоматизировать любые приложения, которые окажутся на устройстве, включая встроенные или системные.

БЕСПЛАТНО СКАЧАТЬ КНИГИ в телеграм канале "Библиотека тестировщика"
Системные приложения на iOS
Системные приложения на iOS

Системные приложения в iOS – это такие, как КалендарьНастройки или Карты. Наше приложение может взаимодействовать с некоторыми из этих встроенных приложений, поэтому часто бывает полезно иметь возможность автоматизировать и их. Хитрость автоматизации системных приложений на iOS заключается в том, что нужно обязательно знать идентификатор их пакета(bundle ID) – уникальный идентификатор, который присваивается каждому приложению его разработчиком. В случае с приложениями Apple их идентификаторы начинаются с com.apple. Списки, в которых указаны идентификаторы пакета каждого приложения для каждой версии iOS, доступны онлайн.

Bundle ID для iOS
Bundle ID для iOS

Чтобы запустить системное приложение, необходимо настроить наши возможности. Для нашего тестового приложения мы используем его возможности, чтобы указать URL-адрес или путь к локальному файлу, по которому файл приложения можно загрузить или получить. Но вместо этого мы можем использовать идентификатор пакета. Так что мы можем вставить bundle ID любого встроенного или другого приложения, установленного на симуляторе, и оно будет работать.

Шапка для запуска системного приложения iOS
Шапка для запуска системного приложения iOS
# capability for using your own app
CAPS = {
  "platformName": "iOS",
  ...,
  "appium:app": "/path/to/test.ipa"
}
# or
CAPS.setdefault("appium:app", "/path/to/test.ipa")
# capability for using a system app
CAPS = {
  "platformName": "iOS",
  ...,
  "appium:app": "com.apple.Preferences"
}
# or
CAPS.setdefault("appium:app", "com.apple.Preferences")

В Android также есть системные приложения, такие как КонтактыНастройки и т. д. Иногда приложения Google, например Фотографии, уже установлены на многих телефонах по умолчанию.

Системные приложения на Android
Системные приложения на Android

Приложения для Android, как и приложения для iOS, имеют свой уникальный идентификатор. Однако в мире Android он называется package ID. Эта информация нужна нам для запуска системных приложений на Android.

Однако для Android нам нужна еще одна информация, и это так называемая “активность”. Приложения для Android могут быть разделены на несколько активностей, и системе необходимо знать, какую из них конкретно мы хотим запустить.

В таблице ниже мы видим идентификатор пакета и соответствующее имя действия, используемые для запуска различных системных приложений Android. Например, для запуска приложения Настройки (Settings) нам понадобится как идентификатор пакета com.android.settings, так и название активности .Settings.

Идентификатор пакета и активность для Android
Идентификатор пакета и активность для Android

В Android, как и в случае с iOS, нам нужно настроить наши возможности, чтобы запустить системное приложение. Обычно мы используем возможности приложения, чтобы указать APK-файл для загрузки. Но теперь вместо этого мы используем комбинацию двух других возможностей,  appPackage и appActivity. В качестве значения для возможности appPackage мы указываем идентификатор пакета, а в качестве значения для возможности appActivity – активность запуска.

Шапка для запуска системного приложения Android
Шапка для запуска системного приложения Android
# capability for using your own app
CAPS = {
  "platformName": "Android",
  ...,
  "appium:app": "/path/to/test.apk"
}
# or
CAPS.setdefault("appium:app", "/path/to/test.app")
# capabilities for using a system app
CAPS = {
"platformName": "Android",
  ...,
  "appium:appPackage": "com.android.settings",
  "appium:appActivity": ".Settings"
}
# or
CAPS.setdefault("appium:appPackage": "com.android.settings")
CAPS.setdefault("appium:appActivity": ".Settings")

Пришло время написать это на Python и посмотреть, как это работает. Давайте убедимся, что у нас запущены симулятор iOS и эмулятор Android. Затем перейдем к написанию скрипта для запуска приложения Settings на каждом из них.

симулятор iOS и эмулятор Android
Запустите мобильные устройства и сервер Appium

В редакторе PyCharm я работаю с файлами system_apps_android.py и system_apps_ios.py. У нас есть все стандартные шаблоны, за исключением того, что у нас нет списка URL-адресов приложений для загрузки с помощью Appium. Это из-за того, что мы собираемся автоматизировать встроенные системные приложения.

Типичные возможности, которые мы используем в наших установках для Android и iOS, не будут работать в их нынешнем виде, так что давайте исправим этот момент. Сначала заполним наши возможности для Android. Нам нужны возможности appPackage и appActivity, поэтому мы добавим их.

Мы будем использовать возможность appPackage для запуска приложения Settings, которое имеет идентификатор пакета com.android.settings. Мы также добавим возможность appActivity, значение которой должно быть .Settings. Мы используем значения, которые мы уже видели выше в статье.

Теперь нам нужно выполнить ту же задачу для iOS, добавив соответствующую возможность приложения. Поэтому мы добавим возможность app со значением com.apple.Preferences.

Поскольку на данном этапе нам важно только запустить приложения и больше ничего с ними не делать, я просто добавлю метод sleep, чтобы убедиться, что приложение запустилось. Поэтому я напишу time.sleep и подожду пять секунд.

Но мы также хотим что-что сделать с приложениями позже, поэтому просто распечатаем исходный текст каждого приложения. Таким образом после завершения теста мы сможем проверить его вручную и убедиться, что Appium увидел внутри системного приложения все, что нужно. Итак, выведем в консоль нативный источник страницы приложения, который мы получим, вызвав driver.page_source.

Сначала запустим Android-версию теста. У нас есть эмулятор Android и сервер Appium. Я выполню команду python3 system_apps_android.py в терминале. Мы видим, что Appium действительно запустил приложение Settings на этом эмуляторе.

запуск приложения Settings в Android-версии теста
Посмотреть запись HD-видео можно здесь: https://youtu.be/tnDiCR8lUdk.

Теперь давайте проверим iOS. Выполним команду python3 system_apps_ios.py для запуска теста. После этого мы увидим, как Appium начинает сессию. Приложение Settings загрузилось, как и ожидалось.

И если мы вернемся в PyCharm IDE, то увидим, что тест не только выполнился без проблем, но и действительно распечатал XML-вывод, который показывает нативные элементы, составляющие приложение Settings на iOS-симуляторе.

запуск приложения Settings в iOS-версии теста
Посмотреть запись HD-видео можно здесь: https://youtu.be/0UqPioH1l10.

Таким образом, с Appium мы можем автоматизировать все аспекты работы устройства, даже приложения, которые мы не писали сами.

🔗 Python код, XML вывод, GIFыhttps://github.com/lana-20/appium-system-apps.

🔗 Видео выполнения тестаhttps://youtu.be/tnDiCR8lUdk (Android) и https://youtu.be/0UqPioH1l10 (iOS).

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *