[JAVA] Erstellen Sie eine Windows-Anwendungstestumgebung mit Selenium Grid, Appium und Windows Application Driver

Einführung

~~ Manueller Test ist niemals erlaubt ~~ Onkel, der die Testautomatisierung fördert: unschuldig: (Ich dachte, dass der manuelle Test auch in dieser Umfrage gut ist)

Verantwortlich "Möchten Sie, dass @umasaki den automatischen Test untersucht?" I "Für das Web machen Sie eine Pause!" Verantwortlich "Es gibt auch eine Windows-Anwendung" I "Das kann ich noch nicht machen: rollende Augen:" Superior "Ich freue mich sehr darauf!" Ich "Ich werde es tun, wenn dies passiert!"

Als ich davon hörte, schien es, dass selbst für Windows-Anwendungen viel Arbeit für Systemtests erforderlich ist. Ich habe nachgeforscht, um hier durchzubrechen.

**2018/09/13 Unnötige Einstellungen und Probleme hinzugefügt. ** ** **

Verwendete Software

Dies ist die zur Überprüfung verwendete Software. Die Software SikuliX hat mich sehr angezogen, aber aufgrund der Vereinheitlichung von Selen ist sie zur folgenden Software geworden.

Sanft Ausführung Bemerkungen
java 1.8.0_161
selenium-server-standalone.jar 3.11.0
Node.js 8.11.1
windows-build-tools 2.3.0 Von npm installieren
Appium 1.8.0 Von npm installieren
wd 1.6.2 Von npm installieren
WinAppDriver 1.0
Windows 10 SDK inspect.Verwenden Sie exe

Installation

Ich habe eine Umgebung unter Windows 10 32bit erstellt.

Stellen Sie Windows 10 auf den Entwicklermodus

Einstellungen ⇒ Update und Sicherheit ⇒ Für Entwickler ⇒ Im Entwicklermodus einstellen. TESTSS.jpg

Installieren Sie Node.js.

Ich habe node-v8.11.1-x86.msi installiert.

Installieren Sie Appium usw. mit npm

Als ich mit dem Inhalt von "Appium jetzt mit einer einfachen Installation erleben" auf der Website fortfuhr, stieß ich auf die Installation von Appium.

Von hier an startete ich die Eingabeaufforderung mit Administratorrechten und arbeitete. (Ich denke)

Verbindungseinstellungen

Ich denke nicht, dass die obigen vier Einstellungen notwendig sind, wenn Sie keinen Proxy verwenden. Ich habe die Bedeutung des ersten Befehls nicht überprüft. Ja.

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/

Vermeiden Sie Fehler wie Python oder setzen Sie ein

Ich habe verschiedene Fehler wie das Einfügen von Python erhalten, aber ich habe es mit diesem Befehl gelöst. Praktisch: umarmen:

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

Installieren Sie Appium

