[JAVA] Résumé de la sélection des éléments dans Selenium

Ceci est un résumé de la façon de sélectionner des éléments HTML avec les méthodes findElement et findElements de Selenium.

Je teste souvent personnellement des sites non personnalisables (pour des raisons telles que la génération automatique), et j'ai résumé les modèles que j'ai principalement utilisés pour la sélection des éléments lors de la transition vers l'écran suivant. ..

Les captures d'écran de chaque section montrent l'exemple de site ci-dessus et les éléments ci-dessous avec la fonction de validation de Chrome (outils de développement). J'ai essayé de le dire tel quel autant que possible, mais il y a quelques corrections telles que raccourcir la largeur de Qiita et supprimer les données réelles.

1) Recherche par attribut d'identifiant

Exemple qui peut être recherché par attribut id:

image.png

Si l'élément HTML souhaité a un attribut id, spécifiez-le simplement et recherchez.

driver.findElement(By.id("service_category_cloud_Expert")).click();

Tous ces sites sont faciles à tester (ou plutôt, vous n'avez pas besoin de cet article).

2) Recherche par attribut de nom

Exemple qui peut être recherché par attribut de nom:

image.png

L'attribut name est également fondamentalement unique, alors spécifiez-le simplement.

driver.findElement(By.name("Submit")).click();

3) Recherche par attribut de classe

Un exemple de recherche avec un attribut de classe unique:

image.png

Si l'on s'attend à ce qu'il n'y ait qu'un seul attribut de classe souhaité, il peut être obtenu avec findElement () ainsi que les attributs id et name. Dans cet exemple, on s'attend à ce qu'il n'y ait qu'un seul bouton "Suivant" (classe btn_next) sur le site, donc nous l'obtenons tel quel en spécifiant la classe. S'il y a plusieurs éléments avec la même classe, le premier sera retourné.

driver.findElement(By.className("btn_next")).click();
// driver.findElements(By.className("btn_next")).get(0).click();Pareil que

Exemple de plusieurs mêmes attributs de classe:

image.png

S'il y en a plusieurs, un traitement supplémentaire est nécessaire pour les obtenir dans la liste et y trouver le lien souhaité. Dans cet exemple, l'attribut "aria-label" est utilisé pour identifier l'élément sur lequel cliquer.

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(); //Cliquer dans une instruction if entraînera une exception s'il y a un élément non applicable derrière elle

4) Recherche par attribut de titre

À partir de là, ce sera un modèle spécifié par xpath.

Exemple qui peut être recherché par attribut de titre:

image.png

Recherchez les balises avec un titre spécifique comme suit. Dans cet exemple, nous recherchons une balise a avec le titre "Rapport public".

driver.findElement(By.xpath("//a[@title='Rapport public']")).click();

Si le titre est long, vous pouvez également effectuer une recherche partielle avec contient.

driver.findElement(By.xpath("//a[contains(@title,'Partie d'un long titre')]")).click();

Si l'attribut title est défini, d'autres balises peuvent être recherchées de la même manière. Pour une balise d'entrée avec un titre spécifique:

driver.findElement(By.xpath("//input[@title='Nom']")).sendKeys("Tesuto Ichiro");
driver.findElement(By.xpath("//input[contains(@title,'Une partie du titre')]")).sendKeys("Saisie de texte");

5) Recherche par attribut de valeur

Exemple qui peut être recherché par attribut de valeur:

image.png

L'attribut value est également recherché en combinaison avec la balise ainsi qu'avec le titre.

driver.findElement(By.xpath("//input[@value='000200']")).click();

6) Recherche par attribut alt

Exemple qui peut être recherché par l'attribut alt:

image.png

L'attribut alt est également recherché en combinaison avec la balise. Comme alt est souvent long, je pense que l'appariement partiel est souvent utilisé.

driver.findElement(By.xpath("//a[contains(@alt,'Nous contacter')]")).click();

Une correspondance exacte est possible, mais pas si souvent.

driver.findElement(By.xpath("//input[@alt=\"enregistrement\"]")).click();

7) Recherche par tag

À partir de là, il s'agit d'un modèle de recherche par structure html comme les balises.

Exemples qui peuvent être recherchés par tag:

68747470733a2f2f71696974612d696d616782e706e67.png

Le processus d'obtention des éléments avec la même balise dans une liste et de recherche du lien souhaité à partir d'eux est le même que 3) plusieurs classes. Dans cet exemple, il est spécifié à l'aide de l'attribut "alt".

List<WebElement> elements = driver.findElements(By.tagName("img"));
WebElement targetElement = null;
for (WebElement element : elements) {
    if (element.getAttribute("alt").equals("Entreprise en interne")) {
        targetElement = element;
    }
}
targetElement.click();

Dans cet exemple, la condition de rétrécissement est alt, donc vous pouvez également l'obtenir par 6) notation d'attribut alt. (Selon la combinaison de balises et d'attributs, il est difficile de décider lequel utiliser.)

driver.findElement(By.xpath("//img[@alt=\"Entreprise en interne\"]")).click();

De plus, si vous n'avez qu'une seule balise, vous pouvez rechercher avec findElement, mais je pense que c'est rare.

driver.findElement(By.tagName("img")).click();
// driver.findElements(By.tagName("img")).get(0).click();Pareil que

8) Spécification de chemin (recherche de table)

Exemple de recherche de table:

