[JAVA] Créez un environnement de test d'application Windows avec Selenium Grid, Appium et Windows Application Driver

introduction

~~ Le test manuel n'est jamais autorisé ~~ Oncle qui promeut l'automatisation des tests: innocent: (Je pensais que le test manuel est également bon dans cette enquête)

Responsable "Voulez-vous que @umasaki enquête sur le test automatique?" I "Pour le Web, allez-y et faites une pause!" Responsable "Il existe également une application Windows" Je "Je ne peux pas encore faire ça: rolling_eyes:" Supérieur "J'ai vraiment hâte d'y être!" Je "Je le ferai quand cela arrivera!"

Donc, quand j'en ai entendu parler, il semble que beaucoup de travail soit nécessaire pour les tests du système, même pour les applications Windows. J'ai enquêté pour percer ici.

**2018/09/13 Ajout de paramètres et de problèmes inutiles. ** **

Logiciel utilisé

Il s'agit du logiciel utilisé pour la vérification. J'ai été vraiment attiré par le logiciel appelé SikuliX, mais en raison de l'unification de Selenium, il est devenu le logiciel suivant.

doux version Remarques
java 1.8.0_161
selenium-server-standalone.jar 3.11.0
Node.js 8.11.1
windows-build-tools 2.3.0 Installer à partir de npm
Appium 1.8.0 Installer à partir de npm
wd 1.6.2 Installer à partir de npm
WinAppDriver 1.0
Windows 10 SDK inspect.Utilisez exe

Installation

J'ai construit un environnement sur Windows10 32 bits.

Réglez Windows 10 en mode développeur

Paramètres ⇒ Mise à jour et sécurité ⇒ Pour les développeurs ⇒ Définir en mode développeur. TESTSS.jpg

Installez Node.js

J'ai installé node-v8.11.1-x86.msi.

Installez Appium etc. avec npm

Quand j'ai procédé au contenu de "Experience Appium maintenant avec une installation simple" sur le site, je suis tombé sur l'installation d'Appium.

À partir de là, j'ai démarré l'invite de commande avec des privilèges d'administrateur et j'ai travaillé. (Je pense)

Paramètres de connexion

Je ne pense pas que les quatre paramètres ci-dessus soient nécessaires si vous n'utilisez pas de proxy. Je n'ai pas vérifié la signification de la première commande. Oui.

set HTTP_PROXY=http://proxyserver:8080
set HTTPS_PROXY=http://proxyserver:8080

npm config -g set proxy http://proxyserver:8080
npm config -g set https-proxy http://proxyserver:8080
npm config -g set registry http://registry.npmjs.org/

Évitez les erreurs comme Python ou insérez

J'ai eu diverses erreurs telles que l'insertion de Python, mais je l'ai résolu avec cette commande. Pratique: étreindre:

npm install --global --production windows-build-tools

Installez Appium

