我正在尝试使用 AndroidDebugBridge 将触摸事件发送到设备,以便我可以为 UI 测试做一些基本的自动化。我关注了LINK中的讨论。我可以使用 sendevent 在模拟器上模拟触摸,但无法在设备上执行相同操作。
就像上面的链接一样,模拟器似乎为每次触摸发送 6 个事件(xcoord、ycoord、2 个用于按下,2 个用于释放)并且很容易使用此信息来发送事件,但设备触摸屏的 getevent 似乎产生太多的事件。
有人设法将触摸从 ADB 发送到设备吗?能否请您分享解决方案。
我正在尝试使用 AndroidDebugBridge 将触摸事件发送到设备,以便我可以为 UI 测试做一些基本的自动化。我关注了LINK中的讨论。我可以使用 sendevent 在模拟器上模拟触摸,但无法在设备上执行相同操作。
就像上面的链接一样,模拟器似乎为每次触摸发送 6 个事件(xcoord、ycoord、2 个用于按下,2 个用于释放)并且很容易使用此信息来发送事件,但设备触摸屏的 getevent 似乎产生太多的事件。
有人设法将触摸从 ADB 发送到设备吗?能否请您分享解决方案。
Android 带有一个input命令行工具,可以模拟各种输入事件。为了模拟敲击,它是:
input tap x y
您可以使用 adb shell (> 2.3.5) 远程运行命令:
adb shell input tap x y
要执行特定操作(例如打开 Web 浏览器),您需要首先确定要点击的位置。为此,您可以先运行:
adb shell getevent -l
在您想要的位置按下设备后,您将看到以下输出:
<...>
/dev/input/event3: EV_KEY BTN_TOUCH DOWN
/dev/input/event3: EV_ABS ABS_MT_POSITION_X 000002f5
/dev/input/event3: EV_ABS ABS_MT_POSITION_Y 0000069e
adb 告诉您在位置 2f5、69e(十六进制为 757 和 1694)处按下了一个键(按下按钮)。
如果现在要生成相同的事件,可以在相同位置使用 input tap 命令:
adb shell input tap 757 1694
更多信息可以在以下位置找到:
https://source.android.com/devices/input/touch-devices.html http://source.android.com/devices/input/getevent.html
2.3.5 没有input tap,只是input keyevent,input text
您可以使用 monkeyrunner:(这是https://stackoverflow.com/a/18959385/1587329上的答案副本):
你可能想像这样使用monkeyrunner:
$ monkeyrunner
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
>>> device = MonkeyRunner.waitForConnection()
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)
您还可以进行拖动、启动活动等。查看MonkeyDevice的 api 。
你不需要使用
adb shell 获取事件 -l
命令,您只需要在设备的开发者选项中启用[显示触摸数据]即可获取X和Y。
更多信息可以在我的文章中找到:https ://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/
基于 Tomas 的回答,这是将位置抽头位置查找为我发现的整数的最佳方法:
adb shell getevent -l | grep ABS_MT_POSITION --line-buffered | awk '{a = substr($0,54,8); sub(/^0+/, "", a); b = sprintf("0x%s",a); printf("%d\n",strtonum(b))}'
用于adb shell getevent -l获取事件列表,使用 grep for ABS_MT_POSITION(获取带有十六进制触摸事件的行),最后使用 awk 获取相关的十六进制值,将它们去除零并将十六进制转换为整数。只有当您按下设备时,才会在终端中连续打印 x 和 y 坐标。
然后,您可以使用此 adb shell 命令发送命令:
adb shell input tap x y
考虑使用 Android 的uiautomator和 adb shell uiautomator [...] 或直接使用 SDK 附带的 .jar。