Первый вариант
uiautomator от xiaocong. Эта библиотека специально поддерживает два точечных жеста — см. примеры, взятые из репозитория GitHub:
d(text="Settings").gesture((sx1, sy1), (sx2, sy2)) \
.to((ex1, ey1), (ex2, ey2))
Переход от одной точки к другой с помощью двух точек.
Самое главное, есть специальные функции pinch.in()
и pinch.out()
. Видеть:
d(text="Settings").pinch.In(percent=100, steps=10)
d(text="Settings").pinch.Out()
Я могу настоятельно рекомендовать эту оболочку Python из-за ее подробной документации, а также функциональности.
Прежде всего, установите uiautomator library
:
pip install uiautomator
Небольшой фрагмент кода, который я использовал для тестирования (это работает только для Android 4.3 и далее; pinch нельзя установить до Android 4.3):
from uiautomator import device as d
#Replace the variables, marked by the percentage signs
d = Device('%serial_number%', adb_server_host='%server%', adb_server_port=%port%)
#[...]
#Zooming in - arbitrary example values for a "small zoom" in; from the edges to the center
d(text="Settings").pinch.In(percent=30, steps=10)
На этом этапе я хочу упомянуть примечание из репозитория GitHub относительно %server%
:
Хотя adb поддерживает параметр -a
начиная с SDK 4.3, но теперь в нем есть ошибка. Единственный способ запустить прослушивание сервера adb на всех интерфейсах вместо локального хоста — это adb -a -P 5037 fork-server server &
Для дальнейшего чтения по этой теме я настоятельно рекомендую задать вопрос из Android Stackexchange (https://android.stackexchange.com/questions/52911/adb-start-server-and-listen-on-all-интерфейсы).
Второй вариант
Проводя исследование, я нашел еще один вопрос StackOverflow, который тесно связан с вашим сообщением: Запустить команду ввода/вывода на телефон Android с помощью adb. Несмотря на то, что эта ветка не предназначена специально для Python, я настоятельно рекомендую взглянуть на нее. Пользователь @Saurabh Meshram подробно описал, как использовать getevent
и sendevent
для достижения защемления. движение через adb. (Дополнительные источники: см. также этот сообщение в блоге)
Хотя, если я правильно понял ваш первоначальный вопрос, вы уже пробовали этот подход:
Я пробовал записывать события
Тем не менее, для полноты картины следует упомянуть второй вариант. Итак, перейдем к третьему варианту:
Третий вариант
Здесь приходит хитрое решение. python_api для репозиторий android_touch не поддерживает действие сжатия и масштабирования как таковое. Хотя с TouchActionBuilder
вам разрешено создавать сложные действия, такие как масштабирование и масштабирование.
В зависимости от движения, которое вы хотите получить, вы можете комбинировать вариант down()
или multidown()
с параметрами move()
и multimove()
. Для этого я настоятельно рекомендую взглянуть на код а также пример сложного действия.
Дополнительная литература и источники
person
J. M. Arnold
schedule
23.12.2020