如何使用ADB使用sendevent命令向设备发送触摸事件?

时间:2010-08-09 06:09:53

标签: android automation adb touchscreen

我正在尝试使用AndroidDebugBridge将触摸事件发送到设备,以便我可以为UI测试做一些基本的自动化。我跟随LINK中的讨论。我可以使用sendevent模拟模拟器上的触摸,但无法在设备上执行相同的操作。

与上面的链接一样,模拟器似乎每次触摸发送6个事件(xcoord,ycoord,2个用于按下,2个用于发布)并且很容易将此信息用于sendevents,但是触摸屏的getevent用于设备似乎产生了太多的事件。

有人设法将ADB的触摸发送到设备吗?能否请你分享解决方案。

6 个答案:

答案 0 :(得分:115)

Android附带了一个input命令行工具,可以模拟各种输入事件。为了模拟点击,它是:

input tap x y

您可以使用adb shell(> 2.3.5)远程运行命令:

adb shell input tap x y

答案 1 :(得分:48)

为了执行特定操作(例如打开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,61e,十六进制为757,十进制为1694.

如果您现在想要生成相同的事件,可以在同一位置使用输入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 :(得分:10)

2.3.5没有input tap,只有input keyeventinput 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。

答案 3 :(得分:5)

以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获取事件列表,对ABS_MT_POSITION使用grep(以十六进制获取带有触摸事件的行),最后使用awk获取相关的十六进制值,将其去除零并将十六进制转换为整数。仅当您在设备上按此键时,这才会在终端中连续打印x和y坐标。

然后您可以使用此adb shell命令发送命令:

adb shell input tap x y

答案 4 :(得分:4)

考虑使用Android的uiautomator,使用adb shell uiautomator [...]或直接使用SDK附带的.jar。

答案 5 :(得分:4)

您不需要使用

  

adb shell getevent -l <​​/ p>

命令,您只需在设备的“开发者选项”中启用[显示触摸数据]即可获得X和Y.

在我的文章中可以找到更多信息:https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/