[JAVA] Untersuchen Sie HTML-Elemente und erstellen Sie eine Seitenklasse (mit Selenide).

Einführung

Erstellen einer E2E-Testumgebung mit Selen (Java)

Obwohl ich es gebaut habe, werde ich wahrscheinlich einen schweren Lift bekommen, wenn ich gefragt werde, ob Sie eine Seitenklasse erstellen möchten. Daher werde ich aufzeichnen, wie eine Seitenklasse so einfach wie möglich erstellt werden kann. Nach meiner Erfahrung sage ich wahrscheinlich viel: unschuldig:

Identifizieren Sie das Element, mit dem Sie arbeiten möchten (z. B. einen CSS-Selektor).

In der Windows-Version erklärt. Verwenden Sie die Entwicklertools von Chrome.

  1. Zeigen Sie den Bildschirm an, den Sie überprüfen möchten aWS050241.JPG

  2. Drücken Sie F12, um die Entwicklertools anzuzeigen aWS050242.JPG

  3. Klicken Sie auf die Schaltfläche Auswählen und wählen Sie das Element aus, das Sie bedienen möchten aWS050243.JPG

  4. Klicken Sie mit der rechten Maustaste auf die invertierte HTML-Quelle und wählen Sie Kopieren - Kopierauswahl, um Informationen wie "#q" zu kopieren. aWS050244.JPG

Versuchen Sie, eine Seitenklasse zu erstellen

Die folgende Seitenklasse wird unter Berücksichtigung der zuvor untersuchten Elemente erstellt.

Google.java


package page;

import static com.codeborne.selenide.Selenide.*;

import org.openqa.selenium.WebDriver;

public class Google extends PageBase {

    public static final String _url = "https://www.google.co.jp/webhp";

    public Google(WebDriver webDriver) {
        super(webDriver);
    }

    private String _id_search = "#lst-ib";

    // ****************************************
    //Suchseite
    // ****************************************

    public Google __Suchworteingabe(String s) {
        $(_id_search).setValue(s);
        return this;
    }

    public Google __Mach eine Suche() {
        $(_id_search).submit();
        return this;
    }
}

Der Test ist der folgende Code.

GoogleTest.java


package test;

import org.junit.Test;

import com.htmlhifive.pitalium.core.model.ScreenshotArgument;

import page.Google;

public class GoogleTest extends TestBase {

    @Test
    public void OK() throws Exception {

        driver.get(Google._url);
        Google page = new Google(driver);

        page.__Suchworteingabe("test")
            .__Mach eine Suche();

        ScreenshotArgument arg = ScreenshotArgument.builder("result").addNewTarget().build();
        assertionView.verifyView(arg);
    }
}

Erstellen Sie eine Seitenklasse, die Klickmenüs verarbeiten kann

Fügen Sie nach dem Anzeigen der Suchergebnisse eine Methode hinzu, die durch Klicken auf das Tool ausgeführt werden kann. Die Überprüfung der Elemente ist dieselbe wie zuvor.

Selen scheint zu schnell zu wirken und kann Fehler wie fehlende Elemente verursachen. Es ist stabil, wenn Sie nach dem Klicken auf das angezeigte Element warten.

Google.java


package page;

import static com.codeborne.selenide.Condition.*;
import static com.codeborne.selenide.Selenide.*;

import java.util.Iterator;

import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;

import com.codeborne.selenide.SelenideElement;

public class Google extends PageBase {

    public static final String _url = "https://www.google.co.jp/webhp";

    public Google(WebDriver webDriver) {
        super(webDriver);
    }

    private String _id_search = "#lst-ib";

    // ****************************************
    //Suchseite
    // ****************************************

    public Google __Suchworteingabe(String s) {
        $(_id_search).setValue(s);
        return this;
    }

    public Google __Mach eine Suche() {
        $(_id_search).submit();
        return this;
    }

    // ****************************************
    //Suchergebnisseite (das Folgende ist eine andere Klasse)
    //Ursprünglich "__Mach eine Suche()Geben Sie die Suchergebnis-Seitenklasse mit der Methode zurück
    // ****************************************

    public Google __Klicken Sie auf das Werkzeug() {
        $("#hdtb-tls").click();
        return this;
    }

    public Google __Werkzeug$Klicken Sie auf den Punkt() {
        //Überprüfen Sie, ob das Menü nach Auswahl des Werkzeugs angezeigt wird
        if (!$("#hdtbMenus").isDisplayed()) {
            __Klicken Sie auf das Werkzeug();
        }
        //Warten Sie 60 Sekunden, bis das Element nach der Auswahl angezeigt wird
        $("#hdtbMenus").waitUntil(appear, 60000);

        $("#hdtbMenus > div > div:nth-child(5) > div").click();

        return this;
    }

    public Google __Werkzeug$Zeitraum$Klicken Sie innerhalb von 1 Stunde() {
        return __Werkzeug$Zeitraum$Klicken Sie auf das angegebene Zeichen("Innerhalb einer Stunde");
    }

    public Google __Werkzeug$Zeitraum$Klicken Sie innerhalb von 1 Jahr() {
        return __Werkzeug$Zeitraum$Klicken Sie auf das angegebene Zeichen("Innerhalb von 1 Jahr");
    }