Gebühr (・ д ・ ` *)

npm install -g appium

** 13.09.2018 Nachtrag Nur für Windows-Anwendungstreiber ist Appium Client nicht erforderlich. ** ** **

Installieren Sie Appium Client

Installieren Sie den Appium Client

Nur hier starte ich die Eingabeaufforderung normal und arbeite.

npm install wd

Installieren Sie den Windows-Anwendungstreiber

** 13.09.2018 Nachtrag Ich konnte es mit dem folgenden Befehl installieren. Intern scheint WindowsApplicationDriver.msi ausgeführt zu werden, sodass Sie möglicherweise die Eingabeaufforderung mit Administratorrechten ausführen müssen. ** ** **

npm install appium-windows-driver

Ich habe WindowsApplicationDriver.msi installiert.

Umgebung

Starten Sie den Selenium Grid Hub

Führen Sie den folgenden Befehl aus.

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

Starten Sie Appium als Knoten

Ich habe die Bedeutung der Konfigurationseinstellungen von json nicht überprüft. Es gibt einige Einstellungen, die nervig erscheinen, aber kopieren.

NodeConfigAppium.json


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

Führen Sie nach dem Erstellen der Einstellungsdatei den folgenden Befehl aus.

appium --nodeconfig NodeConfigAppium.json

Ich werde es tatsächlich bewegen

Ich habe die Probe ein wenig geändert und ausgeführt. Wenn Sie es damit ausführen und es sich um ein japanisches Betriebssystem handelt, wird "Display is 8" auf der Konsole angezeigt.

Die Maven-Einstellungen wurden der Umgebung des letzten Artikels hinzugefügt. Sie lauten also wie folgt. Wenn Sie nur an Appium denken, gibt es einige Dinge, die Sie nicht brauchen. 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());
    }
}

Untersuche das Element

20.07.2018 Nachtrag Es ist schneller, mit WinApp Driver UI Recorder Folgendes zu überprüfen.

Verwenden Sie inspect.exe, das bei der Installation des Windows 10 SDK eingeht. In meiner Umgebung befand es sich in C: \ Programme \ Windows Kits \ 10 \ bin \ 10.0.16299.0 \ x86 \ inspect.exe.

Es ist mein Stil ... Starten Sie inspect.exe und deaktivieren Sie Always on Top.

aWS050268 - コピー (2).JPG

Ich startete die Anwendung, die ich untersuchen wollte (in diesem Fall einen Taschenrechner), bewegte den Cursor eine Weile oder klickte, untersuchte die AutomationId und spiegelte sie in der Quelle wider.

aWS050268 - コピー.JPG

In Schwierigkeiten sein

** 13.09.2018 Nachtrag Die folgenden Probleme wurden in Appium 1.9.0 behoben: Umarmen: **

Wenn Sie ein nicht vorhandenes Element angeben, tritt in der angegebenen Zeit kein Fehler auf und warten Sie mindestens 10 Minuten.

Wenn Sie ein Element angeben, das nicht vorhanden ist, tritt in der angegebenen Zeit kein Fehler auf und warten Sie mindestens 10 Minuten

Lassen Sie uns dies untersuchen, indem Sie die Ausgabemethode des Protokolls ändern.

Argumente beim Start von Appium
appium --nodeconfig NodeConfigAppium.json --log "C:/Users/XXXXX/Desktop/node/log.txt" --log-level "info" --log-timestamp --local-timezone
Ausgabeprotokoll
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
● Sie sollten das Ergebniselement des Rechners erhalten
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
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
● Sie sollten ein Element erhalten, das nicht vorhanden ist
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."}}
↑↑↑ Die Rückgabe von POST ↓↓↓ dauert 10 Minuten
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
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

Das Posten dauert 10 Minuten, nachdem das nicht vorhandene Element mit WinAppDriver abgerufen und 404 ... Starten Sie den Windows-Anwendungstreiber direkt und überprüfen Sie, um das Appium-Problem zu isolieren (Einstellung?).

Argumente beim Starten von WinAppDriver

Mit Argumenten angepasst, damit es ausgeführt werden kann, ohne die Quelle zu ändern. Ich habe irgendwo gesehen, dass ich es mit Administratorrechten ausführen musste.

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

Ergebnis ... ** Es ist bald vorbei! ** ** ** Der Fehler tritt auch mit NoSuchElementException ordnungsgemäß wieder auf. Wenn Sie es nicht über Appium lösen können, sollten Sie WinAppDriver direkt starten.

** 13.09.2018 Nachtrag Und ich mache verschiedene Dinge und neue Probleme ...: müde: **

Wenn mehrere Apps über den Windows-Anwendungstreiber (WinAppDriver.exe) auf einem Computer gestartet werden, werden alle Apps, die mit dem Beenden ausgeführt werden, getrennt.

WinAppDriver.exe wird über Appium aufgerufen, aber der Prozess von WinAppDriver.exe ist sogar für mehrere Apps eins, und wenn quit beendet wird, scheint die exe weg zu sein.

Wenn Sie WinAppDriver.exe direkt starten, wird der Prozess von WinAppDriver.exe auch nach dem Beenden nicht ausgeblendet. (Ich frage mich, ob das der Fall ist) Also funktioniert es gut.

Wenn es geschlossen ist, wird der Treiber auch dann als nicht von Selenium Grid freigegeben behandelt, wenn der Prozess weiterhin ausgeführt wird. Sie müssen also warten, bis das Zeitlimit überschritten ist.

Ich habe beschlossen, die Anzahl der Sitzungen, die auf einem Computer gestartet werden können, auf eine zu beschränken, es sei denn, es gibt eine Aktion wie das Starten von WinAppDriver.exe in mehreren Prozessen in Appium.

Recommended Posts

Erstellen Sie eine Windows-Anwendungstestumgebung mit Selenium Grid, Appium und Windows Application Driver
Erstellen Sie eine E2E-Testumgebung mit Selenium (Java).
Erstellen Sie mit Docker CE für Windows eine Webanwendungsentwicklungsumgebung, die Java, MySQL und Redis verwendet
Ruby ① Erstellen einer Windows-Umgebung
Erstellen Sie mit Docker eine Node.js-Umgebung
Erstellen Sie mit Pleiades 4.8 eine Tomcat 8.5-Umgebung
Erstellen Sie eine Webanwendung mit Javalin
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
[Kopieren und Einfügen] Erstellen Sie mit Docker Compose Part 2 eine Laravel-Entwicklungsumgebung
Erstellen Sie eine Bulletin-Board-API mit Zertifizierung und Autorisierung mit Rails 6 # 1 Environment Construction
[Windows] [IntelliJ] [Java] [Tomcat] Erstellen Sie mit IntelliJ eine Umgebung für Tomcat 9
Erstellen Sie eine Laravel / Docker-Umgebung mit VSCode devcontainer
Erstellen Sie mit Docker schnell eine WordPress-Entwicklungsumgebung
Erstellen und testen Sie Java + Gradle-Anwendungen mit Wercker
[Win10] Erstellen Sie eine JSF-Entwicklungsumgebung mit NetBeans
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
Erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
Installieren Sie Ubuntu 20.04 in der virtuellen Box unter Windows 10 und erstellen Sie eine Entwicklungsumgebung mit Docker
[Rails] [Docker] Kopieren und Einfügen ist in Ordnung! So erstellen Sie eine Rails-Entwicklungsumgebung mit Docker
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
Erstellen Sie eine Ruby-Debug-Umgebung mit VS Code von Windows 10
[Hinweis] Erstellen Sie eine Python3-Umgebung mit Docker in EC2
Erstellen Sie mit Docker-Introduce Bootstrap und Font Awesome with Webpack- eine lokale Entwicklungsumgebung für Rails-Tutorials.
Bereitstellen einer Java-Umgebung mit Windows Subsystem für Linux (WSL)
Erstellen Sie mit IntelliJ IDEA eine Entwicklungsumgebung "Spring Thorough Introduction"
Erstellen Sie mit VirtualBox eine virtuelle CentOS 8-Umgebung auf Ihrem Mac
Erstellen Sie eine Bulletin-Board-API mit Autorisierung in Rails 6 # 11. Benutzermodelltest und Validierung hinzugefügt
Erstellen einer Docker-Umgebung mit WSL
Erstellen Sie eine Datenverarbeitungsumgebung mit Google Cloud DataFlow + Pub / Sub
Verfahren zum Erstellen einer Rails-Anwendungsentwicklungsumgebung mit Docker [Rails, MySQL, Docker]
Erstellen Sie eine Entwicklungsumgebung, in der die Haltepunkte von Ruby on Rails unter Windows funktionieren
Erstellen Sie eine Browsertestumgebung mit Capybara in der Docker-Entwicklungsumgebung
Erstellen einer Haskell-Umgebung mit Docker + VS-Code unter Windows 10 Home
Durchsuchen Sie Java und MySQL PATH mit Umgebungsvariablen [Windows-Version]
Erstellen Sie mit Docker Compose eine Entwicklungsumgebung für Django + MySQL + nginx
Schritte zum Erstellen einer Ruby on Rails-Entwicklungsumgebung mit Vagrant
Ich habe versucht, eine Anwendung für maschinelles Lernen mit Dash (+ Docker) Teil 1 ~ Umgebungskonstruktion und Funktionsprüfung ~ zu erstellen
# 1 [Anfänger] Erstellen Sie eine Webanwendung (Website) mit Eclipse aus Wissen 0. "Lassen Sie uns eine Umgebung zum Erstellen von Web-Apps erstellen"