100

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

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

誰かがADBからデバイスにタッチを送信することに成功しましたか?解決策を教えてください。

4

6 に答える 6

153

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

input tap x y

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

adb shell input tap x y
于 2011-03-22T14:08:00.670 に答える
72

特定のアクション(たとえば、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でキーが押された(ボタンを押した)ことを通知しています。

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

adb shell input tap 757 1694

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

https://source.android.com/devices/input/touch-devices.html http://source.android.com/devices/input/getevent.html

于 2015-04-14T17:44:21.677 に答える
12

2.3.5にはありませんでしたがinput tap、 monkeyrunnerinput keyeventinput text 使用できます:(これは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をご覧ください。

于 2013-09-23T12:47:44.830 に答える
8

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

adb shell getevent -l

コマンドの場合、XとYを取得するには、デバイスの[開発者向けオプション][タッチデータの表示]で有効にする必要があります。

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

于 2016-08-21T13:22:42.867 に答える
6

Tomasの答えに基づいて、これは私が見つけた整数としてロケーションタップ位置を見つけるための最良のアプローチです。

adb shell getevent -l | grep ABS_MT_POSITION --line-buffered | awk '{a = substr($0,54,8); sub(/^0+/, "", a); b = sprintf("0x%s",a); printf("%d\n",strtonum(b))}'

を使用adb shell getevent -lしてイベントのリストを取得し、grep forを使用してABS_MT_POSITION(タッチイベントの行を16進数で取得)、最後にawkを使用して関連する16進数値を取得し、ゼロを取り除き、16進数を整数に変換します。これにより、デバイスを押したときにのみ、端末のx座標とy座標が継続的に印刷されます。

次に、このadbシェルコマンドを使用してコマンドを送信できます。

adb shell input tap x y
于 2020-06-13T15:55:49.267 に答える
4

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

于 2013-06-16T10:17:07.847 に答える