Aujourd'hui, nous allons parler du deuxième cadre principal d'automatisation de l'interface utilisateur appelé Poco. Poco utilise Python, et ici vous ne pouvez pas vous passer de l'écriture de code, mais regardons d'abord à quoi il sert, quand cela vaut la peine d'y accéder et à quoi tout cela ressemble.
Cet article est la finale de la série AirTest IDE. Le premier, aperçu, travail peut être trouvé à ce lien , et le second, qui parle du cadre de reconnaissance d'image, peut être trouvé ici .
Poco est un cadre d'interface utilisateur d'automatisation de jeu qui utilise Python dans le cadre de l'IDE AirTest avec la possibilité de combiner des fonctionnalités avec leur cadre de reconnaissance d'image (AirTest). Il convient de mentionner que l'IDE AirTest prend en charge d'autres langages (JS, Lua, C #, Java), mais d'autres exemples seront en Python, comme Cette langue est considérée comme la principale.
Les principaux éléments d'interaction sont les suivants:

Il est entendu que Poco sera utilisé dans des endroits où AirTest ne fonctionne pas, mais, comme les développeurs le remarquent eux-mêmes, vous pouvez écrire tous les tests en utilisant uniquement Poco et leur vitesse d'exécution sera beaucoup plus élevée, mais vous devez alors connaître Python au moins au niveau de base.
Connaissance et connexion de Poco-SDK à votre jeu
Pour commencer à utiliser Poco, vous devez vous familiariser avec le guide d'intégration de poco-sdk et installer le pilote dont vous avez besoin à partir de la page correspondante . Les moteurs de jeu suivants sont actuellement pris en charge: Unity3D , applications natives Android , applications OSX, applications Windows , cocs2dx-lua , cocs2dx-js , Egret , NetEase Internal Engines . Les développeurs offrent également la possibilité de créer leur propre pilote et de fournir une documentation décrivant cette fonctionnalité - le Guide d'implémentation . Unreal Engine est mentionné dans la documentation officielle, mais la plupart d'entre eux vont de pair avec la phrase "Coming soon ...", donc vous ne pouvez pas dire avec certitude quand son support apparaîtra.
Après vous être familiarisé avec les informations générales et les étapes suivantes, vous devez télécharger le pilote dont vous avez besoin, après l'avoir déballé, placez-le dans le dossier du projet et connectez le script Poco Manager. Par exemple, pour Unity, il est proposé d'ajouter Poco Manager en tant que script à l'un des principaux objets de la scène principale, en particulier la caméra principale. Après cela, vous devez compiler le jeu et l'exécuter sur un appareil et un système d'exploitation pris en charge par AirTest IDE.
Connecter le jeu à AirTest IDE et vos premiers tests
Pour plus de simplicité et de clarté, je vais utiliser l'exemple avec le jeu de démonstration officiel écrit en Unity, qui est fourni par les développeurs d'AirTest IDE. Il y a 2 options: pour Windows et pour Android , mais je me concentrerai sur la version pour Windows. Soit dit en passant, il est préférable d'utiliser Windows 7, car sur Windows 10, j'ai détecté un comportement de script étrange, en particulier un emplacement incorrect des éléments à l'écran lors de l'utilisation de certaines commandes. Le même code n'a pas fonctionné correctement sur Windows 10 et correctement sur 7. Nous attendrons que cette erreur ennuyeuse soit corrigée dans les futures mises à jour.

Ouvrez le jeu de démonstration et attendez que l'écran de démarrage se charge. Ouvrez AirTest IDE. Dans la fenêtre Périphériques sur le côté droit de la disposition de travail, sélectionnez la fenêtre de jeu à l'aide du bouton Fenêtre de recherche dans la section "Connexion à l'application Windows". La fenêtre avec le jeu «s'intégrera» dans le panneau et s'agrandira pour s'adapter à la taille de la fenêtre avec le jeu. Ici, nous sommes confrontés au premier problème - l'incapacité de redimensionner la fenêtre pour nous adapter. Si la taille du panneau peut être modifiée, elle est insignifiante et cela dépend de la taille de la fenêtre avec le jeu. Par exemple, je n'ai pas rencontré un tel problème lors de l'utilisation d'appareils mobiles en mode portrait.
Après avoir connecté le jeu, vous devez informer AirTest IDE que vous utiliserez Poco pour travailler avec un moteur de jeu spécifique. Pour ce faire, utilisez la fenêtre Poco Assistant dans le coin inférieur gauche de l'écran (si elle n'y est pas, utilisez Windows -> Disposition par défaut pour restaurer tous les panneaux par défaut) et sélectionnez le moteur de jeu souhaité dans la liste déroulante, par exemple Unity. Eh bien, la touche finale est d'accepter d'ajouter tout le code nécessaire à l'éditeur de script en cliquant sur le bouton "Oui" dans la barre jaune qui apparaît. Si toutes les étapes précédentes ont réussi, dans la fenêtre de Poco Assistant, une arborescence hiérarchique d'éléments d'interface utilisateur de l'écran actuel de votre application apparaîtra. Cette partie de Poco Assistant est appelée la visionneuse de hiérarchie (UI Unspector) et elle affiche une liste des seuls éléments qui sont actuellement à l'écran. Cette liste est mise à jour automatiquement s'il y a des changements à l'écran, par exemple, l'apparition de nouveaux éléments après certains événements (Événements).
Un exemple des étapes ci-dessus sous le spoiler.
Exemple de connexion d'un jeu dans AirTest IDE Pour interagir avec n'importe quel élément de l'écran, vous devez connaître son code de chemin d'interface utilisateur. Pour ce faire, double-cliquez simplement sur l'objet dans Poco Assistant ou cliquez sur le bouton droit de la souris et sélectionnez l'élément approprié. Un code apparaîtra dans la fenêtre de l'éditeur de script pour accéder à l'élément sélectionné et vous devez ajouter uniquement le mode d'interaction (fonction) à travers le point.
Un exemple d'une liste remplie d'éléments dans Poco Assistant Par exemple, si vous devez cliquer sur un bouton qui est désigné comme "btn_start" dans la hiérarchie, alors pour un clic, vous aurez besoin de quelque chose comme ce code.
poco("btn_start").click()
C'est-à-dire le test le plus simple basé sur un jeu de démonstration qui vérifie la pression des boutons sur l'écran principal Démarrer et Retour (de la section GlobalControl) ressemblera à ceci
Ce qui se passe en fait: le programme trouve l'élément indiqué dans le code et, après avoir trouvé son emplacement sur l'écran, exécute la fonction souhaitée. Toutes ces opérations et les données nécessaires (par exemple, l'emplacement de l'objet, le nombre de clics dessus, etc.) peuvent être trouvées dans le rapport, et le rapport lui-même peut être créé à l'aide du raccourci clavier Ctrl + L. Notez que les noms / adresses des boutons sont issus du calcul de leur existence sur l'écran courant.
À quoi cela ressemble dans la dernière version d'AirTest IDE (1.2.2) peut être vu sous le spoiler.
Découvrez et utilisez les boutons avec Poco Types d'articles
Je n'ai pas trouvé de documentation décrivant les types d'éléments, je partagerai donc mes observations et commentaires après utilisation. Après cela, je donnerai un exemple de la façon d'accéder à des éléments spécifiques et de laisser un lien vers la documentation , qui contient des informations beaucoup plus détaillées.
Des exemples d'éléments seront donnés sur la base de l'un des écrans du jeu de démonstration.

