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.
Beispiel, das nach dem ID-Attribut durchsucht werden kann:
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).
Beispiel, das nach dem Namensattribut durchsucht werden kann:
Das Namensattribut ist ebenfalls grundsätzlich eindeutig. Geben Sie es einfach an.
driver.findElement(By.name("Submit")).click();
Ein Beispiel für die Suche mit einem eindeutigen Klassenattribut:
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:
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
Von hier aus wird es ein von xpath angegebenes Muster sein.
Beispiel, das nach dem Titelattribut durchsucht werden kann:
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");
Beispiel, das nach Wertattribut durchsucht werden kann:
Das value-Attribut wird auch in Kombination mit dem Tag und dem Titel gesucht.
driver.findElement(By.xpath("//input[@value='000200']")).click();
Beispiel, das nach dem alt-Attribut durchsucht werden kann:
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();
Von hier aus ist es ein Muster, nach HTML-Strukturen wie Tags zu suchen.
Beispiele, die nach Tags durchsucht werden können:
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
Beispiel für die Tabellensuche:
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();
Listensuchbeispiel:
Ä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();
Beispiele, die nach Label durchsucht werden können:
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();
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:
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;
Machen Sie eine teilweise Übereinstimmung mit PartialLinkText.
driver.findElement(By.partialLinkText("VA User1")).click();
Beispiel für eine Textsuche:
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();
--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