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

Har*_*ish 81 automation android touchscreen adb

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

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

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

use*_*154 123

Android附带了一个input可以模拟杂项输入事件的命令行工具.要模拟点击,它是:

input tap x y
Run Code Online (Sandbox Code Playgroud)

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

adb shell input tap x y
Run Code Online (Sandbox Code Playgroud)

  • 它使用 nox_adb.exe 在 Nox App 上完美运行,谢谢! (2认同)
  • 为了测试双击,我写了一个循环点击,像这样 i=0; 而 [ $(($i)) -le 2 ]; 做 i=$(($i + 1)); 输入抽头 500 800;完毕; 但它每一秒都在点击这个地方。我可以使用终端更快吗? (2认同)

Tom*_*mas 56

要执行特定操作(例如打开Web浏览器),您需要先找出要点击的位置.为此,您可以先运行:

adb shell getevent -l
Run Code Online (Sandbox Code Playgroud)

按下设备后,在您想要的位置,您将看到此输出:

<...>
/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
Run Code Online (Sandbox Code Playgroud)

adb告诉你按下了一个键(按钮向下),位置为2f5,61e为十六进制,为757,十进制为1694.

如果您现在想要生成相同的事件,可以在同一位置使用输入tap命令:

adb shell input tap 757 1694
Run Code Online (Sandbox Code Playgroud)

更多信息可在以下网址找到:

https://source.android.com/devices/input/touch-devices.html http://source.android.com/devices/input/getevent.html

  • 要找到触摸坐标,我建议使用开发者选项 - >显示触摸位置.此外,它以小数形式给出值. (9认同)
  • 如果您不想将十六进制转换为十进制,则可以让您的shell执行:`adb shell输入tap $((16#2f5))$((16#69e))`。另外,为了学究,0x2F5和0x69E分别是757和1694。。。 (2认同)

ser*_*inc 11

2.3.5没有input tap,只是input keyeventinput text 你可以使用monkeyrunner :(这是答案的副本/sf/answers/1327156981/):

你可能想要像这样使用monkeyrunner:

$ monkeyrunner
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
>>> device = MonkeyRunner.waitForConnection()
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)
Run Code Online (Sandbox Code Playgroud)

你也可以做一个拖动,启动活动等.看看MonkeyDevice的api .


小智 5

你不需要用

亚行外壳程序getevent -l

命令,只需在设备的“开发人员选项”中启用[显示触摸数据]以获取X和Y。

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


kyc*_*won 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))}'
Run Code Online (Sandbox Code Playgroud)

使用adb shell getevent -l得到的事件列表中,使用grep命令ABS_MT_POSITION(获取与十六进制触摸事件的线),最后用awk来获得相关的十六进制值,剥夺他们的零和十六进制转换到整数。只有当您按下设备时,这才会在终端中连续打印 x 和 y 坐标。

然后你可以使用这个 adb shell 命令来发送命令:

adb shell input tap x y
Run Code Online (Sandbox Code Playgroud)