2010-12-08 128 views
26

我試圖使用ADB shell命令將觸摸事件發送到設備,以便我可以爲UI測試執行一些基本自動化。我在之前的一些主題中討論了這個問題。將觸摸事件從ADB發送到設備

我確認了有關獲取事件和使用sendevents,發送每個觸摸的6個事件(xcoord,ycoord,2 for press,2 for release),並且很容易將這些信息用於sendevents,但是一個getevent for設備的觸摸屏似乎產生太多事件。

有人設法將觸摸事件從ADB發送到設備?您可以請分享解決方案。

我真的很感謝你的幫助。

我正在記錄手機上的觸摸事件。之後,我希望將相同的事件作爲UI測試的一部分發送回設備。

請幫

+0

結帳十六進制轉換http://marian.schedenig.name/2014/07/03/remote-control-your-android-phone-through- adb/ – 2015-12-31 14:29:59

回答

27

要你需要做派觸摸事件:

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

最好的問候, Yahor

+1

你的意思是,十六進制中的getevent記錄,sendevent只接受十進制? – MarcoS 2011-08-04 09:25:38

+0

是的,getevent以十六進制輸出,但只能使用十進制。沒有錯誤打印,只是沒有做任何事情:) – gilm 2013-09-30 10:47:14

+0

這裏的解決方案是什麼?我必須手動將所有的十六進制轉換爲十進制嗎? – TeaLeave 2014-04-30 17:55:00

4

您可能需要使用monkeyrunner這樣的:

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

你也可以做一拖,開始活動比較等 看一看的API MonkeyDevice

37

Android自帶一個輸入命令行工具,可以模擬各種輸入事件。爲了模擬攻用途:

input tap x y 

您可以使用adb shell遠程運行命令:

adb shell input tap x y 

其他選項是:

[email protected]:/ $ 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> 
14

我設法記錄會話和回放它只有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 
相關問題