AndroidDebugBridgeを使用してタッチイベントをデバイスに送信しようとしているので、UIテストの基本的な自動化を行うことができます。 LINK の議論に従いました。 sendeventを使用してエミュレーターでタッチをシミュレートすることはできますが、デバイスで同じことを行うことはできません。
上記のリンクのように、エミュレーターはタッチごとに6つのイベント(xcoord、ycoord、プレス用に2、リリース用に2)を送信するようで、この情報を使用してイベントを送信するのは簡単でしたが、デバイスのタッチスクリーンのgeteventはあまりにも多くのイベントを生成します。
誰かがADBからデバイスにタッチを送信できましたか?ソリューションを共有してください。
Androidには、さまざまな入力イベントをシミュレートできるinput
コマンドラインツールが付属しています。タップをシミュレートするには、次のようにします。
input tap x y
Adbシェル(> 2.3.5)を使用して、コマンドをリモートで実行できます。
adb Shell input tap x y
特定のアクション(たとえば、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
2.3.5にはinput tap
はなく、input keyevent
とinput 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をご覧ください。
使用する必要はありません
adbシェルgetevent -l
x、Yを取得するには、デバイスの[開発者向けオプション]で[タッチデータの表示]を有効にするだけです。
詳細については、こちらの記事をご覧ください: https://mobileqablog.wordpress.com/2016/08/20/Android-automatic-touchscreen-taps-adb-Shell-input-touchscreen-tap/
Androidの iautomator をadb Shell uiautomator [...]とともに使用するか、SDKに付属の.jarを直接使用することを検討してください。