Il existe deux types de tableaux HTML publiés sur le Web:
- Tables statiques : les données sont statiques, c'est-à-dire que le nombre de lignes et de colonnes est fixe.
- Tables dynamiques : les données sont dynamiques, c'est-à-dire que le nombre de lignes et de colonnes n'est PAS fixe.
Maintenant, nous allons apprendre à gérer une table dynamique dans Selenium:
Vous trouverez ci-dessous un exemple de table Web dynamique dans Selenium for Sales. En fonction des filtres de date d'entrée, le nombre de lignes sera modifié. Donc, il est de nature dynamique.
La gestion des tables statiques est facile, mais la gestion des tables dynamiques dans Selenium est un peu difficile car les lignes et les colonnes ne sont pas constantes.
Dans ce didacticiel, vous apprendrez-
- Utilisation de X-Path pour localiser les éléments de la table Web
- Exemple: récupérer le nombre de lignes et de colonnes à partir de Dynamic WebTable
- Exemple: récupérer la valeur de cellule d'une ligne et d'une colonne particulières du tableau dynamique
- Exemple: obtenir le maximum de toutes les valeurs dans une colonne de table dynamique
- Exemple: obtenir toutes les valeurs d'une table dynamique
Utilisation de X-Path pour localiser les éléments de la table Web
Avant de localiser l'élément Web, comprenons d'abord-
Qu'est-ce qu'un élément Web?
Les éléments Web ne sont rien d'autre que des éléments HTML tels que des zones de texte, des boutons radio déroulants, des boutons d' envoi , etc. Ces éléments HTML sont écrits avec une balise de début et se terminent par une balise de fin .
Par exemple,
Mon premier document HTML
.Étapes pour obtenir le chemin X de l'élément Web que nous voulons localiser.
Étape 1) Dans Chrome, accédez à http://demo.guru99.com/test/web-table-element.php
Étape 2) Cliquez avec le bouton droit sur l'élément Web dont le chemin x doit être récupéré. Dans notre cas, faites un clic droit sur "Entreprise" Sélectionnez l'option Inspecter. L'écran suivant s'affiche -
Étape 3) Cliquez avec le bouton droit sur l'élément Web en surbrillance> Sélectionnez Copier -> Copier l'option x-path.
Étape 4) Utilisez le chemin X copié "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" dans Selenium WebDriver pour localiser l'élément.
Exemple: récupérer le nombre de lignes et de colonnes à partir de Dynamic WebTable
Alors que la gestion dynamique des tables Web dans Selenium, nous ne pouvons pas prédire son nombre de lignes et de colonnes.
En utilisant le pilote Web Selenium, nous pouvons trouver
- Nombre de lignes et de colonnes de la table Web dans Selenium
- Données de la ligne X ou de la colonne Y.
Vous trouverez ci-dessous un programme pour récupérer le nombre total de lignes et de colonnes pour gérer la table Web dans Selenium:
import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Noofrowsandcols {public static void main (String [] args) lève ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nouveau ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");//Nombre de colonnesListercol = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("No of cols are: + col.size ());//Nombre de lignesLister rows = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Le nombre de lignes est: + rows.size ()); wd.close (); }}
Explication du code:
- Ici, nous avons d'abord déclaré l'objet Pilote Web "wd" et l'avons initialisé au pilote chrome.
- Nous utilisons List
pour le nombre total de colonnes dans "col". - Les commandes findElements retournent une liste de TOUS les éléments correspondant au localisateur spécifié
- en utilisant findElements et X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th nous obtenons toutes les colonnes
- De même, nous répétons le processus pour les lignes.
Production:
Exemple: récupérer la valeur de cellule d'une ligne et d'une colonne particulières du tableau dynamique
Supposons que nous ayons besoin de la troisième ligne du tableau et des données de sa deuxième cellule. Voir le tableau ci-dessous-
Dans le tableau ci-dessus, les données sont régulièrement mises à jour après un certain laps de temps. Les données que vous essayez de récupérer seront différentes de la capture d'écran ci-dessus. Cependant, le code reste le même. Voici un exemple de programme pour obtenir les données de la 3 ème ligne et de la 2 ème colonne.
import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import java.util.concurrent.TimeUnit;classe publique RowandCell {public static void main (String [] args) lève ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nouveau ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");wd.manage (). timeouts (). implicitlyWait (20, TimeUnit.SECONDS);WebElement baseTable = wd.findElement (By.tagName ("table"));// Pour trouver la troisième ligne du tableauWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));String rowtext = tableRow.getText ();System.out.println ("Troisième ligne du tableau: + rowtext);// pour obtenir les données de la 2e colonne de la 3e ligneWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));Chaîne valueIneed = cellIneed.getText ();System.out.println ("La valeur de la cellule est: + valueIneed);wd.close ();}}
Explication du code:
- La table est localisée à l'aide de la propriété de localisateur "tagname".
- Utilisation de XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]" trouver la 3 ème ligne et obtenir son texte en utilisant la fonction getText ()
- Utilisation de XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]" trouver la 2ème cellule 3 ème ligne et obtient son texte en utilisant la fonction getText ()
Sortie :
Exemple: obtenir le maximum de toutes les valeurs dans une colonne de table dynamique
Dans cet exemple, nous obtiendrons le maximum de toutes les valeurs dans une colonne particulière.
Reportez-vous au tableau suivant -
Voici le code
import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import java.text.NumberFormat;classe publique MaxFromTable {public static void main (String [] args) lève ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nouveau ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");Chaîne max;double m = 0, r = 0;//Non. de colonnesListercol = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Le nombre total de colonnes est: + col.size ());//Nombre de lignesLister rows = wd.findElements (By.xpath (".//*[@id='leftcontainer'[/table/tbody/tr/td[1]")); System.out.println ("Le nombre total de lignes est: + rows.size ()); for (int i = 1; i r) {r = m; }} System.out.println ("Le prix maximum actuel est: + r); }}
Explication du code:
- À l'aide du pilote chrome, nous localisons la table Web et obtenons le nombre total de lignes à l'aide de XPath ".//*[@id='leftcontainer' Often/table/tbody/tr/td[1]"
- En utilisant la boucle for, nous parcourons le nombre total de lignes et récupérons les valeurs une par une. Pour obtenir la ligne suivante, nous utilisons (i + 1) dans XPath
- Nous comparons l'ancienne valeur avec la nouvelle valeur et la valeur maximale est imprimée à la fin de la boucle for
Production
Exemple: obtenir toutes les valeurs d'une table dynamique
Considérez le tableau suivant http://demo.guru99.com/test/table.html
Le nombre de colonnes pour chaque ligne est différent.
Ici, la ligne numéro 1, 2 et 4 a 3 cellules, et la ligne numéro 3 a 2 cellules et la ligne numéro 5 a 1 cellule.
Nous devons obtenir les valeurs de toutes les cellules
Voici le code:
import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import java.util.concurrent.TimeUnit;import org.openqa.selenium.chrome.ChromeDriver;classe publique NofRowsColmns {public static void main (String [] args) lève ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nouveau ChromeDriver ();wd.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// Pour localiser la table.WebElement ma table = wd.findElement (Par.xpath ("/ html / corps / table / tbody"));// Pour localiser les lignes de la table.Listrows_table = mytable.findElements (By.tagName ("tr"));// Pour calculer le nombre de lignes dans la table.int rows_count = rows_table.size ();// La boucle s'exécutera jusqu'à la dernière ligne de la table.for (int row = 0; row Columns_row = rows_table.get (row) .findElements (By.tagName ("td"));// Pour calculer le nombre de colonnes (cellules). Dans cette ligne spécifique.int column_count = Columns_row.size ();System.out.println ("Nombre de cellules dans la ligne" + ligne + "sont" + nombre_colonnes);// La boucle s'exécutera jusqu'à la dernière cellule de cette ligne spécifique.for (int column = 0; column Explication du code:
- rows_count donne le nombre total de lignes
- pour chaque ligne, nous obtenons le nombre total de colonnes en utilisant rows_table.get (row) .findElements (By.tagName ("td"));
- Nous parcourons chaque colonne et de chaque ligne et récupérons les valeurs.
Sortie :
Résumé
- By.xpath () est couramment utilisé pour accéder aux éléments de table.
- Les tableaux Web statiques dans Selenium sont de nature cohérente. c'est-à-dire qu'ils ont un nombre fixe de lignes ainsi que des données de cellule.
- Les tableaux Web dynamiques sont incohérents, c'est-à-dire qu'ils n'ont pas de données de nombre fixe de lignes et de cellules.
- En utilisant le pilote Web sélénium, nous pouvons gérer facilement les tables Web dynamiques.
- Selenium Webdriver nous permet d'accéder aux tables Web dynamiques par leur X-path
L'article est rédigé par Kanchan Kulkarni.