[JAVA] Zusammenfassung der Auswahl von Elementen in Selen

Dies ist eine Zusammenfassung der Auswahl von HTML-Elementen mit den Methoden findElement und findElements von Selenium.

Ich teste häufig nicht anpassbare Websites persönlich (aus Gründen wie der automatischen Generierung) und habe die Muster zusammengefasst, die ich hauptsächlich für die Elementauswahl beim Übergang zum nächsten Bildschirm verwendet habe. ..

Die Screenshots in jedem Abschnitt zeigen die Beispielsite oben und die Elemente unten mit der Validierungsfunktion von Chrome (Entwicklertools). Ich habe versucht, es so weit wie möglich zu formulieren, aber es gibt einige Korrekturen, z. B. das Kürzen der Breite für Qiita und das Löschen der tatsächlichen Daten.

1) Suche nach ID-Attribut

Beispiel, das nach dem ID-Attribut durchsucht werden kann:

image.png

Wenn das gewünschte HTML-Element ein ID-Attribut hat, geben Sie es einfach an und suchen Sie.

driver.findElement(By.id("service_category_cloud_Expert")).click();

Alle diese Websites sind einfach zu testen (oder besser gesagt, Sie benötigen diesen Artikel nicht).

2) Suche nach Namensattribut

Beispiel, das nach dem Namensattribut durchsucht werden kann:

image.png

Das Namensattribut ist ebenfalls grundsätzlich eindeutig. Geben Sie es einfach an.

driver.findElement(By.name("Submit")).click();

3) Suche nach Klassenattribut

Ein Beispiel für die Suche mit einem eindeutigen Klassenattribut:

image.png

Wenn erwartet wird, dass nur ein gewünschtes Klassenattribut vorhanden ist, kann es mit findElement () sowie den Attributen id und name abgerufen werden. In diesem Beispiel wird erwartet, dass es nur eine Schaltfläche "Weiter" (btn_next-Klasse) auf der Site gibt. Wir erhalten sie also so, wie sie ist, indem wir die Klasse angeben. Wenn es mehrere Elemente mit derselben Klasse gibt, wird das erste zurückgegeben.

driver.findElement(By.className("btn_next")).click();
// driver.findElements(By.className("btn_next")).get(0).click();Gleich wie

Beispiel für mehrere Attribute derselben Klasse:

image.png

Wenn mehrere vorhanden sind, ist eine zusätzliche Verarbeitung erforderlich, um sie in die Liste aufzunehmen und den gewünschten Link darin zu finden. In diesem Beispiel wird ein Attribut namens "aria-label" verwendet, um das zu klickende Element zu identifizieren.

List<WebElement> elements = driver.findElements(By.className("mv-tile"));
WebElement targetElement = null;
for (WebElement element: elements ) {
    if (element.getAttribute("aria-label").contains("Publickey")) {
        targetElement = element;
    }
}
targetElement.click(); //Wenn Sie auf eine if-Anweisung klicken, wird eine Ausnahme ausgelöst, wenn sich dahinter ein nicht zutreffendes Element befindet

4) Suche nach Titelattribut

Von hier aus wird es ein von xpath angegebenes Muster sein.

Beispiel, das nach dem Titelattribut durchsucht werden kann:

image.png

Suchen Sie wie folgt nach Tags mit einem bestimmten Titel. In diesem Beispiel suchen wir nach einem Tag mit dem Titel "Öffentlicher Bericht".

driver.findElement(By.xpath("//a[@title='Öffentlicher Bericht']")).click();

Wenn der Titel lang ist, können Sie auch eine Teilsuche mit enthält durchführen.

driver.findElement(By.xpath("//a[contains(@title,'Teil eines langen Titels')]")).click();

Wenn das title-Attribut festgelegt ist, können andere Tags auf die gleiche Weise durchsucht werden. Für ein Eingabe-Tag mit einem bestimmten Titel:

driver.findElement(By.xpath("//input[@title='Name']")).sendKeys("Tesuto Ichiro");
driver.findElement(By.xpath("//input[contains(@title,'Teil des Titels')]")).sendKeys("Text Eingabe");

5) Suche nach Wertattribut

Beispiel, das nach Wertattribut durchsucht werden kann:

image.png

Das value-Attribut wird auch in Kombination mit dem Tag und dem Titel gesucht.

driver.findElement(By.xpath("//input[@value='000200']")).click();

6) Suche nach alt Attribut

Beispiel, das nach dem alt-Attribut durchsucht werden kann:

image.png

