Взаимодействие с ОС Android. Класс Device
.
Device — это поставщик менеджеров для всей работы вне приложения.
Структура
Все примеры находятся в device_tests. Класс Device содержит следующие свойства:
apps
позволяет устанавливать или удалять приложения. Использует командыadb install
иadb uninstall
. См. пример DeviceAppSampleTest.activities
— это интерфейс для работы с отображаемыми в данный момент Activity. AdbServer не требуется. См. пример DeviceActivitiesSampleTest.files
обеспечивает возможность загрузки или удаления файлов с устройства. Использует командыadb push
иadb rm
и не требует разрешенияandroid.permission.WRITE_EXTERNAL_STORAGE
. См. пример DeviceFilesSampleTest.internet
позволяет переключать настройки Wi-Fi и передачи данных по сети. Будьте осторожны при использовании этого интерфейса, изменения настроек Wi-Fi могут не работать с некоторыми версиями Android. См. пример DeviceNetworkSampleTest.keyboard
— это интерфейс для отправки событий клавиатуры через adb. Используйте его только тогда, когда Espresso или UiAutomator не подходят (например, экран заблокирован). См. пример DeviceKeyboardSampleTest.location
имитирует поддельное местоположение и позволяет переключать настройки GPS. См. пример DeviceLocationSampleTest.phone
позволяет эмулировать входящие звонки и принимать SMS-сообщения. Работает только на эмуляторах, так как использует командыadb emu
. См. пример DevicePhoneSampleTest.screenshots
— интерфейс для скриншотов пользовательского интерфейса. Требуется разрешениеandroid.permission.WRITE_EXTERNAL_STORAGE
. См. пример DeviceScreenshotSampleTest.accessibility
- позволяет включать или отключать специальные возможности. Доступно с API 24. См. пример DeviceAccessibilitySampleTest.permissions
- предоставляет возможность выдавать или отклонять запросы разрешений через диалоговое окно разрешений Android по умолчанию. См. пример DevicePermissionsSampleTest.hackPermissions
предоставляет возможность выдавать любые разрешения без системного диалога Android по умолчанию. См. пример DeviceHackPermissionsSampleTest.exploit
позволяет менять ориентацию устройства или нажимать системные кнопки. См. пример DeviceExploitSampleTest.language
позволяет переключать язык. См. пример DeviceLanguageSampleTest.logcat
обеспечивает доступ к adb logcat. См. пример DeviceLogcatSampleTest.
Назначениеlogcat
:
Если вы не слышали о GDPR и громких судебных процессах то вам повезло. Но, если ваше приложение работает в Европе, то очень важно включить/отключить всю аналитику/статистику согласно принятым соглашениям. Один из самых надежных способов проверить отправку аналитики/статистики — это проверить logcat, в котором все аналитики/статистика пишут свои журналы (конечно, в режиме отладки). Вот почему мы создали специальный классLogcat
, предоставляющий множество способов проверки logcat.uiDevice
возвращает экземплярandroid.support.test.uiautomator.UiDevice
. Мы не рекомендуем использовать его напрямую, потому что есть Kautomator, который предлагает более читаемый, предсказуемый и стабильный API для работы вне вашего приложения.
Также Device предоставляет контексты приложений и тестов — targetContext
и context
.
Использование
Экземпляр Device
доступен в области BaseTestContext
и BaseTestCase
через свойство device
.
@Test
fun test() =
run {
step("Open Simple Screen") {
activityTestRule.launchActivity(null)
======> device.screenshots.take("Additional_screenshot") <======
mainScreen {
simpleButton {
isVisible()
click()
}
}
}
// ....
}
Ограничения
Большинство функций, которые предоставляет Device, используют команды adb и требуют запуска AdbServer.
Некоторые из них, такие как эмуляция звонков или прием СМС, могли выполняться только на эмуляторе. Все такие методы отмечены аннотацией @RequiresAdbServer
.
Все методы, использующие команды ADB, требуют разрешения android.permission.INTERNET
.
Для получения дополнительной информации смотрите документацию AdbServer.