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