38

我正在尝试使用adb shell命令将触摸事件发送到设备,以便我可以为 UI 测试做一些基本的自动化。我在之前的一些帖子中对此进行了讨论。

我确认要获取事件并使用sendevent, 为每次触摸发送 6 个事件(xcoord、ycoord、2新闻、2发布),并且很容易将这些信息与 一起使用sendevent,但getevent触摸屏设备的命令似乎也生成了很多许多事件。

有人设法将触摸事件从设备发送adb到设备吗?能否请您分享解决方案。

我正在努力记录手机上的触摸事件。之后,我希望将相同的事件作为 UI 测试的一部分发送回设备。

请帮忙

4

4 回答 4

53

Android comes with an input command-line tool that can simulate miscellaneous input events.
To simulate a tap, use:

input tap x y

Run the input command remotely using adb shell:

adb shell input tap x y

Other options are:

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>
于 2013-12-29T21:29:18.910 回答
34

要发送触摸事件,您需要执行以下操作:

  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所有的事件值都是十六进制的。

于 2011-03-22T14:01:46.487 回答
23

我设法记录了一个会话并只用 bash 和 adb 重播它。

这就是我所做的,我希望它对某人有所帮助。

记录一系列事件

  1. 设置电脑以在文件中记录数据 ( /tmp/android-touch-events.log)

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
    
  2. 在电话上做一些事情
  3. 在电脑上停止 adb 命令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
于 2014-06-04T13:02:58.507 回答
6

你可能想像这样使用monkeyrunner

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

您还可以进行拖动、启动活动等。查看MonkeyDevice的 api 。

于 2013-09-23T12:35:51.970 回答