[Java] Eine kurze Einführung in Integrationstests mit Selenide + Chrome Driver <Aktualisiert im Mai 2020>

Einführung

Nachdem Sie die Funktion der Anwendung entwickelt haben, führen Sie einen ** Integrationstest (Integrationstest) ** durch, um zu sehen, wie sie mit anderen Funktionen gut funktioniert und wie sie sich verhält. Lassen Sie uns dieses Mal einen einfachen Integrationstest einer in Java entwickelten Webanwendung automatisieren, anstatt visuell (es ist natürlich) ** Selenide + [ChromeDriver]( Ich werde mit https://chromedriver.chromium.org) ** arbeiten. スクリーンショット 2020-05-22 0.38.50.png

Entwicklungsumgebung

macOS Catalina 10.15.4 IntelliJ IDEA 2018.3.6 Google Chrome 81.0.4044.138 Selenide 5.2.2 aShot 1.5.3

Vorbereitung

Beschreiben Sie die Bibliothek, die in pom.xml verwendet werden soll.

pom.xml

<dependency>
    <groupId>com.codeborne</groupId>
    <artifactId>selenide</artifactId>
    <version>5.2.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>ru.yandex.qatools.ashot</groupId>
    <artifactId>ashot</artifactId>
    <version>1.5.3</version>
</dependency>

Laden Sie dann den Treiber herunter, um den Chrome-Treiber zu verwenden. (Link unten) https://chromedriver.chromium.org

  1. Klicken Sie auf Downloads スクリーンショット 2020-05-22 0.20.42.png
  2. Wählen Sie den Treiber gemäß ** Chrome-Version ** (diesmal 81.0.4044.138). スクリーンショット 2020-05-22 0.30.41.png
  3. Wählen Sie unter MacOS mac64.zip aus, laden Sie es herunter und speichern Sie es an einem beliebigen Ort (** merken Sie sich den Pfad ** für die spätere Verwendung). スクリーンショット 2020-05-22 0.32.41.png

Grundlegende Konfiguration

・ Chrome-Treiberpfadeinstellung -Erstellen einer ChromeDriver-Instanz Jetzt können Sie Chrome automatisch mit Selenide bedienen.

System.setProperty("webdriver.chrome.driver", "<Fahrerpfad>/chromedriver");
WebDriver webDriver = new ChromeDriver();

Schließen Sie das Fenster, indem Sie in die letzte Zeile close () schreiben.

webDriver().close();

Grundbetrieb

Die für den Test erforderlichen grundlegenden Vorgänge werden nachstehend erläutert.

Übergang zum Link

webDriver.get("https://hoge.com/");

Es gibt eine andere Methode.

webDriver.navigate().to("https://hoge.com/");

[Ergänzung] Sie können sich get () und navigieren (). To () als fast dieselbe Methode vorstellen. Der Unterschied zwischen beiden ergibt sich bei der Arbeit mit SPAs (Single-Page-Anwendungen). In SPA aktualisiert get () die Seite und die Übergänge, während Sie mit navigieren (). To () -Übergängen, ohne die Seite zu aktualisieren. get () speichert weder den Browserverlauf noch Cookies, navigieren Sie (). In SPA können Sie mit navigieren (). To () Tests durchführen, die näher am menschlichen Betrieb liegen.

Zurück vorwärts

Rückkehr

webDriver.navigate().back();

mach weiter

webDriver.navigate().forward();

aktualisieren

aktualisieren

webDriver.navigate().refresh();

Element abrufen

HTML-ID-Element abrufen

webDriver.findElement(By.id("hoge"));

Sie können das Klassenelement angeben, es wird jedoch empfohlen, die ID abzurufen, da das Erfassungsergebnis häufig nicht eindeutig ist.

Klicken Sie auf die Schaltfläche

Holen Sie sich das HTML-ID-Element der Schaltfläche und klicken Sie auf

webDriver.findElement(By.id("hoge")).click();

Formular ausfüllen

Holen Sie sich das HTML-ID-Element des Formulars und geben Sie es mit sendkeys () ein.

webDriver.findElement(By.id("hoge")).sendKeys("Hogehoge");

Das Verhalten wird zeichenweise eingegeben, als ob es tatsächlich auf dem Bildschirm eingegeben würde.

Löschen Sie den im Formular eingegebenen Wert

Holen Sie sich das HTML-ID-Element des Formulars und löschen Sie es mit clear ()

webDriver.findElement(By.id("hoge")).clear();

Dies ist praktisch, wenn Sie die vorhandenen Eingabeinhalte im Wertaktualisierungsprozess löschen möchten.

Mache ein Bildschirmfoto

Die Seitengröße wird minimiert, sodass der gesamte Bildschirm in der ersten Zeile angezeigt werden kann. Wenn Sie es nicht minimieren, passt Chrome die Fenstergröße automatisch an, sodass der gesamte Bildschirm nicht gut aussieht. Der Pfad des Bildes wird in der dritten Zeile angegeben.


webDriver.manage().window().setPosition(new Point(-2000, 0));

Screenshot screenshot = new AShot()
        .shootingStrategy(ShootingStrategies.viewportPasting(100))
        .takeScreenshot(webDriver);

ImageIO.write(screenshot.getImage(), "PNG", new File("<Bildspeicherpfad>/<Bildname>.png "));

(Bonus) Beispiel für einen Integrationstestcode

** 【Testszenario】 **

  1. Rufen Sie den Anmeldebildschirm der Hoge-Anwendung auf
  2. Geben Sie die E-Mail-Adresse und das Passwort des Administratorbenutzers in das Formular ein
  3. Klicken Sie auf die Schaltfläche Anmelden
  4. Klicken Sie in der Beitragsliste auf die Schaltfläche Bearbeiten für Beitrag 1
  5. Löschen Sie den Postnamen im Formular
  6. Geben Sie als Beitragsnamen Beitrag 2 ein
  7. Klicken Sie auf die Schaltfläche Aktualisieren
  8. Screenshot des Bildschirms nach Abschluss des Updates

System.setProperty("webdriver.chrome.driver", "hoge/chromedriver");
WebDriver webDriver = new ChromeDriver();

webDriver.get("https://hoge.com/home");
webDriver.findElement(By.id("email")).sendKeys("[email protected]");
webDriver.findElement(By.id("password")).sendKeys("pass");
webDriver.findElement(By.id("loginButton")).click();
webDriver.navigate().to("https://hoge.com/edit?topicId=1");
webDriver.findElement(By.id("topicName")).clear();
webDriver.findElement(By.id("topicName")).sendKey("Beitrag 2");
webDriver.findElement(By.id("updateButton")).click();
webDriver.manage().window().setPosition(new Point(-2000, 0));
Screenshot screenshot = new AShot()
    .shootingStrategy(ShootingStrategies.viewportPasting(100))
    .takeScreenshot(webDriver);
ImageIO.write(screenshot.getImage(), "PNG", new File("hoge/screenshot.png "));

webDriver.close();

abschließend

Selbst wenn ich mit Selenid suche, kommen Informationen zu Python anstelle von Java heraus, also habe ich sie zusammengefasst. Das Integrationstestbeispiel ist ein imaginärer Test einer imaginären Webanwendung. Vielen Dank.

Referenz

Unterschied zwischen webdriver.get () und webdriver.navigate ()Selenium-Kurzreferenz

Recommended Posts

[Java] Eine kurze Einführung in Integrationstests mit Selenide + Chrome Driver <Aktualisiert im Mai 2020>
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
[Persönliches Memo] Interaktion mit dem Zufallszahlengenerator in Java
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Selenium Web Driver mit Benutzerdatenverzeichnis, das im kopflosen Chrome-Modus zum Absturz gebracht wurde
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Einführung in Algorithmen mit Java-Suche (Tiefenprioritätssuche)
[Einführung in Java] So schreiben Sie ein Java-Programm
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
Einführung in Algorithmen mit Java --Search (Breitenprioritätssuche)
Sogar in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (Javassist zweite Abkochung)
Für meinen Sohn, der angefangen hat, Java mit "Einführung in Java" in einer Hand zu studieren
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 (Black Magic) ausgeben.
Zwei Möglichkeiten, einen Thread in Java + @ zu starten
Erstellen Sie eine CSR mit erweiterten Informationen in Java
Einführung in Algorithmen mit Java --Search (Bit Full Search)
So zeigen Sie eine Webseite in Java an
Code zum Escapezeichen von JSON-Zeichenfolgen in Java
Versuchen Sie, ein Bulletin Board in Java zu erstellen
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
Ich habe versucht, den Block mit Java zu brechen (1)
Speichern von Dateien mit der angegebenen Erweiterung unter dem in Java angegebenen Verzeichnis in der Liste
[Java] Einführung in Java
Einführung in Java
Aufrufen von Funktionen in großen Mengen mit Java Reflection
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
Senden Sie einen Job an AWS Batch mit Java (Eclipse)
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
So erstellen Sie einen Daten-URI (base64) in Java
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
[So fügen Sie ein Video mit Rails in haml ein]
Implementieren Sie Singleton mit Enum schnell in Java
Ausgabe true mit if (a == 1 && a == 2 && a == 3) in Java (Invisible Identifier)
Ein kurzer Überblick über Java, das in Klasse 3 gelernt wurde
So konvertieren Sie eine Datei in ein Byte-Array in Java
Versuchen Sie, ein eingeschränktes FizzBuzz-Problem in Java zu lösen
[Java] So unterbrechen Sie eine Zeile mit StringBuilder
Wenn Sie Java-Bibliothekstests mit Spock in mehreren Modulen mit Gradle in Android Studio 3 implementieren möchten