Comment utiliser la BAD pour envoyer des événements tactiles à l'appareil en utilisant la commande sendEvent?
-
26-09-2019 - |
Question
Je suis en train d'envoyer des événements tactiles à un appareil à l'aide AndroidDebugBridge, afin que je puisse faire une automatisation de base pour les tests UI. J'ai suivi la discussion dans LINK . Je suis en mesure d'utiliser sendEvent pour toucher Simuler sur émulateurs, mais incapable de 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, coordY, 2 pour la presse, 2 pour la libération) et il était facile d'utiliser ces informations à sendEvents, mais getevent pour l'écran tactile pour une appareil semble générer beaucoup trop d'événements.
A quelqu'un a réussi à envoyer toucher de la BAD à un appareil? Pourriez-vous s'il vous plaît partager la solution.
La solution
Android est livré avec un outil de ligne de commande input
qui permet de simuler des événements d'entrée divers. Pour simuler tapotant, il 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
Autres conseils
Pour faire une action particulière (par exemple pour ouvrir le navigateur Web), vous devez d'abord savoir où robinet. Pour ce faire, vous pouvez d'abord exécuter:
adb shell getevent -l
Une fois que vous appuyez sur l'appareil, à l'emplacement que vous voulez, 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 dit qu'une touche a été pressée (bouton vers le bas) à la position 2F5, 69e dans l'hexagone 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 de prise d'entrée à la même position:
adb shell input tap 757 1694
Plus d'informations sont disponibles sur:
https://source.android.com/devices/input/touch- devices.html http://source.android.com/devices/input/getevent.html
2.3.5 n'a pas input tap
, juste input keyevent
et input text
Vous pouvez utiliser le monkeyrunner pour elle: (ce qui est une copie de la réponse à la https://stackoverflow.com/a/18959385/1587329 ):
Vous pouvez 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 glisser, etc. commencer activies Jetez un oeil à l'api MonkeyDevice .
Vous ne pas besoin d'utiliser
adb shell getevent -l
commande, il vous suffit de l'activer dans les options de développement sur le périphérique [Afficher les données tactile] pour obtenir X et Y.
Quelques informations peuvent être trouvées dans mon article ici: https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/
Pensez à utiliser uiautomator , avec adb uiautomator shell [.. .] ou directement en utilisant le .jar qui vient avec le kit de développement.