Opérations d'automatisation de base¶
Ce chapitre décrit les fonctionnalités d'automatisation de base fournies par FIRERPA. Des utilisations plus avancées seront décrites ultérieurement. Ce chapitre présente certaines des interfaces de fonctionnalités de base les plus couramment utilisées.
Obtenir les informations sur l'appareil¶
Obtient les informations de l'appareil actuel, telles que le nom de l'appareil, la taille de l'écran, l'orientation de l'écran et l'application en cours.
d.device_info()
>>> d.device_info()
productName: "bumblebee"
sdkInt: 34
displayHeight: 2400
displaySizeDpX: 411
displaySizeDpY: 914
displayWidth: 1080
screenOn: true
naturalOrientation: true
currentPackageName: "com.android.launcher3"
>>> result = d.device_info()
>>> print (result.displayWidth)
1080
Obtenir les informations du service¶
Obtient les informations du service actuel, telles que la version, l'ID unique de l'appareil, la version, l'ABI, etc.
d.server_info()
>>> d.server_info( )
uniqueId: "673abbe0-ff7b-9d82-1792-8876cb72cf56"
version: "8.28"
architecture: "arm64-v8a"
uptime: 293
secure: True
>>> result = d.server_info()
>>> print (result.secure)
False
Éteindre l'écran¶
L'interface suivante éteindra l'écran du téléphone actuel, ce qui équivaut à appuyer une fois sur le bouton d'alimentation lorsque l'écran est allumé.
d.sleep()
Allumer l'écran¶
L'interface suivante allumera l'écran du téléphone actuel, ce qui équivaut à appuyer une fois sur le bouton d'alimentation lorsque l'écran est éteint.
d.wake_up()
Vérifier si l'écran est allumé¶
Vous pouvez utiliser l'interface suivante pour vérifier si l'écran de l'appareil actuel est allumé, afin de déterminer si des opérations peuvent être effectuées.
d.is_screen_on()
Vérifier si l'écran est verrouillé¶
Vous pouvez utiliser l'interface suivante pour vérifier si l'écran de l'appareil actuel est déverrouillé, afin de déterminer si des opérations peuvent être effectuées.
d.is_screen_locked()
Afficher un Toast¶
Vous pouvez utiliser l'interface suivante pour afficher un message Toast Hello from Lamda! sur l'interface du téléphone.
d.show_toast("Hello from Lamda!")
Lire le presse-papiers¶
L'interface suivante est utilisée pour lire le contenu actuel du presse-papiers du téléphone. Elle ne prend temporairement pas en charge Android 10+.
d.get_clipboard()
Écrire dans le presse-papiers¶
L'interface suivante est utilisée pour écrire du contenu dans le presse-papiers de l'appareil actuel.
d.set_clipboard("Contenu du presse-papiers")
Touches physiques¶
Vous pouvez utiliser la méthode ci-dessous pour simuler des pressions de touches. Elle prend en charge plus d'une douzaine de touches telles que KEY_BACK, KEY_DOWN, KEY_HOME, etc.
d.press_key(Keys.KEY_BACK)
d.press_key(Keys.KEY_CAMERA)
d.press_key(Keys.KEY_CENTER)
d.press_key(Keys.KEY_DELETE)
d.press_key(Keys.KEY_DOWN)
d.press_key(Keys.KEY_ENTER)
d.press_key(Keys.KEY_HOME)
d.press_key(Keys.KEY_LEFT)
d.press_key(Keys.KEY_MENU)
d.press_key(Keys.KEY_POWER)
d.press_key(Keys.KEY_RECENT)
d.press_key(Keys.KEY_RIGHT)
d.press_key(Keys.KEY_SEARCH)
d.press_key(Keys.KEY_UP)
d.press_key(Keys.KEY_VOLUME_DOWN)
d.press_key(Keys.KEY_VOLUME_MUTE)
d.press_key(Keys.KEY_VOLUME_UP)
Pour prendre en charge d'autres touches, vous pouvez également utiliser cette méthode pour les simuler. Vous pouvez trouver tous les noms de touches pris en charge dans la documentation officielle d'Android ici : https://developer.android.com/reference/android/view/KeyEvent.
d.press_keycode(KeyCodes.KEYCODE_CALL)
Capture d'écran¶
Nous fournissons une méthode pour prendre des captures d'écran, vous permettant d'enregistrer des processus ou d'effectuer des opérations de reconnaissance d'image. L'appel ci-dessous signifie capturer une image avec une qualité de 60 et la sauvegarder dans le fichier screenshot.png dans le répertoire courant.
d.screenshot(60).save("screenshot.png")
>>> result = d.screenshot(60)
>>> result
<lamda.types.BytesIO object at 0x7a28361d60>
>>> result.save("screenshot.png")
52917
>>> result.getvalue( )
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01....'
Actuellement, nous prenons également en charge les captures d'écran de région et d'élément. La capture d'élément n'est pas abordée dans ce chapitre. Nous allons ici présenter la capture de région. Vous devez comprendre le concept et la définition d'une région. Dans notre interface, une région est définie par Bound, qui contient quatre paramètres : top, left, right, bottom. L'écran Android est différent d'un système de coordonnées classique ; le coin supérieur gauche de l'écran de l'appareil est l'origine, avec les coordonnées x=0, y=0. Supposons que l'écran actuel soit en mode portrait avec une résolution de 1080x1920. Pour prendre une capture d'écran de la région plein écran, vous pouvez procéder comme suit.
d.screenshot(60, bound=Bound(top=0, left=0, right=1080, bottom=1920)).save("screenshot.png")
Cela produira une capture d'écran en plein écran, ce qui est bien sûr inutile car la capture d'écran par défaut est déjà en plein écran. Alors, si nous voulons capturer une image de 200x200 dans le coin supérieur gauche, comment faire ? C'est aussi très simple, il vous suffit de faire comme ci-dessous.
d.screenshot(60, bound=Bound(top=0, left=0, right=200, bottom=200)).save("screenshot.png")
Ici, nous allons vous expliquer la signification de ces paramètres. Dans les paramètres, top représente top pixels vers le bas depuis l'axe Y, bottom représente bottom pixels vers le bas depuis l'axe Y, et left ainsi que right représentent N pixels vers la droite depuis l'axe X. top est toujours inférieur à bottom, et left est toujours inférieur à right. Démontrons maintenant comment capturer une image de 200x200 dans le coin inférieur droit de l'écran. Il vous suffit d'appeler l'interface comme suit.
d.screenshot(60, bound=Bound(top=1920-200, bottom=1920, left=1080-200, right=1080)).save("screenshot.png")
Cliquer sur un point de l'écran¶
Vous pouvez utiliser l'interface suivante pour simuler un clic sur l'écran. Dans l'exemple, nous cliquons sur le point aux coordonnées 100,100 de l'écran.
d.click(Point(x=100, y=100))
Appuyer sur le point A et le faire glisser vers le point B¶
L'interface suivante permet de faire glisser un objet de la position du point A au point B, par exemple, faire glisser une icône dans un dossier.
A = Point(x=100, y=100)
B = Point(x=500, y=500)
d.drag(A, B)
Glisser du point A au point B¶
L'interface suivante permet de glisser depuis les coordonnées 100x100 de l'écran jusqu'aux coordonnées 500x500.
A = Point(x=100, y=100)
B = Point(x=500, y=500)
d.swipe(A, B)
Glissement multipoint plus complexe¶
L'interface suivante peut simuler un glissement multipoint. Par exemple, l'appel ci-dessous glissera de 100x100 à 500x500, puis reviendra à 200x200. La démonstration ci-dessous ne fait glisser que trois points, mais vous pouvez en fournir davantage, et même réaliser un déverrouillage par schéma.
p1 = Point(x=100, y=100)
p2 = Point(x=500, y=500)
p3 = Point(x=200, y=200)
d.swipe_points(p1, p2, p3)
Ouvrir les paramètres rapides¶
L'appel suivant peut ouvrir les paramètres rapides à l'écran.
d.open_quick_settings()
Ouvrir la barre de notifications¶
L'appel suivant peut ouvrir la barre de notifications à l'écran.
d.open_notification()
Obtenir la hiérarchie de la vue¶
L'appel suivant peut obtenir la hiérarchie de la vue actuelle au format XML. Vous pouvez également l'analyser vous-même pour prendre en charge l'automatisation via XPath.
d.dump_window_hierarchy()
>>> result = d.dump_window_hierarchy()
>>> result
<lamda.types.BytesIO object at 0x7add660680>
>>> result.getvalue()
b'<?xml version=\'1.0\' encoding=\'UTF-8\' standalone=\'yes\' ?>\r\n<hierarchy rotation="0">\r\n <node index="0" text="" resource-id="" class="android.widget.FrameLayout" package="com.android.systemui" content-desc="" checkable="false" checked="false" clickable="false"...
Attendre que la fenêtre soit inactive¶
Vous pouvez exécuter l'appel suivant pour attendre que la fenêtre actuelle soit inactive, similaire à implicitly_wait de Selenium. L'unité du paramètre est la milliseconde, donc 5*1000 représente une attente de 5 secondes. Le facteur de conversion de millisecondes en secondes est 1000.
d.wait_for_idle(5*1000)
Obtenir le dernier Toast¶
Vous pouvez exécuter l'appel suivant pour obtenir le dernier message Toast du système. Notez cependant qu'il ne prend en charge que les messages Toast envoyés via l'API système ; les messages de type Toast implémentés par des UI tierces ne peuvent pas être récupérés.
d.get_last_toast()
>>> result = d.get_last_toast()
>>> print (result)
timestamp: 1700000000000
package: "com.android.settings"
message: "\346\202\250\345\267\262\345\244\204\344\272\216\345\274\200\345\217\221\350\200\205\346\250\241\345\274\217\357\274\214\346\227\240\351\234\200\350\277\233\350\241\214\346\255\244\346\223\215\344\275\234\343\200\202"
>>> print (result.message)
Vous êtes déjà en mode développeur, cette opération n'est pas nécessaire.