如何使用ADB使用sendevent命令将触摸事件发送到设备?
-
26-09-2019 - |
题
我正在尝试使用 AndroidDebugBridge 将触摸事件发送到设备,以便我可以为 UI 测试执行一些基本的自动化操作。我已经关注了中的讨论 关联. 。我可以使用 sendevent 模拟模拟器上的触摸,但无法在设备上执行相同的操作。
就像上面的链接一样,模拟器似乎为每次触摸发送 6 个事件(xcoord,ycoord,2 个用于按下,2 个用于释放),并且很容易使用此信息来发送事件,但是设备触摸屏的 getevent 似乎产生太多事件。
有人设法将触摸从 ADB 发送到设备吗?您能分享一下解决方案吗?
解决方案
的Android带有一个input
命令行工具,它可以模拟杂输入事件。为了模拟攻丝,它的:
input tap x y
可以使用ADB壳(> 2.3.5)远程运行命令:
adb shell input tap x y
其他提示
为了做一个特定的动作(例如,打开网络浏览器),则需要先断定从哪里抽头。要做到这一点,你可以先运行:
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是告诉你的关键是在十六进制即十进制数757和1694按下(按钮向下)在位置2F5,69E。
如果现在要产生相同的事件,则可以在相同的位置使用输入抽头命令:
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)
您也可以做一拖,开始活动比较等。 看看该API用于 MonkeyDevice 。
你不需要使用
adb shell getevent -l
命令,您只需在设备上的开发者选项中启用[显示触摸数据]即可获取X和Y。
更多信息可以在我的文章中找到: https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/
考虑使用Android的 uiautomator 时,与亚行壳uiautomator [.. ]或者直接使用附带的SDK将.jar。