web-dev-qa-db-ja.com

sendeventコマンドを使用してADBを使用してタッチイベントをデバイスに送信する方法は?

AndroidDebugBridgeを使用してタッチイベントをデバイスに送信しようとしているので、UIテストの基本的な自動化を行うことができます。 LINK の議論に従いました。 sendeventを使用してエミュレーターでタッチをシミュレートすることはできますが、デバイスで同じことを行うことはできません。

上記のリンクのように、エミュレーターはタッチごとに6つのイベント(xcoord、ycoord、プレス用に2、リリース用に2)を送信するようで、この情報を使用してイベントを送信するのは簡単でしたが、デバイスのタッチスクリーンのgeteventはあまりにも多くのイベントを生成します。

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

77
Harkish

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

input tap x y

Adbシェル(> 2.3.5)を使用して、コマンドをリモートで実行できます。

adb Shell input tap x y
123
user643154

特定のアクション(たとえば、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、16進数で69e、10進数で757および1694のキーが押された(ボタンを押した)ことを示しています。

同じイベントを生成する場合は、同じ位置で入力タップコマンドを使用できます。

adb Shell input tap 757 1694

詳細については、次を参照してください。

https://source.Android.com/devices/input/touch-devices.htmlhttp://source.Android.com/devices/input/getevent.html

51
Tomas

2.3.5にはinput tapはなく、input keyeventinput 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をご覧ください。

11
serv-inc

使用する必要はありません

adbシェルgetevent -l

x、Yを取得するには、デバイスの[開発者向けオプション]で[タッチデータの表示]を有効にするだけです。

詳細については、こちらの記事をご覧ください: https://mobileqablog.wordpress.com/2016/08/20/Android-automatic-touchscreen-taps-adb-Shell-input-touchscreen-tap/

4

Androidの iautomator をadb Shell uiautomator [...]とともに使用するか、SDKに付属の.jarを直接使用することを検討してください。

4
Elist