我正在尝试使用adb shell
命令将触摸事件发送到设备,以便我可以为UI测试执行一些基本的自动化操作。我已经在之前的一些主题中讨论了这个问题。
我确认了如何获取活动并使用sendevent
,每次触摸发送6个事件(xcoord,ycoord,2
用于发布,2
用于发布)并且很容易将此信息与sendevent
一起使用,但触摸屏设备的getevent
命令似乎会产生太多事件。
有人设法将adb
的触摸事件发送到设备吗?能否请你分享解决方案。
我正致力于在手机上录制触控事件。之后,我希望将相同的事件作为UI测试的一部分发送回设备。
请帮忙
答案 0 :(得分:45)
Android附带了一个input
命令行工具,可以模拟各种输入事件
要模拟tap
,请使用:
input tap x y
使用input
远程运行adb shell
命令 :
adb shell input tap x y
其他选项包括:
shell@m0:/ $ input
input
usage: input ...
input text <string>
input keyevent <key code number or name>
input [touchscreen|touchpad|touchnavigation] tap <x> <y>
input [touchscreen|touchpad|touchnavigation] swipe <x1> <y1> <x2> <y2> [duration(ms)]
input trackball press
input trackball roll <dx> <dy>
答案 1 :(得分:29)
要发送触摸事件,您需要执行以下操作:
1设置坐标:
adb shell sendevent /dev/input/event2 3 0 x
adb shell sendevent /dev/input/event2 3 1 y
2发送触摸事件(必须有0 0 0对):
adb shell sendevent /dev/input/event2 1 330 1
adb shell sendevent /dev/input/event2 0 0 0
3发送释放手指事件(必须有0 0 0对):
adb shell sendevent /dev/input/event2 1 330 0
adb shell sendevent /dev/input/event2 0 0 0
请注意:
1您可以录制事件:
adb shell getevent
2如果您使用getevent,则所有事件值均为十六进制。
祝你好运, Yahor
答案 2 :(得分:19)
我设法录制了一个会话,并仅用bash和adb重播。
这就是我所做的,我希望它有助于某人。
设置电脑以将数据记录在文件(/tmp/android-touch-events.log
)
$ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
ctrl-c
此命令将在awk
$ awk '{printf "%s %d %d %d\n", substr($1, 1, length($1) -1), strtonum("0x"$2), strtonum("0x"$3), strtonum("0x"$4)}' /tmp/android-touch-events.log | xargs -l adb shell sendevent
答案 3 :(得分:5)
您可能希望使用monkeyrunner,如下所示:
$ monkeyrunner
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
>>> device = MonkeyRunner.waitForConnection()
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)
你也可以进行拖动,启动活动等。 看看MonkeyDevice的api。