Frais (・ д ・ ` *)

npm install -g appium

** Post-scriptum 2018/09/13 Pour le pilote d'application Windows uniquement, le client Appium n'est pas requis. ** **

<détails>

Installer le client Appium </ summary>

Installer le client Appium

Seulement ici, je démarre l'invite de commande normalement et je travaille.

npm install wd

Installer le pilote d'application Windows

** Post-scriptum 2018/09/13 J'ai pu l'installer avec la commande suivante. En interne, il semble exécuter WindowsApplicationDriver.msi, vous devrez donc peut-être exécuter l'invite de commande avec des privilèges d'administrateur. ** **

npm install appium-windows-driver

J'ai installé WindowsApplicationDriver.msi.

Environnement

Lancez Selenium Grid Hub

Exécutez la commande suivante.

java -jar selenium-server-standalone-3.11.0.jar -role hub

Lancer Appium en tant que nœud

Je n'ai pas vérifié la signification des paramètres de configuration de json. Certains paramètres semblent ennuyeux, mais copiez.

NodeConfigAppium.json


{
  "capabilities":
      [
        {
          "platformName":"Windows",
          "deviceName":"WindowsPC",
          "maxInstances": 1
        }
      ],
  "configuration":
  {
    "cleanUpCycle":2000,
    "timeout":30000,
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "url":"(Côté nœud)http://XXX.XXX.XXX.XXX:4723/wd/hub",
    "host": "(Côté nœud)XXX.XXX.XXX.XXX",
    "port": (Côté nœud)4723,
    "maxSession": 1,
    "register": true,
    "registerCycle": 5000,
    "hubPort": (Côté moyeu)4444,
    "hubHost": "(Côté moyeu)XXX.XXX.XXX.XXX"
  }
}

Après avoir créé le fichier de paramètres, exécutez la commande suivante.

appium --nodeconfig NodeConfigAppium.json

Je vais vraiment le déplacer

J'ai changé un peu l'échantillon et l'ai exécuté. Si vous l'exécutez avec ceci, s'il s'agit d'un système d'exploitation japonais, "Display is 8" sera affiché sur la console.

Les paramètres Maven ont été ajoutés à l'environnement de l'article précédent, ils sont donc les suivants. Si vous ne pensez qu'à Appium, il y a certaines choses dont vous n'avez pas besoin. aWS050269.JPG

CalculatorTest.java


package test;

import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.junit.AfterClass;Windows Application Driver
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;

import io.appium.java_client.windows.WindowsDriver;

public class CalculatorTest {

    private static WindowsDriver<WebElement> CalculatorSession = null;
    private static WebElement CalculatorResult = null;

    @BeforeClass
    public static void setup() {
        try {
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App");
            capabilities.setCapability("deviceName", "WindowsPC");
            capabilities.setCapability(CapabilityType.PLATFORM_NAME, "Windows");

            CalculatorSession = new WindowsDriver<WebElement>(new URL("http://XXX.XXX.XXX.XXX:4723/wd/hub"), capabilities);
            CalculatorSession.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

            CalculatorResult = CalculatorSession.findElementByAccessibilityId("CalculatorResults");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }
    }

    @AfterClass
    public static void TearDown() {
        CalculatorResult = null;
        if (CalculatorSession != null) {
            CalculatorSession.quit();
        }
        CalculatorSession = null;
    }

    @Test
    public void Addition() {
        CalculatorSession.findElementByAccessibilityId("num1Button").click();
        CalculatorSession.findElementByAccessibilityId("plusButton").click();
        CalculatorSession.findElementByAccessibilityId("num7Button").click();
        CalculatorSession.findElementByAccessibilityId("equalButton").click();
        System.out.println(CalculatorResult.getText());
    }
}

Examiner l'élément

PostScript 20/07/2018 Il est plus rapide de vérifier avec WinApp Driver UI Recorder à partir de ce qui suit.

Utilisez inspect.exe, qui intervient lorsque vous installez le SDK Windows 10. Dans mon environnement, il était dans C: \ Program Files \ Windows Kits \ 10 \ bin \ 10.0.16299.0 \ x86 \ inspect.exe.

C'est mon style ... Démarrez inspect.exe et décochez Always on Top.

aWS050268 - コピー (2).JPG

J'ai lancé l'application que je voulais étudier (dans ce cas, une calculatrice), déplacé le curseur pendant un moment ou cliqué, et examiné l'AutomationId et l'ai reflété dans la source.

aWS050268 - コピー.JPG

Être en difficulté

** Post-scriptum 2018/09/13 Les problèmes suivants ont été corrigés dans appium 1.9.0: hugging: **

Si vous spécifiez un élément inexistant, aucune erreur ne se produira dans le temps spécifié et attendez 10 minutes ou plus

Si vous spécifiez un élément qui n'existe pas, aucune erreur ne se produira dans le délai spécifié et attendez 10 minutes ou plus.

Examinons en changeant la méthode de sortie du journal.

Arguments lors du démarrage d'appium
appium --nodeconfig NodeConfigAppium.json --log "C:/Users/XXXXX/Desktop/node/log.txt" --log-level "info" --log-timestamp --local-timezone
Journal de sortie
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
● Vous devriez obtenir l'élément de résultat de la calculatrice
2018-05-02 14:33:07:512 - info: [HTTP] --> POST /wd/hub/session/4b9d3b16-2dd0-4e79-82f8-ce5694e514c6/element
2018-05-02 14:33:07:512 - info: [HTTP] {"using":"accessibility id","value":"CalculatorResults"}
2018-05-02 14:33:07:512 - info: [W3C] Driver proxy active, passing request on via HTTP proxy
2018-05-02 14:33:07:590 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:33:07:590 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:33:07:590 - info: [WinAppDriver] [STDOUT] ==========================================
2018-05-02 14:33:07:590 - info: [WinAppDriver] [STDOUT] POST /wd/hub/session/6DF966FD-DB90-4ECC-B490-552323C225FF/element HTTP/1.1
2018-05-02 14:33:07:590 - info: [WinAppDriver] [STDOUT] Accept: */*
2018-05-02 14:33:07:590 - info: [WinAppDriver] [STDOUT] Connection: keep-alive
2018-05-02 14:33:07:590 - info: [WinAppDriver] [STDOUT] Content-Length: 56
2018-05-02 14:33:07:590 - info: [WinAppDriver] [STDOUT] Content-Type: application/json
2018-05-02 14:33:07:590 - info: [WinAppDriver] [STDOUT] Host: 127.0.0.1:4724
2018-05-02 14:33:07:590 - info: [WinAppDriver] [STDOUT] User-Agent: appium
2018-05-02 14:33:07:590 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:33:07:590 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:33:07:622 - info: [WinAppDriver] [STDOUT] HTTP/1.1 200 OK
2018-05-02 14:33:07:622 - info: [WinAppDriver] [STDOUT] Content-Length: 100
2018-05-02 14:33:07:622 - info: [WinAppDriver] [STDOUT] Content-Type: application/json
2018-05-02 14:33:07:622 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:33:07:622 - info: [WinAppDriver] [STDOUT] {"sessionId":"6DF966FD-DB90-4ECC-B490-552323C225FF","status":0,"value":{"ELEMENT":"42.3540260.3.5"}}
2018-05-02 14:33:07:622 - info: [JSONWP Proxy] Replacing sessionId 6DF966FD-DB90-4ECC-B490-552323C225FF with 4b9d3b16-2dd0-4e79-82f8-ce5694e514c6
2018-05-02 14:33:07:622 - info: [HTTP] <-- POST /wd/hub/session/4b9d3b16-2dd0-4e79-82f8-ce5694e514c6/element 200 117 ms - 100
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
● Vous devriez obtenir un élément qui n'existe pas
2018-05-02 14:33:32:841 - info: [HTTP] --> POST /wd/hub/session/4b9d3b16-2dd0-4e79-82f8-ce5694e514c6/element
2018-05-02 14:33:32:841 - info: [HTTP] {"using":"accessibility id","value":"num1Buttonabc"}
2018-05-02 14:33:32:841 - info: [W3C] Driver proxy active, passing request on via HTTP proxy
2018-05-02 14:33:33:044 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:33:33:044 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:33:33:044 - info: [WinAppDriver] [STDOUT] ==========================================
2018-05-02 14:33:33:059 - info: [WinAppDriver] [STDOUT] POST /wd/hub/session/6DF966FD-DB90-4ECC-B490-552323C225FF/element HTTP/1.1
2018-05-02 14:33:33:059 - info: [WinAppDriver] [STDOUT] Accept: */*
2018-05-02 14:33:33:059 - info: [WinAppDriver] [STDOUT] Connection: keep-alive
2018-05-02 14:33:33:059 - info: [WinAppDriver] [STDOUT] Content-Length: 52
2018-05-02 14:33:33:059 - info: [WinAppDriver] [STDOUT] Content-Type: application/json
2018-05-02 14:33:33:059 - info: [WinAppDriver] [STDOUT] Host: 127.0.0.1:4724
2018-05-02 14:33:33:059 - info: [WinAppDriver] [STDOUT] User-Agent: appium
2018-05-02 14:33:33:059 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:33:33:059 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:33:45:825 - info: [WinAppDriver] [STDOUT] HTTP/1.1 404 Not Found
2018-05-02 14:33:45:841 - info: [WinAppDriver] [STDOUT] Content-Length: 139
2018-05-02 14:33:45:841 - info: [WinAppDriver] [STDOUT] Content-Type: application/json
2018-05-02 14:33:45:841 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:33:45:841 - info: [WinAppDriver] [STDOUT] {"status":7,"value":{"error":"no such element","message":"An element could not be located on the page using the given search parameters."}}
↑↑↑ Il faut 10 minutes pour revenir au POST ↓↓↓
2018-05-02 14:43:32:858 - info: [HTTP] <-- POST /wd/hub/session/4b9d3b16-2dd0-4e79-82f8-ce5694e514c6/element - - ms - -
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
2018-05-02 14:47:20:139 - info: [HTTP] --> DELETE /wd/hub/session/4b9d3b16-2dd0-4e79-82f8-ce5694e514c6
2018-05-02 14:47:20:139 - info: [HTTP] {}
2018-05-02 14:47:20:139 - info: [Appium] Removing session 4b9d3b16-2dd0-4e79-82f8-ce5694e514c6 from our master session list
2018-05-02 14:47:20:171 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:47:20:171 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:47:20:171 - info: [WinAppDriver] [STDOUT] ==========================================
2018-05-02 14:47:20:171 - info: [WinAppDriver] [STDOUT] DELETE /wd/hub/session/6DF966FD-DB90-4ECC-B490-552323C225FF HTTP/1.1
2018-05-02 14:47:20:171 - info: [WinAppDriver] [STDOUT] Accept: */*
2018-05-02 14:47:20:186 - info: [WinAppDriver] [STDOUT] Connection: keep-alive
2018-05-02 14:47:20:186 - info: [WinAppDriver] [STDOUT] Content-Length: 0
2018-05-02 14:47:20:186 - info: [WinAppDriver] [STDOUT] Content-Type: application/json
2018-05-02 14:47:20:186 - info: [WinAppDriver] [STDOUT] Host: 127.0.0.1:4724
2018-05-02 14:47:20:186 - info: [WinAppDriver] [STDOUT] User-Agent: appium
2018-05-02 14:47:20:186 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:47:20:186 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:47:20:218 - info: [WinAppDriver] [STDOUT] HTTP/1.1 200 OK
2018-05-02 14:47:20:218 - info: [WinAppDriver] [STDOUT] Content-Length: 63
2018-05-02 14:47:20:233 - info: [WinAppDriver] [STDOUT] Content-Type: application/json
2018-05-02 14:47:20:233 - info: [WinAppDriver] [STDOUT] 
2018-05-02 14:47:20:233 - info: [WinAppDriver] [STDOUT] {"sessionId":"6DF966FD-DB90-4ECC-B490-552323C225FF","status":0}
2018-05-02 14:47:20:233 - warn: [WinAppDriver] Did not get confirmation WinAppDriver deleteSession worked; Error was: Error: Did not get a valid response object. Object was: {"sessionId":"6DF966FD-DB90-4ECC-B490-552323C225FF","status":0}
2018-05-02 14:47:20:514 - info: [HTTP] <-- DELETE /wd/hub/session/4b9d3b16-2dd0-4e79-82f8-ce5694e514c6 200 295 ms - 76
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

Après avoir obtenu l'élément inexistant avec WinAppDriver et émis 404, il faut 10 minutes pour publier ... Afin d'isoler le problème Appium (paramètre?), Lancez directement le pilote d'application Windows et vérifiez.

Arguments lors du démarrage de WinAppDriver

Ajusté avec des arguments afin qu'il puisse être exécuté sans changer la source. J'ai vu quelque part que je devais l'exécuter avec des privilèges d'administrateur.

"C:\Program Files\Windows Application Driver\WinAppDriver.exe" XXX.XXX.XXX.XXX 4723/wd/hub

Résultat ... ** C'est bientôt fini! ** ** L'erreur revient également correctement avec NoSuchElementException, Si vous ne pouvez pas le résoudre via Appium, vous devez démarrer WinAppDriver directement.

** Post-scriptum 2018/09/13 Et je fais diverses choses et de nouveaux problèmes ...: fatigué: **

Si plusieurs applications sont démarrées à partir du pilote d'application Windows (WinAppDriver.exe) sur une machine, toutes les applications exécutées avec quit seront déconnectées.

WinAppDriver.exe est appelé via Appium, mais le processus de WinAppDriver.exe en est un même pour plusieurs applications, et lorsque quit est appelé, il semble que l'exe soit parti.

Si vous démarrez directement WinAppDriver.exe, le processus de WinAppDriver.exe ne disparaîtra pas même si vous quittez. (Je me demande si c'est le cas) Donc ça marche bien.

S'il est fermé, même si le processus persiste, le pilote sera considéré comme non publié par Selenium Grid, vous devez donc attendre qu'il expire.

J'ai décidé de limiter le nombre de sessions pouvant être démarrées sur une machine à une, sauf s'il y a une action telle que le démarrage de WinAppDriver.exe dans plusieurs processus dans Appium.

Recommended Posts

Créez un environnement de test d'application Windows avec Selenium Grid, Appium et Windows Application Driver
Créer un environnement de test E2E avec Selenium (Java)
Créez un environnement de développement d'applications Web qui utilise Java, MySQL et Redis avec Docker CE pour Windows
Ruby ① Création d'un environnement Windows
Créer un environnement Node.js avec Docker
Créer un environnement Tomcat 8.5 avec Pleiades 4.8
Créer une application Web avec Javalin
Créer un environnement de développement PureScript avec Docker
Créer un environnement de développement Wordpress avec Docker
[Copier et coller] Créez un environnement de développement Laravel avec Docker Compose, partie 2
Créez une API de tableau d'affichage avec certification et autorisation avec Rails 6 # 1 Construction de l'environnement
[Windows] [IntelliJ] [Java] [Tomcat] Créer un environnement pour Tomcat 9 avec IntelliJ
Créer un environnement Laravel / Docker avec VSCode devcontainer
Créez rapidement un environnement de développement WordPress avec Docker
Créez et testez des applications Java + Gradle avec Wercker
[Win10] Créer un environnement de développement JSF avec NetBeans
Préparer un environnement de scraping avec Docker et Java
Créer un environnement de développement Java avec VS Code
Installez Ubuntu 20.04 dans la boîte virtuelle sur Windows10 et créez un environnement de développement à l'aide de docker
[Rails] [Docker] Le copier-coller est OK! Comment créer un environnement de développement Rails avec Docker
Comment quitter Docker pour Mac et créer un environnement de développement Docker avec Ubuntu + Vagrant
Créer un environnement de débogage Ruby avec VS Code de Windows 10
[Note] Créez un environnement Python3 avec Docker dans EC2
Créez un environnement de développement local pour les didacticiels Rails avec Docker-Introduisez Bootstrap et Font Awesome avec Webpack-
Déploiement d'un environnement Java avec le sous-système Windows pour Linux (WSL)
Créez un environnement de développement «Spring Thorough Introduction» avec IntelliJ IDEA
Créez un environnement virtuel CentOS 8 sur votre Mac à l'aide de VirtualBox
Créer une API de tableau d'affichage avec autorisation de certification dans Rails 6 # 11 Test et validation du modèle utilisateur ajoutés
Créer un environnement Docker avec WSL
Créez un environnement de traitement de données avec Google Cloud DataFlow + Pub / Sub
Procédure de création d'un environnement de développement d'applications Rails avec Docker [Rails, MySQL, Docker]
Créez un environnement de développement où les points d'arrêt de Ruby on Rails fonctionnent sous Windows
Créer un environnement de test de navigateur à l'aide de Capybara dans l'environnement de développement Docker
Création d'un environnement haskell avec Docker + VS Code sur Windows10 Home
Parcourez Java et MySQL PATH avec des variables d'environnement [version Windows]
Créer un environnement de développement pour Django + MySQL + nginx avec Docker Compose
Étapes pour créer un environnement de développement Ruby on Rails avec Vagrant
J'ai essayé de créer une application d'apprentissage automatique avec Dash (+ Docker) part1 ~ Construction de l'environnement et vérification du fonctionnement ~
# 1 [Débutant] Créez une application Web (site Web) avec Eclipse à partir de la connaissance 0. "Construisons un environnement pour créer des applications Web"