Cet exemple contient les éléments suivants:
- Texte - Cet écran en contient 3 variétés. Des exemples seront cachés sous les spoilers.
Le texte sur l'élément (bouton) - L'image - dans l'exemple ci-dessus - est une étoile.
- Champ de saisie - champ de saisie de texte dans notre cas
- Le bouton est le bouton Retour dans notre exemple, mais sous le spoiler il y aura un exemple d'un autre bouton, car Le dos ne rentre pas complètement dans l'écran intégré
- Node - je ne sais pas comment le décrire, mais, en fait, c'est un conteneur d'éléments.
L'arbre développé de tous les éléments de l'exemple ci-dessus est le suivant

Et un peu plus sur le codage
Actuellement, l'IDE AirTest fournit 34 équipes pour interagir avec les éléments. Leur liste s'affiche automatiquement dans une fenêtre contextuelle après avoir entré un point après l'élément d'interaction. Pour une raison que je ne comprends pas, toutes les commandes peuvent être appelées pour tout type d'élément. Est-ce à dire que toutes les commandes peuvent être utilisées pour tous les types d'éléments? Je ne sais pas encore, il n'y avait aucun moyen de vérifier. Pour plus de commodité, la liste actuelle peut être consultée sous le spoiler.
Liste des fonctions d'interaction avec les éléments dans Poco add_post_action_callback add_pre_action_callback agent click freeze get_screen_size long_click sleep_for_polling_interval snapshot wait_for_all swipe wait_for_any wait_stableattr child children click ( , ) drag_to exists focus get_bounds get_name get_position get_size get_text invalidate nodes offspring set_text setattr sibling swipe ( , ) wait wait_for_appearance wait_for_disappearance
L'utilisation de variables ici est fortement recommandée et permet même d'éviter certains problèmes. Plus tard, il sera possible d'accéder aux éléments en spécifiant simplement le nom de la variable. Vous trouverez ci-dessous quelques exemples d'enregistrement d'un élément dans une variable et d'accès à celui-ci:
Variable d'image star = poco("star_single") if star.exists(): pos = star.get_position()
Variable d'objet d'entrée input_field = poco("pos_input") time.sleep(1) input_field.set_text('x={:.02f}, y={:.02f}'.format(*pos)) time.sleep(3)
Variable de bouton title = poco('title').get_text() if title == "Basic test": back = poco('btn_back', type='Button') back.click() back.click()
J'ai mentionné ci-dessus que les variables peuvent vous éviter des ennuis. En particulier, j'ai rencontré un problème dans le module Drag and Drop du jeu de démonstration. Il contient 5 étoiles (images) et la tâche du joueur est de les transférer vers le shell, qui est situé juste en dessous de la rangée d'étoiles. Il convient de mentionner tout de suite que le problème se pose lorsque vous accédez directement au tableau des éléments "étoiles": après avoir fait glisser l'élément à la position souhaitée, il disparaît. L'IDE AirTest ne prend en compte que les éléments visibles et, par conséquent, une fois que l'étoile transférée est devenue invisible, le code ne peut pas y accéder directement. Si vous accédez directement au tableau d'étoiles, il sera réinitialisé, car le nombre d'éléments en elle a changé. C'est-à-dire l'entrée suivante ne transférera pas les 5 éléments vers le shell
poco("playDragAndDrop").child("star")[0].drag_to(poco("shell")) poco("playDragAndDrop").child("star")[1].drag_to(poco("shell")) poco("playDragAndDrop").child("star")[2].drag_to(poco("shell")) poco("playDragAndDrop").child("star")[3].drag_to(poco("shell")) poco("playDragAndDrop").child("star")[4].drag_to(poco("shell"))
Le stockage de l'initialisation du tableau dans une variable vous aidera à éviter de réinitialiser le tableau après chaque modification du nombre de ses éléments visibles. Dans ce cas, l'appel à ses éléments ressemblera à ceci:
stars = poco("playDragAndDrop").child("star") stars[0].drag_to(poco("shell")) stars[1].drag_to(poco("shell"))
En conséquence, vous pouvez également stocker la position de l'élément shell dans une variable distincte afin de ne pas y accéder directement à chaque fois.
Quel est le résultat?
AirTest IDE est un ensemble d'outils assez puissant pour tester l'interface utilisateur dans les jeux et autres systèmes complexes sous Windows et OS mobile. La détection des éléments nécessaires fonctionne correctement dans la plupart des cas, la possibilité d'écrire des tests à partir de zéro, la prise en charge de nombreux langages de programmation, des informations assez détaillées sur les résultats du test exécuté dans le rapport, qui peuvent être créées à l'aide de l'IDE lui-même, ainsi que le coût de la boîte à outils elle-même (je vous rappelle qu'AirTest IDE est une application Open-Source) - tout cela entre les mains d'AirTest IDE et est une bonne raison d'essayer, et à tout le moins, d'implémenter cet outil dans votre système d'automatisation. Il convient de garder à l'esprit que bien qu'AirTest ait été conçu pour tester des jeux, il n'est pas destiné à automatiser le gameplay. Airtest IDE fait un excellent travail de choses «statiques», par exemple, trouver certains éléments sur l'écran, travailler avec des éléments d'interface utilisateur, par exemple, faire du shopping dans des magasins de jeux, etc. Cet IDE fait parfaitement face à ces tâches et peut être conseillé pour une automatisation assez simple et fiable de vos applications avec un seuil d'entrée bas pour les débutants dans ce métier!
Vous pouvez trouver plus d'informations sur l'utilisation, des exemples basés sur le jeu de démonstration et le jeu lui-même à partir de NetEase sur la page officielle des développeurs dans la section Exemples et tutoriels Poco .
Si vous avez déjà de l'expérience avec AirTest IDE, ce sera génial si vous le partagez dans les commentaires, et si vous trouvez des bugs, vous pouvez laisser leur rapport de bug sur la page correspondante !