Das alt-Attribut wird auch in Kombination mit dem Tag gesucht. Da alt oft lang ist, denke ich, dass häufig partielle Übereinstimmungen verwendet werden.

driver.findElement(By.xpath("//a[contains(@alt,'Kontaktiere uns')]")).click();

Eine genaue Übereinstimmung ist möglich, wenn auch nicht so oft.

driver.findElement(By.xpath("//input[@alt=\"Anmeldung\"]")).click();

7) Suche nach Tag

Von hier aus ist es ein Muster, nach HTML-Strukturen wie Tags zu suchen.

Beispiele, die nach Tags durchsucht werden können:

68747470733a2f2f71696974612d696d616782e706e67.png

Der Vorgang, Elemente mit demselben Tag in einer Liste abzurufen und den gewünschten Link daraus zu finden, entspricht 3) mehreren Klassen. In diesem Beispiel wird es mit dem Attribut "alt" angegeben.

List<WebElement> elements = driver.findElements(By.tagName("img"));
WebElement targetElement = null;
for (WebElement element : elements) {
    if (element.getAttribute("alt").equals("Inhouse-Geschäft")) {
        targetElement = element;
    }
}
targetElement.click();

In diesem Beispiel ist die Verengungsbedingung alt, sodass Sie sie auch durch 6) alt-Attributnotation erhalten können. (Abhängig von der Kombination von Tags und Attributen ist es schwierig zu entscheiden, welches verwendet werden soll.)

driver.findElement(By.xpath("//img[@alt=\"Inhouse-Geschäft\"]")).click();

Wenn Sie nur ein Tag haben, können Sie auch mit findElement suchen, aber ich denke, das ist selten.

driver.findElement(By.tagName("img")).click();
// driver.findElements(By.tagName("img")).get(0).click();Gleich wie

8) Pfadangabe (Tabellensuche)

Beispiel für die Tabellensuche:

image.png

Wenn die Tabelle nur eine generische Klasse hat, rufen Sie diese mit dem Pfad der Tabelle ab. In diesem Beispiel enthält der angezeigte Inhalt Zeilenumbrüche und Kommentare. Daher wird die indexOf-Methode verwendet, um nach der gewünschten Zeichenfolge zu suchen.

List<WebElement> tableElements = driver.findElements(By.xpath("//table[@class='table1']/tbody/tr/td/a"));
WebElement targetElement = null;
for(WebElement element : tableElements) {
    if (element.getText().indexOf("PRODUCT002") != -1) {
        targetElement = element;
    }
}
targetElement.click();

9) Pfadangabe (Listensuche)

Listensuchbeispiel:

image.png

Ähnlich wie in der Tabelle ist der Ablauf Pfadsuche → Textsuche innerhalb jedes Elements.

List<WebElement> listElements = driver.findElements(By.xpath("//ul[@class='nav navbar-nav navbar-right']/li/a"));
WebElement targetElement = null;
for(WebElement element : listElements ) {
    if (element.getText().indexof("PRODUCT002") > 1) {
        targetElement = element;
    }
}
targetElement.click();

10) Suche nach Etikett

Beispiele, die nach Label durchsucht werden können:

image.png

Ein Beispiel für die Suche nach Beschriftungen in Kombination mit dem Attribut for lautet wie folgt.

driver.findElement(By.xpath("//label[@for='mng_group_mail']")).click();

Dies ist ein Muster, bei dem das Etikett lang und teilweise übereinstimmt. Die Syntax ist dieselbe wie 4) -6).

driver.findElement(By.xpath("//label[contains(@for,'Teil der Beschreibung')]")).click();

11) Suche nach linkText

Von hier aus ist es ein Muster, nach dem angezeigten Text zu suchen.

Es ist ein letzter Ausweg (?) Um fortzufahren, wenn keine durchsuchbaren Attribute vorhanden sind und die Tag-Struktur automatisch generiert wird, aber ich habe das Gefühl, nicht zu wissen, was ich teste.

linkText Suchbeispiel:

image.png

Wenn Sie den Text nach exakter Übereinstimmung durchsuchen möchten, ist dies wie folgt.

driver.findElement(By.linkText("sparen")).click();

Beispiele für Text mit Zeilenumbrüchen und Kommentaren;

image.png

Machen Sie eine teilweise Übereinstimmung mit PartialLinkText.

driver.findElement(By.partialLinkText("VA User1")).click();

12) Suche nach Text

Beispiel für eine Textsuche:

image.png

Wenn Sie es selbst mit linkText nicht erhalten können (z. B. wenn der Vorgang zum Zeitpunkt des Drückens in Javascript beschrieben ist), holen Sie es sich mit Text und drücken Sie darauf.

