web-dev-qa-db-fra.com

Comment utiliser ADB pour envoyer des événements tactiles au périphérique à l'aide de la commande sendevent?

J'essaie d'envoyer des événements tactiles à un périphérique à l'aide d'AndroidDebugBridge, afin de pouvoir effectuer quelques automatisations de base pour les tests d'interface utilisateur. J'ai suivi la discussion dans LINK . Je peux utiliser sendevent pour simuler le toucher sur des émulateurs, mais je ne peux pas faire la même chose sur un appareil.

Comme dans le lien ci-dessus, l'émulateur semble envoyer 6 événements pour chaque contact (xcoord, ycoord, 2 pour presse, 2 pour publication) et il était facile d'utiliser cette information pour envoyer des événements, mais un getevent pour l'écran tactile d'un périphérique semble générer beaucoup trop d'événements.

Quelqu'un a-t-il réussi à envoyer des contacts de la BAD à un appareil? Pourriez-vous s'il vous plaît partager la solution.

77
Harkish

Android est livré avec un outil de ligne de commande input qui peut simuler divers événements d'entrée. Pour simuler le tapotement, c'est:

input tap x y

Vous pouvez utiliser le shell adb (> 2.3.5) pour exécuter la commande à distance:

adb Shell input tap x y
123
user643154

Pour effectuer une action particulière (par exemple, ouvrir le navigateur Web), vous devez d’abord savoir où appuyer. Pour ce faire, vous pouvez d’abord lancer:

adb Shell getevent -l

Une fois que vous avez appuyé sur l'appareil, à l'emplacement de votre choix, vous verrez cette sortie:

<...>
/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 vous indique qu'une touche a été enfoncée (bouton enfoncé) aux positions 2f5, 69e en hex qui est 757 et 1694 en décimal.

Si vous voulez maintenant générer le même événement, vous pouvez utiliser la commande tap d'entrée au même emplacement:

adb Shell input tap 757 1694

Plus d'informations peuvent être trouvées à:

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

51
Tomas

2.3.5 n'a pas eu input tap, juste input keyevent et input text Vous pouvez utiliser le monkeyrunner pour cela: (il s'agit d'une copie de la réponse à l'adresse https://stackoverflow.com/a/18959385/1587329 ):

Vous voudrez peut-être utiliser monkeyrunner comme ceci:

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

Vous pouvez également faire un glisser-déposer, lancer des activités, etc. Jetez un coup d'œil à l'api pour MonkeyDevice .

11
serv-inc

Vous n'avez pas besoin d'utiliser

adb Shell getevent -l

pour ce faire, il vous suffit d’activer les options de développement du périphérique [Afficher les données tactiles] pour obtenir X et Y.

Quelques informations supplémentaires peuvent être trouvées dans mon article ici: https://mobileqablog.wordpress.com/2016/08/20/Android-automatic-touchscreen-taps-adb-Shell-input-touchscreen-tap/

4
Ekaterina Vlasova

Pensez à utiliser Android iautomator , avec adb Shell uiautomator [...] ou directement à l'aide du fichier .jar fourni avec le SDK.

4
Elist