image.png

Si la table n'a qu'une classe générique, récupérez-la avec le chemin de la table. Dans cet exemple, le contenu affiché contient des sauts de ligne et des commentaires, la méthode indexOf est donc utilisée pour rechercher la chaîne de caractères souhaitée.

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();

9) Spécification de chemin (recherche de liste)

Exemple de recherche de liste:

image.png

Similaire au tableau, le flux est la recherche de chemin → la recherche de texte dans chaque élément.

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();

10) Recherche par étiquette

Exemples qui peuvent être recherchés par libellé:

image.png

Un exemple de recherche d'étiquette en combinaison avec l'attribut for est le suivant.

driver.findElement(By.xpath("//label[@for='mng_group_mail']")).click();

Il s'agit d'un modèle dans lequel l'étiquette est longue et partiellement assortie. La syntaxe est la même que 4) -6).

driver.findElement(By.xpath("//label[contains(@for,'Une partie de la description')]")).click();

11) Recherche par linkText

De là, ce sera un motif de recherche par le texte affiché.

C'est un dernier recours (?) Pour passer à autre chose quand il n'y a pas d'attributs de recherche et que la structure des balises est automatiquement générée, mais j'ai l'impression de ne pas savoir ce que je teste.

linkText Search exemple:

image.png

Si vous souhaitez rechercher le texte par correspondance exacte, ce sera comme suit.

driver.findElement(By.linkText("sauvegarder")).click();

Exemples de texte avec sauts de ligne et commentaires;

image.png

Faites une correspondance partielle avec partialLinkText.

driver.findElement(By.partialLinkText("VA User1")).click();

12) Recherche par texte

Exemple de recherche de texte:

image.png

Si vous ne pouvez pas l'obtenir même avec linkText (par exemple, lorsque l'opération au moment de la pression est décrite en javascript), obtenez-la avec du texte et appuyez dessus.

driver.findElement(By.xpath("//*[text()=\"PRINT\"]")).click();

Autres (supplément, etc.)

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

Résumé de la sélection des éléments dans Selenium
Résumé de la mise en œuvre des arguments par défaut en Java
[java] Résumé de la gestion des caractères
Résumé de l'écriture des arguments d'annotation
[Java] [Maven3] Résumé de l'utilisation de Maven3
[Webpacker] Résumé de l'installation de Bootstrap et jQuery dans Rails 6.0
[java] Résumé de la gestion des chaînes de caractères
Résumé de la création de balises JSF personnalisées
[Swift] Résumé de la suppression des éléments d'un tableau (mémo personnel)
[Java] Résumé de la façon d'omettre les expressions lambda
[Rails] Comment utiliser les boîtes de sélection dans Ransack
Comment utiliser JQuery dans Rails 6 js.erb
Comment insérer un traitement avec n'importe quel nombre d'éléments dans le traitement itératif dans Ruby
[Swift] Comment obtenir le nombre d'éléments dans un tableau (super basique)
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Résumé de l'API de communication Java (1) Comment utiliser Socket
Comment tester l'écran de téléchargement de fichiers avec Spring + Selenium
Résumé de l'API de communication Java (3) Comment utiliser SocketChannel
Résumé de l'API de communication Java (2) Comment utiliser HttpUrlConnection
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
Comment afficher le champ de sélection de time_select toutes les 30 minutes
Comment sélectionner une date spécifiée par code dans le calendrier FS
Comment ajouter des éléments sans spécifier la longueur du tableau
Comment implémenter l'affichage sur une seule ligne de TextView dans le développement Android
Comment dériver le dernier jour du mois en Java
Comment changer la couleur d'arrière-plan de la barre de navigation, etc. dans Swift UI
Comment installer la bibliothèque JavaScript "select2" qui rend les sélections multiples de selectbox à la mode dans Rails 6.0
Comment utiliser Lombok au printemps
Comment trouver May'n dans XPath
Comment masquer la barre de défilement dans WebView
Comment exécuter JUnit dans Eclipse
Comment itérer indéfiniment en Ruby
Comment exécuter Ant dans Gradle
Comment maîtriser la programmation en 3 mois
Comment apprendre JAVA en 7 jours
Comment obtenir des paramètres dans Spark
Comment utiliser setDefaultCloseOperation () de JFrame
Comment installer Bootstrap dans Ruby
Comment utiliser InjectorHolder dans OpenAM
Comment installer jQuery dans Rails 6
Comment utiliser les classes en Java?
Comment nommer des variables en Java
Comment définir Lombok dans Eclipse
Comment rédiger un code facile à comprendre [Résumé 3]
Comment concaténer des chaînes avec Java
Comment installer Swiper in Rails
[Sprint Boot] Comment utiliser les trois types de SqlParameterSource définis dans org.springframework.jdbc.core.namedparam
Résumé des problèmes auxquels je n'ai pas pu me connecter à Firebase
Comment écrire Ruby en une seule ligne Résumé par débutant
Comment supprimer de grandes quantités de données dans Rails et problèmes
Comment obtenir l'identifiant de la clé PRIMAY incrémentée automatiquement dans MyBatis
Comment afficher une liste de chaînes dans JSF sous forme de chaînes séparées par des virgules
Je veux changer la valeur de l'attribut dans Selenium of Ruby
Comment obtenir la longueur d'un fichier audio avec Java
Comment incrémenter la valeur de Map sur une ligne en Java