Le sélénium est très utile pour les tests automatisés de systèmes Web, Si vous essayez d'écrire le code de test manuellement, il sera long Attendez qu'il soit cliquable, cliquez avec action, etc. Je ne peux pas le faire fonctionner comme si je n'avais pas compris, et c'est assez difficile d'y arriver au début.
Par exemple, le code qui clique simplement sur un élément ressemble à ceci:
WebElement element = driver.findElement(By.id("id"));
wait.until(ExpectedConditions.elementToBeClickable(element));
Actions actions = new Actions(driver);
actions.click(element);
J'ai essayé d'écrire ceci comme JQuery comme suit.
$("#id").click();
Puisque nous avons également implémenté find et children, nous pouvons écrire le code pour obtenir le nombre de lignes dans une table comme suit.
$("#id").find("TBODY").children("TR").size();
Si tel est le cas, quiconque peut utiliser JQuery peut l'écrire sans connaître le sélénium.
Pour l'utiliser, déposez simplement la source suivante de github et préparez la méthode suivante du côté de la classe de test. (Conserver le pilote comme variable de classe)
https://github.com/widora99/seleniumTest/blob/master/ExtendElement.java
public static ExtendElement $(String selector) {
return new ExtendElement(driver, driver.findElement(By.cssSelector(selector)));
}
Si vous souhaitez obtenir plusieurs éléments, créez également la méthode suivante. (En raison des restrictions Java, il est nécessaire de spécifier le type de retour, nous devons donc utiliser une autre méthode.)
public static List<ExtendElement> $$(String selector) {
ExtendElement ele = new ExtendElement(driver, driver.findElement(By.tagName("body")));
return ele.finds(selector);
}
ExtendElement est une classe qui étend WebElement, Au lieu d'implémenter WebElements pour le faire ressembler à JQuery Vous définissez une méthode avec votre propre nom. Par exemple, getText () devient text (). doubleClick () est dblclick ().
Les enfants ont eu les moments les plus difficiles. Dans cssSelector de Selenium, spécifier "> *" entraînera une erreur, donc Je n'ai pas d'autre choix que de le convertir en xPath et de l'obtenir.
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;
}
Cependant, comme le nom de la classe est comparé par String, "img2" frappera en spécifiant "img", Il existe un problème en raison du fait que plusieurs noms de classe ne peuvent pas être spécifiés. (Idem pour le plus proche)
Je ne pouvais pas le faire avec mes propres connaissances Si quelqu'un connaît un bon moyen, je vous serais reconnaissant si vous pouviez commenter ou tirer une demande.
Recommended Posts