Виртуальный экран¶
Виртуальный экран означает создание одного или нескольких виртуальных дисплеев на вашем телефоне. Это эквивалентно изолированному фоновому экрану: приложения и сценарии автоматизации, работающие на фоновом экране, не влияют на главный экран устройства. Иными словами, пока сценарий автоматизации выполняет действия на фоновом экране, например автоматически отвечает на сообщения в WeChat, вы можете одновременно пользоваться главным экраном устройства, например листать видео в Douyin. Наш WebUI также поддерживает отображение нескольких экранов: вы можете выбрать, каким экраном управлять или какой экран просматривать, в удалённом рабочем столе.
Создание виртуального экрана¶
Использовать очень просто: вы можете создать виртуальный экран с помощью следующего вызова. Будет создан виртуальный экран с тем же разрешением и DPI, что и текущий экран.
vd = d.create_virtual_display()
Конечно, вы также можете самостоятельно указать разрешение и DPI виртуального экрана.
vd = d.create_virtual_display(width=1080, height=1920, densityDpi=480)
Запуск приложений на виртуальном экране¶
По умолчанию на только что созданном виртуальном экране не запущено ни одно приложение, поэтому он выглядит как чёрный экран. Поэтому сначала нужно запустить приложение на виртуальном экране. Сделать это можно следующим образом.
app = vd.application("com.android.settings")
app.start()
Совет
Как видите, способ использования очень похож на стандартный d.xxx. Вам даже не нужно вносить много изменений, чтобы переключить существующий код с d.xx на vd.xx и незаметно для скрипта перевести его на виртуальный экран.
Автоматизация на виртуальном экране¶
Вы можете напрямую обратиться к соответствующим разделам о других интерфейсах автоматизации, например Базовая автоматизация, Продвинутая работа с интерфейсом и др. Использование полностью аналогично. Более того, вам достаточно внести небольшие изменения в текущий код, чтобы полностью перенести возможности автоматизации виртуального экрана в свой скрипт. Вы можете ориентироваться на приведённый ниже код: нужно только заменить исходный d на экземпляр, созданный через create_virtual_display.
Внимание
Экземпляр vd, созданный виртуальным экраном, содержит только автоматизацию и связанные с ней действия. Методы, которые дают глобальный эффект, например настройка прокси, по-прежнему нужно вызывать через исходный экземпляр d. Если интерфейс относится к категории автоматизации, но даёт глобальный эффект, будет выводиться предупреждение WARNING.
# Замените исходный экземпляр d на экземпляр виртуального экрана
_d = Device("example.local")
d = _d.create_virtual_display()
# Исходный логический код
app = d.application("com.android.settings")
app.start()
...
d(textContains="WLAN").click()
...
# Определённый здесь Watcher будет действовать только на виртуальный экран
d.set_watcher_loop_enabled(True)
d.register_none_op_watcher("RecordElementAppearTimes", [Selector(textContains="WLAN")])
d.set_watcher_enabled("RecordElementAppearTimes", True)
# ...
d.screenshot(100).save("screenshot.jpeg")
# ...
# Освободить виртуальный экран
d.release_virtual_display()
Вы также можете использовать контекстный менеджер with — тогда связанные ресурсы будут автоматически освобождены после завершения блока кода.
with d.create_virtual_display() as vd:
do_someting(vd)