web-dev-qa-db-ja.com

adbを介してデバイスにタッチイベントを送信する

UIテストの基本的な自動化を行えるように、adb Shellコマンドを使用してデバイスにタッチイベントを送信しようとしています。これについては、以前のスレッドでの議論に従ってきました。

イベントを取得し、sendeventを使用して、タッチごとに6つのイベント(xcoord、ycoord、2を押す、2をリリースする)を送信することを確認しました。この情報にはsendeventが含まれますが、タッチスクリーンデバイス用のgeteventコマンドは非常に多くのイベントを生成するようです。

誰かがadbからデバイスにタッチイベントを送信できましたか?ソリューションを共有してください。

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

助けてください

36
Sunilcnair

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

input tap x y

inputコマンドを実行しますremotelyを使用して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>
46
Pedro Lobito

タッチイベントを送信するには、以下を行う必要があります。

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を使用する場合、すべてのイベント値は16進数です。

よろしく、ヤホール

29
user643154

セッションを記録し、bashとadbのみで再生することができました。

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

一連のイベントを記録する

  1. ファイルにデータを記録するようにpcをセットアップします(/tmp/Android-touch-events.log

    $ adb Shell getevent | grep --line-buffered ^/ | tee /tmp/Android-touch-events.log
    
  2. 電話で何かをする
  3. ctrl-cを使用してpcのadbコマンドを停止します

記録されたイベントを再生する

このコマンドは、awkの16進変換を行います

$ 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
20
MaxChinni

次のように monkeyrunner を使用できます。

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

ドラッグをしたり、アクティビティを開始したりすることもできます。 MonkeyDevice のAPIをご覧ください。

5
serv-inc