2010-12-08 61 views
26

UIテストの基本的な自動化を行うために、ADBシェルコマンドを使用してデバイスにタッチイベントを送信しようとしています。私はこれに関するいくつかの以前のスレッドで議論に従ってきました。ADBからデバイスにtouchイベントを送信する

私は、各タッチ(xcoord、ycoord、プレス2、リリース2)で6つのイベントを送信するためにイベントを取得してsendeventsを使用することを確認しました。この情報をsendeventsに使用するのは簡単でしたが、デバイス用のタッチスクリーンはあまりにも多くのイベントを生成するようです。

誰かがADBからデバイスにタッチイベントを送信できましたか?解決策を共有してください。

本当にありがとうございます。

私は電話でタッチイベントを記録するために取り組んでいます。その後、UIテストの一環として、同じイベントをデバイスに送り返したいと思います。

あなたがする必要があるタッチイベントを送信するには

+0

チェックアウトhttp://marian.schedenig.name/2014/07/03/remote-control-your-android-phone-through-に進変換を行いますadb/ –

答えて

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を使用している場合。あなたはこのようなmonkeyrunnerを使用する場合があります

敬具、 Yahor

+1

あなたは16進数のgeteventレコードを意味し、sendeventは10進数のみを受け入れます??? – MarcoS

+0

はい、geteventは16進数で出力しますが、10進数でのみ動作します。エラーは表示されず、何もしません:) – gilm

+0

解決策は何ですか?すべての16進数を10進数に手動で変換する必要がありますか? – TeaLeave

4

:また、ドラッグを行うなどactivies がMonkeyDeviceためのAPIを見てくださいを開始することができます

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

37

Androidには、さまざまな入力イベントをシミュレートできる入力コマンドラインツールが付属しています。

input tap x y 

あなたがリモートからコマンドを実行するために、adbのシェルを使用することができます:

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> 
+1

私は 'text'と' keyevent'しか持っていません –

+0

一部のアンドロイドには、不自由なバイナリが付属しています。 –

14

は、私がセッションやリプレイを記録するために管理タップの使用をシミュレートするために、それはbashとadbだけです。

これは私がやったこと、誰かを助けることを願っています。

録音

  1. は、ファイル内のデータを記録するPCの設定一連のイベントは、(/tmp/android-touch-events.log

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log 
    
  2. が電話
  3. にいくつかのものをやっていることは上のadbコマンドを停止しますPCと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 
+0

"awk:ソース行1を救済する"このエラーが発生しています。あなたは何か考えていますか? – nikhil84

+0

OSXでは再生コマンドが機能しません。 xargs:不正なオプション - l; awk:未定義の関数strtonumを呼び出す – prageeth

+1

@geethそれは[誰かがそれを見つけたようです](http://stackoverflow.com/questions/8199934/strtonum-in-os-x-not-found)。私はGNU/Linux上で申し訳ありません。 – MaxChinni

関連する問題