我正在尝试使用AndroidDebugBridge将触摸事件发送到设备,以便可以进行UI测试的一些基本自动化操作。我关注了LINK中的讨论。我能够使用sendevent在模拟器上模拟触摸,但是无法在设备上执行相同操作。
就像上面的链接一样,仿真器似乎每次触摸都会发送6个事件(xcoord,ycoord,2个用于新闻,2个用于释放),并且很容易使用此信息发送事件,但是设备触摸屏的getevent似乎可以产生太多事件。
是否有人设法将触摸从ADB发送到设备?您能否分享解决方案。
我正在尝试使用AndroidDebugBridge将触摸事件发送到设备,以便可以进行UI测试的一些基本自动化操作。我关注了LINK中的讨论。我能够使用sendevent在模拟器上模拟触摸,但是无法在设备上执行相同操作。
就像上面的链接一样,仿真器似乎每次触摸都会发送6个事件(xcoord,ycoord,2个用于新闻,2个用于释放),并且很容易使用此信息发送事件,但是设备触摸屏的getevent似乎可以产生太多事件。
是否有人设法将触摸从ADB发送到设备?您能否分享解决方案。
Answers:
Android随附了input
可模拟其他输入事件的命令行工具。为了模拟点击,它是:
input tap x y
您可以使用adb shell(> 2.3.5)远程运行命令:
adb shell input tap x y
为了执行特定操作(例如,打开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处按下了一个键(按下按钮),十六进制为69e,十进制为757和1694。
如果现在要生成相同的事件,则可以在相同位置使用input tap命令:
adb shell input tap 757 1694
可以在以下位置找到更多信息:
https://source.android.com/devices/input/touch-devices.html http://source.android.com/devices/input/getevent.html
adb shell input tap $((16#2f5)) $((16#69e))
。另外,为了学究,0x2F5和0x69E分别是757和1694。。。
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))}'
将抽头位置获取为整数的命令
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)
您还可以进行拖动,启动活动等。看一下MonkeyDevice的api 。
你不需要用
亚行外壳程序getevent -l
命令,只需在设备的“开发人员选项”中启用[显示触摸数据],即可获取X和Y。
一些更多信息可以在我的文章中找到:https : //mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/
考虑使用带有adb shell uiautomator [...]的Android uiautomator或直接使用SDK随附的.jar。
以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
得到的事件列表中,使用grep命令ABS_MT_POSITION
(获取与十六进制触摸事件的线),最后用awk来获得相关的十六进制值,剥夺他们的零和十六进制转换到整数。仅当您在设备上按时,这才会在终端中连续打印x和y坐标。
然后,您可以使用以下adb shell命令发送命令:
adb shell input tap x y