[JAVA] Ich habe versucht, Selen wie JQuery zu verwenden

Selen ist sehr nützlich für das automatisierte Testen von Websystemen. Wenn Sie versuchen, den Testcode manuell zu schreiben, dauert er lange Warten Sie, bis es anklickbar ist, klicken Sie mit Aktion usw. Ich kann es nicht so bedienen, als hätte ich es nicht verstanden, und es ist zunächst ziemlich schwierig, es zu bekommen.

Der Code, der nur auf ein Element klickt, sieht beispielsweise folgendermaßen aus:

WebElement element = driver.findElement(By.id("id"));
wait.until(ExpectedConditions.elementToBeClickable(element));
Actions actions = new Actions(driver);
actions.click(element);

Ich habe versucht, dies wie JQuery wie folgt zu schreiben.

$("#id").click();

Da wir auch find und child implementiert haben, können wir den Code wie folgt schreiben, um die Anzahl der Zeilen in einer Tabelle zu ermitteln.

$("#id").find("TBODY").children("TR").size();

Wenn dies der Fall ist, kann jeder, der JQuery verwenden kann, es schreiben, ohne Selen zu kennen.

Um es zu verwenden, lassen Sie einfach die folgende Github-Quelle fallen und bereiten Sie die folgende Methode auf der Seite der Testklasse vor. (Treiber als Klassenvariable behalten)

https://github.com/widora99/seleniumTest/blob/master/ExtendElement.java

public static ExtendElement $(String selector) {
	return new ExtendElement(driver, driver.findElement(By.cssSelector(selector)));
}

Wenn Sie mehrere Elemente erhalten möchten, erstellen Sie auch die folgende Methode. (Aufgrund von Java-Einschränkungen muss der Rückgabetyp angegeben werden, daher müssen wir eine andere Methode verwenden.)

public static List<ExtendElement> $$(String selector) {
	ExtendElement ele = new ExtendElement(driver, driver.findElement(By.tagName("body")));
	return ele.finds(selector);
}

ExtendElement ist eine Klasse, die WebElement erweitert. Anstatt WebElements so zu implementieren, dass es wie JQuery aussieht Sie definieren eine Methode mit Ihrem eigenen Namen. Beispielsweise wird getText () zu text (). doubleClick () ist dblclick ().

Kinder hatten es am schwersten. Wenn Sie in Seleniums cssSelector "> *" angeben, wird ein Fehler angezeigt Ich habe keine andere Wahl, als es in xPath zu konvertieren und es zu bekommen.

public List<ExtendElement> children(String selector) {
	List<ExtendElement> elist = new ArrayList<ExtendElement>();
	String xpath = cssToXpath(selector);
	
	List<WebElement> wlist = elm.findElements(By.xpath("./" + xpath));
	for(WebElement welm : wlist) {
		elist.add(new ExtendElement(driver, welm));
	}
	return elist;
}

Da der Klassenname jedoch mit String verglichen wird, wird "img2" durch Angabe von "img" getroffen. Es besteht das Problem, dass nicht mehrere Klassennamen angegeben werden können. (Gleiches gilt für das nächste)

Ich konnte es nicht mit meinem eigenen Wissen tun Wenn jemand einen guten Weg kennt, würde ich es begrüßen, wenn Sie kommentieren oder ziehen könnten.

Recommended Posts

Ich habe versucht, Selen wie JQuery zu verwenden
Ich habe versucht, yum-cron zu verifizieren
Ich habe versucht, die ähnliche Funktion durch asynchrone Kommunikation zu implementieren
Ich möchte FireBase verwenden, um eine Zeitleiste wie Twitter anzuzeigen
Ich habe versucht, C # (Indexer) zu kauen.
Ich habe versucht, die Unterstützung für iOS 14 zusammenzufassen
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, die Methode zu erklären
Ich habe jetzt versucht, Java 8 zusammenzufassen
C # (Polymorphismus: Polymorphismus)
Ich habe versucht, Active Hash zu erklären
Ich habe versucht, die Ajax-Verarbeitung der ähnlichen Funktion in Rails zu implementieren
Ich habe versucht, Code wie eine Typdeklaration in Ruby zu schreiben
Ich habe versucht, Java-Anfänger so einzustellen, dass sie Tastenkombinationen in Eclipse verwenden
Ich habe versucht, die verwendeten Methoden zusammenzufassen
Ich habe versucht, Processing auf VS Code zu migrieren
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Ich habe versucht, mit Web Assembly zu beginnen
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
Ich habe versucht, AOJs binäre Suche zu lösen
Ich habe versucht, das Iterator-Muster zu implementieren
Ich habe versucht, die Stream-API zusammenzufassen
Ich habe versucht, AdoptOpenjdk 11 unter CentOS 7 zu erstellen
Was ist Docker? Ich habe versucht zusammenzufassen
Ich möchte @Autowired in Servlet verwenden
Ich habe versucht, JavaScript Part.2 Objektorientiert zu berühren
Ich habe versucht, den CPU-Kern mit Ruby voll auszunutzen
Ich habe versucht, über JVM / Garbage Collection zusammenzufassen
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
Ich habe versucht, polymorph in Nogizaka zu implementieren.
Ich habe versucht, die Federbeinkonfiguration mit Coggle zu verwalten
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich habe versucht, Anmeldeinformationen mit JMX zu verwalten
Ich habe versucht, die Sitzung in Rails zu organisieren
Java Ich habe versucht, einen einfachen Block zu brechen
Ich habe versucht, grafana und postgres [docker-compose] zu verknüpfen
Ich habe versucht, ein Personalmanagement-Tool zu entwickeln
Ich habe versucht, eine Website für das Studium von DUO3.0 zu entwickeln.
C # (Grund der Kapselung)
Ich möchte Java8 für jeden mit Index verwenden
Ich habe versucht, eine LINE-Klon-App zu erstellen
Ich habe es mit Spring versucht.
Ich habe versucht, AdoptOpenJDK 8 zu erstellen (zusätzlich: Amazon Corretto 8)
[Ruby-Grundlagen] Ich habe versucht, Module zu lernen (Kapitel 1)
Ich habe versucht, Tomcat zu setzen
Ich habe versucht, neunundneunzig in Java auszugeben
Verwendung von JQuery in Rails 6 js.erb
Ich habe versucht, JavaFX und Spring Framework zu verknüpfen.
Ich habe versucht, ① umzugestalten
Ich habe versucht, Tomcat so einzustellen, dass das Servlet ausgeführt wird.
Ich habe versucht, eine Anwendung in 2 Sprachen zu entwickeln