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.
Exemple qui peut être recherché par attribut id:
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).
Exemple qui peut être recherché par attribut de nom:
L'attribut name est également fondamentalement unique, alors spécifiez-le simplement.
driver.findElement(By.name("Submit")).click();
Un exemple de recherche avec un attribut de classe unique:
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:
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
À partir de là, ce sera un modèle spécifié par xpath.
Exemple qui peut être recherché par attribut de titre:
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");
Exemple qui peut être recherché par attribut de valeur:
L'attribut value est également recherché en combinaison avec la balise ainsi qu'avec le titre.
driver.findElement(By.xpath("//input[@value='000200']")).click();
Exemple qui peut être recherché par l'attribut alt:
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();
À 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:
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
Exemple de recherche de table:
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();
Exemple de recherche de liste:
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();
Exemples qui peuvent être recherchés par libellé:
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();
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:
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;
Faites une correspondance partielle avec partialLinkText.
driver.findElement(By.partialLinkText("VA User1")).click();
Exemple de recherche de texte:
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();
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