Je dois automatiser une application Android, je fais la même chose via Appium. Le problème auquel je suis confronté est après le lancement du serveur Appium, l'application est installée dans l'émulateur 4.4.2 et pour inspecter l'élément que j'utilise avec UIAutomatorviewer, qui est livré par défaut avec le SDK. Mais lors de l'inspection de l'élément de l'application, le message d'erreur s'affiche! [Entrez la description de l'image ici] [1]
Error obtaining UI hierarchy
Reason:Error while obtaining UI hierarchy XML file.com.Android.ddmlb.SynchException.Remote object doesn't exist.
J'ai essayé de trouver la solution pour pouvoir inspecter l'élément afin de pouvoir écrire un script, mais en vain.
Après ma conversation avec le visualiseur uiautomator, j'ai appris que nous n'obtenions l'erreur que lorsque:
le serveur appium est en cours d'exécution et nous essayons de capturer la capture d'écran à l'aide de uiautomatorviewer.
Ainsi, chaque fois que vous souhaitez utiliser uiautomatorviewer, assurez-vous que ce serveur est à l'état arrêté.
J'ai résolu le même problème en utilisant les méthodes suivantes.
(1) Connectez votre appareil Android à vos machines de développement;
(2) Accédez à la ligne de commande dans la ligne de commande du terminal ou du DOS pour Windows.
(3) Utiliser "adb Shell" dans vos appareils Android;
(4) Changez l'utilisateur en root en saisissant "su root" en ligne de commande;
(5) Modifiez le droit d'accès à/data/local/tmp en saisissant "chmod 777/data/local/tmp";
(6) Retournez sur uiautomatorviewer et effectuez une nouvelle capture d'écran. L'erreur devrait disparaître.
J'imagine qu'il y a des fichiers qui ne peuvent pas être accessibles s'ils ne possèdent pas le droit dans/data/local/tmp.
Assurez-vous que tout sur votre écran est statique. Et le curseur de saisie clignotant est également interdit. Toute action de peinture empêchera uiautomator de vider l’interface utilisateur actuelle.
Vous pouvez tester en utilisant la commande adb suivante:
adb Shell uiautomator dump /data/local/tmp/uidump.xml
si le message ERROR: could not get idle state.
apparaît, vous souffrez de ce problème.
Voir les lignes 87 et 101 de DumpCommand
:
try { ... uiAutomation.waitForIdle(1000, 1000 * 10); ... } catch (TimeoutException re) { System.err.println("ERROR: could not get idle state."); return; }
La solution la plus simple ..
Redémarrez l'appareil. Redémarrez uiautomatorviewer.
A travaillé comme un charme pour moi ....: P
Arrêtez le serveur Appium. Puis réessaye. Ça marche.
Répondez à votre question # 2 Vous pouvez inspecter l'application Android directement à partir de votre appareil Android réel.
Tu dois:
Démarrer l'application que vous souhaitez inspecter dans votre appareil Android
Ouvrez le navigateur Chrome sur votre ordinateur/ordinateur portable et effectuez un clic droit -> Plus d'outils -> Inspecter les appareils -> Cliquez sur votre appareil -> (Cliquez sur l'appareil Android OK
pour autoriser) -> Cliquez sur Inspect
C'est tout. J'espère que ça aide!
J'ai également le même problème (également si Appium Server n'était pas en cours d'exécution). Après le basculement, le débogage USB OFF/ON fonctionnait pour moi.
J'ai eu le même problème parce que j'ai utilisé "adbd insecure". Donc, je viens de désactiver "adbd insecure", et recharger uiautomatorviewer, tout est OK.
Manière de contourner l'ERREUR:
ne pouvait pas rester inactif.
En utilisant uiautomator pour obtenir uix et screenshot.
public class DeviceMethods extends UiAutomatorTestCase {
public void dump(){
try {
getUiDevice().dumpWindowHierarchy("window_dump.uix") ;
getUiDevice().takeScreenshot(new File("/data/local/tmp/window_dump.png"));
} catch (Exception e) {
}
}
vous devez créer le fichier uiautomator et le transmettre à/data/local/tmp
utiliser ce tutoriel sur l'utilisation de uiautomator
après avoir obtenu les fichiers, ouvrez-les simplement dans uiautomatorviewer
Je l'ai résolu
J'ai fermé le serveur Appium en cours d'exécution sur ma machine et je l'ai ouvert à nouveau .
J'ai passé plus d'une semaine à résoudre ce problème. Lorsque vous connectez votre appareil et utilisez ASM 3.0, lorsque l'écran est projeté, ouvrez UIAutomator pour capturer l'écran Android actuel. Sans Appium, il devrait capturer. Pour utiliser Android Studio au lieu de sdk Android. Désinstallez et réinstallez Android Studio. Cela fonctionne parfaitement pour moi maintenant.
nous devons utiliser un appareil qui a un niveau API supérieur à 17 ou un haricot gélatineux
Dans le cas de périphériques enracinés: Activez l'accès racine dans les options de développement pour adb. Redémarrez adb en tant que root
Vérifiez si vous avez activé ces options sous "Options pour les développeurs" sur le téléphone.
1) Arrêtez Appium Server
2) ouvrir un émulateur
3) allez dans Paramètres> Options du développeur> Activer l'inspection d'attribut de vue
4) les options de développeur in invisible? Allez dans les paramètres> appuyez sur À propos du terminal/du téléphone> Faites défiler jusqu'à la dernière option (Numéro de version)> Continuellement appuyez sur "Numéro de version" 7 fois> vous devriez recevoir un message Toast "Vous êtes un développeur"> revenir de cet écran> Revenir dans les paramètres> Vous devriez maintenant voir les options de développement. Appuyez dessus> Activer l'inspection des attributs de vue
5) Vous ne devriez plus recevoir ce message d'erreur
Cela se produit car adb utilise un port et est bloqué par le serveur appium.
J'ai trouvé la meilleure solution pour cela
Éliminez le fichier adb.exe à partir des processus de la barre des tâches et essayez de relancer uiautomatorviewer.
Celui qui fonctionne est dans ce chemin:
Android/Sdk/tools/bin/uiautomatorviewer
Collez ceci dans votre terminal et il lancera automator qui fonctionne
Ce qui a fonctionné pour moi:
arrêter appium
ouvrir un périphérique émulateur (testé avec Android 7.1.1)
allez dans Paramètres> Options pour les développeurs> Activer l'inspection des attributs de vue
ouvrir un shell sur l’ordinateur, la cmd ou le terminal en fonction de votre système d’exploitation
entrez les commandes suivantes:
adb Shell
su
cd/data
cd/local
chmod 777 tmp
démarrer uiautomatorviewer
prendre une capture d'écran XML
"su chmod 777/data/local/tmp" n'a pas fonctionné pour moi, donc j'ai exploré et cela a fonctionné.
Je suppose que vous devez le faire dans un émulateur et non dans un périphérique physique, à moins que le périphérique soit enraciné. ¯\_ (ツ) _/¯
Beaucoup de chance!