添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我正在尝试使用 adb shell 命令向设备发送触摸事件,这样我就可以为UI测试做一些基本的自动化。我已经关注了之前一些主题中关于这个问题的讨论。

我确认了获取事件并使用 sendevent ,为每次触摸发送6个事件(xcoord, ycoord, 2 表示按下。替换代码2】用于释放),用 sendevent 很容易使用这些信息,但 getevent 命令对于触摸屏设备似乎产生了太多的事件。

有没有人成功地从 adb 向设备发送触摸事件?能否请你分享一下解决方案。

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

1 个评论
android
adb
Sunilcnair
Sunilcnair
发布于 2010-12-08
4 个回答
Pedro Lobito
Pedro Lobito
发布于 2013-09-23
已采纳
0 人赞同

安卓系统自带一个 input 的命令行工具,可以模拟各种输入事件。
要模拟一个 tap ,请使用。

input tap x y

Run the input commandremotely using adb shell:

adb shell input tap x y

其他选择是:。

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>
    
I only have text and keyevent
一些安卓系统带有残缺的二进制文件。
user643154
user643154
发布于 2013-09-23
0 人赞同

To send touch event you need to do:

  • 设置坐标。

    adb shell sendevent /dev/input/event2 3 0 x
    adb shell sendevent /dev/input/event2 3 1 y
    
  • 发送触摸事件(必须有0 0 0对)。

    adb shell sendevent /dev/input/event2 1 330 1
    adb shell sendevent /dev/input/event2 0 0 0
    
  • 发送释放手指事件(必须有0 0 0对)。

    adb shell sendevent /dev/input/event2 1 330 0
    adb shell sendevent /dev/input/event2 0 0 0
    
  • 你可以记录事件。

    adb shell getevent
    
  • 如果你使用getevent,所有的事件值都是十六进制的。

  • 你的意思是,getevent记录的是十六进制,而sendevent只接受十进制?
    gilm
    是的,getevent以十六进制打印出来,但只适用于十进制。没有打印错误,只是不做任何事情 :)
    Lost
    这里的解决方案是什么?我是否必须手动将所有的十六进制转换为十进制?
    是的,你只需将其转换为小数。
    MaxChinni
    MaxChinni
    发布于 2013-09-23
    0 人赞同

    我设法录制了一个会话,并只用bash和adb重放。

    这是我所做的,我希望它能帮助别人。

    Record a series of events

  • 设置PC以记录文件中的数据 ( /tmp/android-touch-events.log )

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
    
  • do some stuff on the phone
  • stop the adb command on the pc with ctrl-c
  • Replay the recorded events

    此命令将在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
        
  • "awk: bailing out at source line 1" 这个错误出现了。你有什么办法吗?
    xargs:非法选项--l;awk:调用未定义的函数strtonum。
    @geeth it seems 也有人发现了它 . Sorry by I'm on GNU/Linux.
    这对我来说很有效,然而我需要在每一行之间有一个延迟。 我试了一下,但没有成功:awk '{printf "%s %d %d %d/n", substr(1, 1, length(1) -1), strtonum("0x "2), strtonum("0x "3), strtonum("0x "4); sleep 5}' android-touch-events.log| xargs -l adb shell sendevent
    我仍然得到xargs: illegal option -- l. 命令中使用的是哪个选项?
    serv-inc
    serv-inc
    发布于 2013-09-23
    0 人赞同

    你可能想用 monkeyrunner like this:

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