    private Google __Werkzeug$Zeitraum$Klicken Sie auf das angegebene Zeichen(String text) {
        //Überprüfen Sie, ob das Periodenmenü angezeigt wird
        if (!$("#hdtbMenus > div > ul.hdtbU.hdtb-mn-o").isDisplayed()) {
            __Werkzeug$Klicken Sie auf den Punkt();
        }
        //Warten Sie 60 Sekunden, bis das Element nach der Auswahl angezeigt wird
        $("#hdtbMenus > div > ul.hdtbU.hdtb-mn-o").waitUntil(appear, 60000);

        return matchTextClick(text, $$("#hdtbMenus > div > ul.hdtbU.hdtb-mn-o > li").iterator());
    }

    private Google matchTextClick(String text, Iterator<SelenideElement> seItr) {

        boolean ckickFlg = false;

        while (seItr.hasNext()) {
            SelenideElement se = seItr.next();
            if (text.equals(se.getText())) {
                se.click();
                ckickFlg = true;
                break;
            }
        }

        if (!ckickFlg) {
            throw new NoSuchElementException("Click error:" + text);
        }

        return this;
    }
}

Der Test ist der folgende Code.

GoogleTest.java


package test;

import org.junit.Test;

import com.htmlhifive.pitalium.core.model.ScreenshotArgument;

import page.Google;

public class GoogleTest extends TestBase {

    @Test
    public void OK() throws Exception {

        driver.get(Google._url);
        Google page = new Google(driver);

        page.__Suchworteingabe("test")
            .__Mach eine Suche();

        ScreenshotArgument arg = ScreenshotArgument.builder("result1").addNewTarget().build();
        assertionView.verifyView(arg);

        page.__Werkzeug$Zeitraum$Klicken Sie innerhalb von 1 Stunde();
//Wenn Sie den Bildschirmzustand perfekt verstehen können, ist die folgende Beschreibung schneller
//        page.__Klicken Sie auf das Werkzeug()
//            .__Werkzeug$Klicken Sie auf den Punkt()
//            .__Werkzeug$Zeitraum$Klicken Sie innerhalb von 1 Stunde();


        arg = ScreenshotArgument.builder("result2").addNewTarget().build();
        assertionView.verifyView(arg);

        page.__Werkzeug$Zeitraum$Klicken Sie innerhalb von 1 Jahr();


        arg = ScreenshotArgument.builder("result3").addNewTarget().build();
        assertionView.verifyView(arg);
    }
}

Erstellen wir eine Seitenklasse, die Bildschirme mit separaten Frames verarbeitet

Es scheint, dass Sie Seiten mit separaten Frames wechseln müssen. Ich denke, es ist besser, dieses Steuerelement auch mit der Page-Klasse abzudecken. (Bitte unterrichten Sie, ob es einen Weg gibt, ohne zu wechseln)

18/04/23 geändert Ich verstehe, was Sie kommentiert haben, aber ich konnte es aufgrund mangelnder Fähigkeiten nicht im Code wiedergeben: schreien: Ich wünschte, ich könnte eine ähnliche Beschreibung in der Methode "__Enter in Punkt 1" schreiben, aber ich kann mir das nicht vorstellen.

FrameSample.java


package page;

import static com.codeborne.selenide.Selenide.*;

import org.openqa.selenium.WebDriver;

import com.codeborne.selenide.SelenideElement;
import com.codeborne.selenide.WebDriverRunner;

public class FrameSample extends PageBase {

    public static final String _url = "https://";

    public FrameSample(WebDriver webDriver) {
        super(webDriver);
    }

    /**Geben Sie das Element ein, das im Standardrahmen vorhanden ist*/
    public FrameSample __Geben Sie in Punkt 1 ein(String s) throws InterruptedException {
        $("#in1").setValue(s);
        return this;
    }

    /**Eingabe in ein Element, das in einem anderen Frame vorhanden ist*/
    public FrameSample __Geben Sie in Punkt 2 ein(String s) throws InterruptedException {
        switcFrame($(".iframe"));
        $("#in2").setValue(s);
        switchDefaultFrame();
        return this;
    }

    /***
     *Zum Standardbild wechseln
     * @throws InterruptedException
     */
    private void switchDefaultFrame() throws InterruptedException{
        //Da die Verarbeitung nicht stabil ist, habe ich Wait vorerst in den Frame-Wechsel eingefügt
        WebDriverRunner.getWebDriver().switchTo().defaultContent();
        Thread.sleep(2000);
    }

    /***
     *Wechseln Sie zu einem anderen Frame
     * @Element des Parameterrahmens
     * @throws InterruptedException
     */
    private void switcFrame(SelenideElement se) throws InterruptedException{
        //Da die Verarbeitung nicht stabil ist, habe ich Wait vorerst in den Frame-Wechsel eingefügt
        WebDriverRunner.getWebDriver().switchTo().frame(se);
        Thread.sleep(2000);
    }
}

Recommended Posts

Untersuchen Sie HTML-Elemente und erstellen Sie eine Seitenklasse (mit Selenide).
Ein Memo zum Erstellen eines einfachen Formulars, das nur HTML und CSS in Rails 6 verwendet
Erstellen Sie eine API mit Retrofit2, Okhttp3 und Gson (Java).
[ruby] Erstellen Sie die DHT11 / 22-Klasse mithilfe des Datenblattes von Grund auf neu