driver.findElement(By.xpath("//*[text()=\"PRINT\"]")).click();

Andere (Ergänzung usw.)

--Das Beispiel verwendet die Klickmethode, aber im IE können Sie möglicherweise nicht fortfahren, ohne die sendkeys-Methode zu verwenden. Eigentlich denke ich, dass die Verarbeitung für jeden Browser wie folgt aufgeteilt wird.

if (browser.equals(_BROWSER_IE) || browser.equals(_BROWSER_EDGE)) {
    driver.findElement(By.xpath("//input[@value='OK']")).sendKeys(Keys.ENTER);
} else {
    driver.findElement(By.xpath("//input[@value='OK']")).click();
}

Recommended Posts

Zusammenfassung der Auswahl von Elementen in Selen
Zusammenfassung der Implementierung von Standardargumenten in Java
[java] Zusammenfassung des Umgangs mit char
Zusammenfassung zum Schreiben von Anmerkungsargumenten
[Java] [Maven3] Zusammenfassung der Verwendung von Maven3
[Webpacker] Zusammenfassung der Installation von Bootstrap und jQuery in Rails 6.0
[java] Zusammenfassung des Umgangs mit Zeichenketten
Zusammenfassung zum Erstellen von selbst erstellten JSF-Tags
[Swift] Zusammenfassung zum Löschen von Elementen aus einem Array (persönliches Memo)
[Java] Zusammenfassung, wie Lambda-Ausdrücke weggelassen werden
[Rails] Verwendung von Auswahlfeldern in Ransack
Verwendung von JQuery in Rails 6 js.erb
So fügen Sie die Verarbeitung mit einer beliebigen Anzahl von Elementen in die iterative Verarbeitung in Ruby ein
[Swift] So ermitteln Sie die Anzahl der Elemente in einem Array (Super Basic)
Verwendung von CommandLineRunner im Spring Batch von Spring Boot
Zusammenfassung der Java-Kommunikations-API (1) Verwendung von Socket
So testen Sie den Bildschirm zum Hochladen von Dateien mit Spring + Selenium
Zusammenfassung der Java-Kommunikations-API (3) Verwendung von SocketChannel
Zusammenfassung der Java-Kommunikations-API (2) Verwendung von HttpUrlConnection
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
So zeigen Sie das Auswahlfeld von time_select alle 30 Minuten an
So wählen Sie ein bestimmtes Datum anhand des Codes im FS-Kalender aus
Hinzufügen von Elementen ohne Angabe der Länge des Arrays
So implementieren Sie eine einzeilige Anzeige von TextView in der Android-Entwicklung
So leiten Sie den letzten Tag des Monats in Java ab
So ändern Sie die Hintergrundfarbe der Navigationsleiste usw. in der Swift-Benutzeroberfläche
So installieren Sie die JavaScript-Bibliothek "select2", mit der mehrere Auswahlen von selectbox in Rails 6.0 in Mode kommen
Wie man Lombok im Frühling benutzt
So finden Sie May'n in XPath
So blenden Sie die Bildlaufleiste in WebView aus
So führen Sie JUnit in Eclipse aus
Wie man in Ruby auf unbestimmte Zeit iteriert
Wie man Ant in Gradle ausführt
Wie man die Programmierung in 3 Monaten beherrscht
Wie man JAVA in 7 Tagen lernt
So erhalten Sie Parameter in Spark
Verwendung von setDefaultCloseOperation () von JFrame
So installieren Sie Bootstrap in Ruby
Verwendung von InjectorHolder in OpenAM
So installieren Sie jQuery in Rails 6
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
So setzen Sie Lombok in Eclipse
So schreiben Sie leicht verständlichen Code [Zusammenfassung 3]
So verketten Sie Zeichenfolgen mit Java
So installieren Sie Swiper in Rails
[Sprint Boot] Verwendung der drei in org.springframework.jdbc.core.namedparam definierten Arten von SqlParameterSource
Zusammenfassung der Probleme, bei denen ich mich nicht bei firebase anmelden konnte
Wie schreibe ich Ruby, wenn in einer Zeile Zusammenfassung vom Anfänger
So löschen Sie große Datenmengen in Rails und Bedenken
So erhalten Sie die ID des automatisch inkrementierten PRIMAY-Schlüssels in MyBatis
So geben Sie eine Liste von Zeichenfolgen in JSF als durch Kommas getrennte Zeichenfolgen aus
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
So ermitteln Sie die Länge einer Audiodatei mit Java
So erhöhen Sie den Wert von Map in einer Zeile in Java