Ich versuche, Touch-Ereignisse mit AndroidDebugBridge an ein Gerät zu senden, damit ich einige grundlegende Automatisierungsfunktionen für UI-Tests durchführen kann. Ich habe die Diskussion in LINK verfolgt . Ich kann sendevent verwenden, um die Berührung von Emulatoren zu simulieren, kann dies jedoch nicht auf einem Gerät tun.
Wie im obigen Link scheint der Emulator 6 Ereignisse für jede Berührung auszusenden (xcoord, ycoord, 2 für die Presse, 2 für die Freigabe), und es war einfach, diese Informationen für Ereignisse zu verwenden, aber ein Ereignis für den Touchscreen für ein Gerät scheint dies zu tun viel zu viele Ereignisse erzeugen.
Hat es jemand geschafft, eine Berührung von ADB an ein Gerät zu senden? Könnten Sie bitte die Lösung teilen.
quelle
Antworten:
Android verfügt über ein
input
Befehlszeilentool, mit dem verschiedene Eingabeereignisse simuliert werden können. Um das Tippen zu simulieren, ist es:Sie können die ADB-Shell (> 2.3.5) verwenden, um den Befehl remote auszuführen:
quelle
Um eine bestimmte Aktion auszuführen (z. B. um den Webbrowser zu öffnen), müssen Sie zunächst herausfinden, wo Sie tippen müssen. Dazu können Sie zunächst Folgendes ausführen:
Sobald Sie auf das Gerät an der gewünschten Stelle drücken, wird folgende Ausgabe angezeigt:
adb teilt Ihnen mit, dass an der Position 2f5 eine Taste gedrückt wurde (Taste nach unten), 69e in hexadezimaler Position, 757 und 1694 in Dezimalzahl.
Wenn Sie jetzt dasselbe Ereignis generieren möchten, können Sie den Befehl input tap an derselben Position verwenden:
Weitere Infos finden Sie unter:
https://source.android.com/devices/input/touch-devices.html http://source.android.com/devices/input/getevent.html
quelle
adb shell input tap $((16#2f5)) $((16#69e))
. Um pedantisch zu sein, sind 0x2F5 und 0x69E 757 bzw. 1694 ... Was haben Sie zum Konvertieren zwischen Basen verwendet?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))}'
, der die Tap-Position als Ganzzahl erhält2.3.5 hatte nicht
input tap
, nurinput keyevent
undinput text
Sie können den Monkeyrunner dafür verwenden: (Dies ist eine Kopie der Antwort unter https://stackoverflow.com/a/18959385/1587329 ):quelle
Sie müssen nicht verwenden
Befehl müssen Sie nur in den Entwickleroptionen auf dem Gerät [Touch-Daten anzeigen] aktivieren, um X und Y zu erhalten.
Weitere Informationen finden Sie in meinem Artikel hier: https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/
quelle
Verwenden Sie den uiautomator von Android , [...] den adb shell uiautomator oder direkt die mit dem SDK gelieferte .jar-Datei.
quelle
Aufbauend auf Tomas 'Antwort ist dies der beste Ansatz, um die Position des Standortabgriffs als Ganzzahl zu ermitteln, die ich gefunden habe:
Verwenden Sie
adb shell getevent -l
diese Option , um eine Liste der Ereignisse abzurufen, für die grep verwendet wirdABS_MT_POSITION
(ruft die Zeile mit Berührungsereignissen in hexadezimal ab) und verwenden Sie schließlich awk, um die relevanten hexadezimalen Werte abzurufen, Nullen zu entfernen und hexadezimal in Ganzzahlen umzuwandeln. Dadurch werden die x- und y-Koordinaten im Terminal nur dann kontinuierlich gedruckt, wenn Sie auf das Gerät drücken.Sie können dann diesen Befehl adb shell verwenden, um den Befehl zu senden:
quelle