UIテストの基本的な自動化を行えるように、adb Shell
コマンドを使用してデバイスにタッチイベントを送信しようとしています。これについては、以前のスレッドでの議論に従ってきました。
イベントを取得し、sendevent
を使用して、タッチごとに6つのイベント(xcoord、ycoord、2
を押す、2
をリリースする)を送信することを確認しました。この情報にはsendevent
が含まれますが、タッチスクリーンデバイス用のgetevent
コマンドは非常に多くのイベントを生成するようです。
誰かがadb
からデバイスにタッチイベントを送信できましたか?ソリューションを共有してください。
電話でのタッチイベントの記録に取り組んでいます。その後、UIテストの一環として、同じイベントをデバイスに送り返します。
助けてください
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>
タッチイベントを送信するには、以下を行う必要があります。
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進数です。
よろしく、ヤホール
セッションを記録し、bashとadbのみで再生することができました。
これは私がやったこと、それが誰かを助けることを願っています。
ファイルにデータを記録するようにpcをセットアップします(/tmp/Android-touch-events.log
)
$ adb Shell getevent | grep --line-buffered ^/ | tee /tmp/Android-touch-events.log
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
次のように monkeyrunner を使用できます。
$ monkeyrunner
>>> from com.Android.monkeyrunner import MonkeyRunner, MonkeyDevice
>>> device = MonkeyRunner.waitForConnection()
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)
ドラッグをしたり、アクティビティを開始したりすることもできます。 MonkeyDevice のAPIをご覧ください。