[JAVA] J'ai essayé d'utiliser Selenium comme JQuery

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

J'ai essayé d'utiliser Selenium comme JQuery
J'ai essayé de vérifier yum-cron
J'ai essayé d'implémenter la fonction similaire par communication asynchrone
Je souhaite utiliser FireBase pour afficher une chronologie comme Twitter
J'ai essayé de mâcher C # (indexeur)
J'ai essayé de résumer le support d'iOS 14
J'ai essayé d'interagir avec Java
J'ai essayé d'expliquer la méthode
J'ai essayé de résumer Java 8 maintenant
C # (polymorphisme: polymorphisme)
J'ai essayé d'expliquer Active Hash
J'ai essayé d'implémenter le traitement Ajax de la fonction similaire dans Rails
J'ai essayé d'écrire du code comme une déclaration de type en Ruby
J'ai essayé de configurer les débutants Java pour qu'ils utilisent des touches de raccourci dans eclipse
J'ai essayé de résumer les méthodes utilisées
J'ai essayé de migrer le traitement vers VS Code
J'ai essayé de résumer les expressions Java lambda
J'ai essayé de démarrer avec Web Assembly
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
J'ai essayé de résoudre la recherche binaire d'AOJ
J'ai essayé d'implémenter le modèle Iterator
J'ai essayé de résumer l'API Stream
J'ai essayé de construire AdoptOpenjdk 11 sur CentOS 7
Qu'est-ce que Docker? J'ai essayé de résumer
Je veux utiliser @Autowired dans Servlet
J'ai essayé de toucher JavaScript Part.2 orienté objet
J'ai essayé d'utiliser pleinement le cœur du processeur avec Ruby
J'ai essayé de résumer sur JVM / garbage collection
J'ai essayé de vérifier AdoptOpenJDK 11 (11.0.2) avec l'image Docker
J'ai essayé d'implémenter des relations polymorphes à Nogizaka.
J'ai essayé de gérer la configuration des jambes de force avec Coggle
[Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2
J'ai essayé de gérer les informations de connexion avec JMX
J'ai essayé d'organiser la session en Rails
java j'ai essayé de casser un simple bloc
J'ai essayé de lier grafana et postgres [docker-compose]
J'ai essayé de développer un outil de gestion des effectifs
J'ai essayé de développer un site Web pour étudier DUO3.0.
C # (base de l'encapsulation)
Je veux utiliser java8 forEach avec index
J'ai essayé de créer une application de clonage LINE
J'ai essayé Spring.
J'ai essayé de construire AdoptOpenJDK 8 (ajout: Amazon Corretto 8 également)
[Notions de base sur Ruby] J'ai essayé d'apprendre des modules (Chapitre 1)
J'ai essayé de mettre Tomcat
J'ai essayé de sortir quatre-vingt-dix-neuf en Java
Comment utiliser JQuery dans Rails 6 js.erb
J'ai essayé de lier JavaFX et Spring Framework.
J'ai essayé de refactoriser ①
J'ai essayé de configurer tomcat pour exécuter le servlet.
J'ai essayé de développer une application en 2 langues