Appium Capacités souhaitées pour Android Émulateur
⚡ Résumé intelligent
Les capacités souhaitées sont les paires clé-valeur Appium Le client envoie des instructions au serveur lors de l'ouverture d'une session, indiquant la plateforme, le périphérique, le pilote et l'application sur lesquels le test automatisé doit être exécuté.

Quelles sont les capacités souhaitées
Les « capacités souhaitées » nous aident à modifier le comportement du serveur pendant l'automatisation. Appium Il s'agit d'une table de hachage, ou paire clé-valeur, utilisée pour envoyer une commande à la Appium serveur, où chaque commande client s'exécute dans le contexte d'une session.
Par exemple, un client envoie une requête POST /session contenant un objet JSON à la Appium serveur.
Pour envoyer une requête ou maintenir une session avec le serveur, on utilise un ensemble de paires clé-valeur. C'est ce qu'on appelle les « capacités requises ».
import io.appium.java_client.AppiumDriver; import org.openqa.selenium.remote.DesiredCapabilities; { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("deviceName","Android Emulator"); capabilities.setCapability("platformVersion", "4.4"); }
Rôle important de la capacité souhaitée
- Les « DesiredCapabilities » permettent à l'utilisateur de contrôler la requête de session auprès du serveur. Par exemple, pour une session iOS, nous définissons la capacité platformName = iOS, et pour une session Android, nous définissons la capacité « platformName » = iOS. Android Nom de la plateforme de session = Android.
- Les « DesiredCapabilities » sont utilisées pour configurer l'instance WebDriver, par exemple. FirefoxPilote, ChromeDriver ou InternetExplorerDriver.
- DesiredCapability est très utile pour Selenium Grille. Par exemple, elle sert à exécuter différents cas de test sur un navigateur et un système d'exploitation différents. En fonction de la capacité déclarée, le hub de la grille pointe vers le nœud correspondant. Les nœuds sont définis à l'aide des méthodes de propriété « set ».
DesiredCapabilities obj = new DesiredCapabilities(); obj.setBrowserName("firefox"); obj.setVersion("18.0.1"); obj.setPlatform(org.openqa.selenium.Platform.WINDOWS);
- Une fonctionnalité souhaitée est un package défini par une bibliothèque. Avant d'utiliser `DesiredCapabilities`, il convient de l'importer depuis la bibliothèque ci-dessous.
Org.openqa.selenium.remote.DesiredCapabilities
Appium prend en charge les deux Android et iOS, il existe donc un ensemble distinct de Appium capacités serveur pour chaque plateforme.
Le tableau ci-dessous présente quelques exemples d'utilisation courante. Android capacités et valeurs à utiliser.
| Description | Valeurs/Utilisations | |
|---|---|---|
| appPackage | Appelez le numéro souhaité Java emballer dans Android que l'utilisateur souhaite exécuter |
Valeur = com.example.myapp/ Obj.setCapability("appPackage", "com.whatsapp"); |
| appActivité | Activité de l'application que l'utilisateur souhaite lancer à partir du package. |
Valeur = MainActivity, .Settings Obj.setCapability("appActivity", "com.whatsapp.Main"); |
| appWaitPackage | Paquet que l'application doit attendre | Valeur = com.example.android.myapp |
| appWaitActivity | Toutes Android activité pour laquelle l'utilisateur doit attendre |
Valeur = SplashActivity capacités.setCapability("appWaitActivity", "com.example.game.SplashActivity") |
REMARQUE : se référer à la Appium Documentation pour en voir plus Android capacités.
Le tableau ci-dessous présente certaines fonctionnalités iOS couramment utilisées et les valeurs à utiliser.
| Description | Nos valeurs | |
|---|---|---|
| LaunchTimeout | Temps total (en ms) d'attente pour l'instrumentation. | 2000 |
| C'EST TOI QUI L'AS FAIT | Pour identifier le numéro unique d'un appareil physique connecté | 166aestu4 |
REMARQUE : se référer à la Appium guide des capacités pour découvrir plus de fonctionnalités iOS.
Comment les compétences souhaitées ont évolué Appium 2
Les exemples ci-dessus proviennent de Appium Une ère et elle montre encore la forme d'un ensemble de capacités, mais deux règles ont changé et toutes deux empêcheront le démarrage d'une session moderne.
Premièrement, la spécification WebDriver du W3C ne définit qu'un petit ensemble de fonctionnalités standard, parmi lesquelles platformName et browserName C'est le seul point important. Toutes les autres fonctionnalités sont des extensions du fournisseur et doivent comporter un préfixe d'espace de noms se terminant par deux-points. AppiumLe préfixe de 's est appium:. Si deviceName devient appium:deviceName et platformVersion devient appium:platformVersion. Appium 2 nécessite également appium:automationName, car les pilotes sont installés séparément et non pas fournis avec le serveur.
Deuxièmement, répéter le préfixe devient fastidieux, donc Appium accepte un seul appium:options Une capacité dont la valeur est un objet. Les capacités contenues dans cet objet n'ont pas besoin de préfixe, et lorsqu'un nom apparaît à la fois à l'intérieur et à l'extérieur de l'objet, c'est la valeur interne qui prévaut.
{
"platformName": "iOS",
"appium:options": {
"automationName": "XCUITest",
"platformVersion": "16.0",
"app": "/path/to/your.app",
"deviceName": "iPhone 12",
"noReset": true
}
}
⚠️ Note de version : sur le Java côté, Selenium 4 et Appium Java Le client 8 a déprécié le DesiredCapabilities classe présentée précédemment. Générateurs spécifiques au pilote hérités de BaseOptions le remplacer — UiAutomator2Options pour Android et XCUITestOptions pour iOS — avec une correspondance un à unping de chaque vieux setCapability appel. Le code original ci-dessus est conservé ici à titre d'exemple historique.
ExtracInformations sur les forfaits et les activités
Les packages sont des ensembles de fichiers ou de classes. Ils confèrent une structure organisée à la programmation modulaire. JavaDans ce système, différents modules sont regroupés dans un seul fichier JAR, que l'utilisateur peut exécuter. Un concept similaire est utilisé dans le développement d'applications mobiles.
Dans l' Android système d'exploitation, toutes les applications sont installées sous la forme de Java colis. Donc, pour extracinformations sur le chemin du paquet t, le Android La classe PackageManager est utilisée.
Il récupère les informations relatives aux paquets et à l'activité des applications préinstallées et post-installées sur l'appareil.
Vous pouvez obtenir une instance de la classe PackageManager en appelant la méthode getPackageManager(). Cette méthode permet d'accéder aux packages et aux permissions associées des applications installées, et de les manipuler.
Par exemple :
PackageManager pManager = getPackageManager();
List<ApplicationInfo> list = pManager.getInstalledApplications(PackageManager.GET_META_DATA)
Comment trouver appPackage et appActivity avec adb
La méthode PackageManager décrite ci-dessus fonctionne depuis l'intérieur d'une application. En tant que testeur, vous ne disposez généralement que de la version installée ; la méthode la plus rapide consiste donc à effectuer une requête sur PackageManager. adb contre un appareil connecté ou un émulateur.
Ouvrez l'application manuellement sur l'appareil, puis exécutez l'une des commandes ci-dessous depuis un terminal situé dans le dossier platform-tools. La commande affiche la fenêtre active, et la valeur est formatée comme suit : package/activity.
adb shell dumpsys window | find "mCurrentFocus" adb shell dumpsys window windows | grep -i "mCurrentFocus"
Utilisez la première forme dans le Windows L'invite de commandes et la seconde dans un shell Unix ou Git Bash. Lisez le résultat en deux parties : tout ce qui précède la barre oblique est la valeur de appPackage, et tout ce qui suit est la valeur de appActivity.
Deux précautions s'imposent. L'activité active est celle affichée à l'écran à ce moment précis, qui ne correspond pas toujours à l'activité initiale de l'application. Si une session échoue lors de l'initialisation du pilote, relancez l'application et relisez la valeur. De plus, si un écran de démarrage apparaît en premier, l'activité d'entrée sera différente de celle que vous souhaitez finalement tester, ce qui est précisément le cas. appWaitActivity existe pour.
Une alternative visuelle est uiautomatorviewer, qui capture la hiérarchie d'écran actuelle et affiche le package et la classe de chaque nœud.
Erreurs courantes liées aux capacités souhaitées et comment les corriger
La plupart ont échoué Appium Les sessions s'interrompent avant même l'exécution d'une seule étape de test, et la cause réside presque toujours dans les capacités du système plutôt que dans le test lui-même. Le tableau ci-dessous associe chaque message à sa solution habituelle.
| Message | Cause probable | Fixer |
| Fonctionnalité WebDriver non valide ou non prise en charge | Une fonctionnalité non standard a été envoyée sans le préfixe du fournisseur | Ajoutez appium: à cet élément, ou déplacez-le à l'intérieur de appium:options |
| Les fonctionnalités souhaitées doivent inclure soit un nom d'automatisation, soit un nom de plateforme. | Appium 2 ne peuvent pas choisir de conducteur | Définissez explicitement platformName et appium:automationName |
| Impossible de démarrer l'application. Erreur d'origine : l'activité utilisée pour démarrer l'application n'existe pas. | appActivity ne correspond pas au manifeste | Relisez la valeur avec la commande dumpsys ci-dessus. |
| La session n'a pas démarré : aucun périphérique détecté. | Aucun émulateur ni combiné n'est connecté. | Vérifiez l'appareil avec la commande adb devices avant de lancer l'application. |
| Impossible de créer une nouvelle session après le délai d'attente. | Un écran de démarrage retarde l'activité d'entrée | Définissez appWaitActivity et augmentez appWaitDuration |
| L'état de l'application n'est pas réinitialisé entre les exécutions. | Le comportement de réinitialisation par défaut a été modifié. | Revvoir appium:noReset et appium:fullReset pour l'exécution souhaitée |
Lorsqu'une session refuse de démarrer, consultez les instructions suivantes : Appium journal du serveur plutôt que la pile client trace. Le serveur indique la capacité qu'il n'a pas pu satisfaire, et cette ligne nomme la solution.
