Comment gérer la table Web dans Selenium

⚡ Résumé intelligent

Selenium La gestion des tableaux Web permet aux ingénieurs QA de lire des données tabulaires à partir de lignes et de colonnes HTML en utilisant XPath, CSS et Selenium 4 localisateurs relatifs. Cet article présente les tables statiques, les tables imbriquées, les prédicats d'attributs et les techniques d'IA pour les grilles dynamiques.

  • 🧱 Anatomie XPath : Chaque localisateur de table commence par //table et explore les éléments tbody, tr et td à l'aide de prédicats.
  • (I.e. Lignes dynamiques : La fonction findElements renvoie une liste d'éléments Web afin que les boucles puissent compter les lignes et lire les cellules lors de l'exécution.
  • 🪄 Selenium 4: Les localisateurs relatifs au-dessus, en dessous et à proximité simplifient le ciblage des cellules autour d'un élément d'ancrage connu.
  • 🧠 Localisateurs IA : Les outils d'auto-réparation détectent les décalages de colonnes et rétablissent l'identité des lignes sans modification manuelle du XPath.
  • Inspecter le raccourci : Les outils de développement du navigateur copient un XPath complet que vous pouvez réduire au premier tableau pour plus de fiabilité.

Selenium Exemple XPath pour une table Web

Qu'est-ce qu'une table Web dans Selenium?

A Tableau Web in Selenium Un tableau est un élément Web utilisé pour la représentation tabulaire de données ou d'informations. Les données affichées peuvent être statiques ou dynamiques. On accède aux cellules et aux lignes d'un tableau Web grâce aux méthodes de l'élément Web et à des localisateurs. Un exemple typique est la grille des spécifications produit affichée sur une page produit d'un site e-commerce.

Lecture d'un tableau Web HTML

Il arrive fréquemment que les testeurs aient besoin d'accéder à des éléments, généralement des valeurs textuelles, situés dans des tableaux HTML. Or, les concepteurs web attribuent rarement un attribut `id` ou `name` aux cellules individuelles. Par conséquent, des méthodes telles que `By.id()`, `By.name()` ou `By.cssSelector()` sont rarement efficaces. Dans ce cas, l'option la plus fiable est `By.xpath()`, car elle parcourt les relations parent-enfant à l'intérieur de la balise `<table>`.

Comment gérer la table Web dans Selenium

Considérez le code HTML ci-dessous pour gérer les tables Web dans Selenium.

Comment écrire XPath pour Table dans Selenium

Nous utiliserons XPath pour obtenir le texte intérieur de la cellule contenant le texte « quatrième cellule ».

Comment écrire XPath pour Table dans Selenium

Étape 1 - Définir l'élément parent (tableau)

Les localisateurs XPath dans WebDriver commencent toujours par une double barre oblique « // » suivie de l'élément parent. Puisque nous avons affaire à des tables Web dans Selenium, l'élément parent doit toujours être le étiqueter. La première partie de notre Selenium Le localisateur de table XPath doit donc commencer par « //table ».

Selenium Exemple de table Web

Étape 2 – Ajouter les éléments enfants

L'élément situé directement sous est , donc est l'enfant de . Inversement, est le parent de Dans XPath, tous les éléments enfants sont placés à droite de leur élément parent, séparés par une barre oblique « / », comme indiqué ci-dessous.

Selenium Exemple de table Web

Étape 3 – Ajouter des prédicats

Le L'élément contient deux étiquettes. Ces deux Les étiquettes sont des enfants de , donc est le parent des deux. Les deux Les éléments sont frères et sœurs. Les frères et sœurs sont des éléments enfants qui partagent le même parent.

Pour atteindre le qui contient la « quatrième cellule », nous devons d'abord accéder à la seconde , pas le premier. Écrire seulement « //table/tbody/tr » ciblerait le premier étiqueter.

Alors, comment accéder à la seconde ? La réponse est d'utiliser Prédicats. Les prédicats sont des nombres ou des attributs HTML placés entre crochets « [ ] » qui permettent de distinguer un élément enfant de ses frères et sœurs.. Puisque la ligne dont nous avons besoin est la deuxième, nous utilisons « [2] » comme prédicat.

 Selenium Exemple de table Web

Si l'on omet le prédicat, XPath renvoie le premier élément frère. Par conséquent, chacun des codes XPath ci-dessous atteindra le premier élément frère. .

Selenium Table Web utilisant XPath

Étape 4 - Ajouter les éléments enfants réussis à l'aide des prédicats appropriés

L'élément suivant dont nous avons besoin est le deuxième En appliquant les règles des étapes 2 et 3, nous arrivons au XPath présenté ci-dessous.

Tableau Web dans Selenium en utilisant XPath

Maintenant que nous disposons du localisateur XPath correct, nous pouvons accéder à la cellule et lire son contenu à l'aide du code ci-dessous. Ceci suppose que vous avez enregistré la page HTML sous le nom « newhtml.html » sur votre disque C.

Tableau Web dans Selenium en utilisant XPath

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/write-xpath-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

Tableau Web dans Selenium en utilisant XPath

Accéder aux tables imbriquées

Les mêmes principes s'appliquent aux tableaux imbriqués. Les tables imbriquées sont des tables placées à l'intérieur d'une autre table.. Un exemple est illustré ci-dessous.

Comment accéder aux tables imbriquées dans Selenium

Pour accéder à la cellule contenant le texte « 4-5-6 » en utilisant les notions de parent/enfant et de prédicat de la section précédente, nous pouvons composer le XPath présenté ci-dessous.

Comment accéder aux tables imbriquées dans Selenium

Le code WebDriver ci-dessous récupère le texte interne de la cellule ciblée.

Accéder aux tables imbriquées dans Selenium

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/accessing-nested-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

La sortie ci-dessous confirme que l'accès à la table interne a réussi.

Accéder aux tables imbriquées dans Selenium

Utiliser des attributs comme prédicats

Si l'élément est profondément imbriqué dans le code HTML, où le comptage des éléments frères devient fastidieux, nous pouvons utiliser à la place l'attribut unique de cet élément.

Dans l'exemple ci-dessous, la cellule « New York à Chicago » est enfouie profondément à l'intérieur de la cellule. Mercury Page d'accueil des visites.

Selenium Exemple de table Web utilisant des attributs comme prédicats

Selenium Exemple de table Web utilisant des attributs comme prédicats

Nous pouvons utiliser l'attribut unique du tableau (largeur="270") comme prédicat. Les attributs sont utilisés comme prédicats en les préfixant du symbole @Dans l'exemple ci-dessus, la cellule « New York à Chicago » se trouve dans la première du quatrième Notre expression XPath devrait donc ressembler à celle présentée ci-dessous.

Selenium Exemple de table Web avec des attributs comme prédicats

N'oubliez pas que lorsque vous placez le XPath à l'intérieur Java, échappez les guillemets doubles autour de « 270 » avec une barre oblique inverse afin que la chaîne By.xpath() ne soit pas terminée prématurément.

Selenium Exemple de table Web avec des attributs comme prédicats

Nous sommes maintenant prêts à accéder à cette cellule en utilisant le code ci-dessous.

Selenium Exemple de table Web avec des attributs comme prédicats

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table[@width=\"270\"]/tbody/tr[4]/td"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Selenium Exemple de table Web avec des attributs comme prédicats

Raccourci : utilisez Inspecter l'élément pour accéder aux tables dans Selenium

Si l'index ou l'attribut d'un élément est difficile à obtenir, la méthode la plus rapide pour générer le XPath consiste à utiliser l'outil Inspect Element des outils de développement des navigateurs modernes.

Considérons l'exemple ci-dessous tiré de Mercury Page d'accueil des visites.

Selenium Exemple de table Web avec des attributs comme prédicats

Étape 1

Faites un clic droit sur la cellule cible et sélectionnez Inspecter pour afficher le chemin DOM, puis copiez le XPath complet.

Selenium Exemple de table Web avec des attributs comme prédicats

Étape 2

Recherchez le premier élément parent « table » et supprimez tout ce qui se trouve à sa gauche.

Selenium Exemple de table Web avec des attributs comme prédicats

Étape 3

Préfixez le reste du XPath avec une double barre oblique « // » et copiez-le dans votre code WebDriver.

Selenium Exemple de table Web avec attributs

Le code WebDriver ci-dessous récupère le texte interne de l'élément profondément imbriqué.

Selenium Exemple de table Web avec attributs

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table/tbody/tr/td[2]"
        + "//table/tbody/tr[4]/td/"
        + "table/tbody/tr/td[2]/"
        + "table/tbody/tr[2]/td[1]/"
        + "table[2]/tbody/tr[3]/td[2]/font"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Comment compter les lignes et les colonnes d'un tableau Web dynamique

Les tableaux Web dynamiques, tels que les tableaux de bord ou les résultats de recherche, affichent un nombre de lignes différent à chaque chargement. Pour les gérer, utilisez findElements pour aller chercher chaque On stocke les données dans une liste, puis on parcourt chaque cellule pour lire chaque élément. L'extrait de code ci-dessous compte les lignes et lit chaque cellule d'un tableau dont l'identifiant est « customers ».

List<WebElement> rows = driver.findElements(
    By.xpath("//table[@id='customers']//tr"));
System.out.println("Total rows: " + rows.size());

for (int i = 1; i <= rows.size(); i++) {
    List<WebElement> cells = driver.findElements(
        By.xpath("//table[@id='customers']//tr[" + i + "]/td"));
    for (WebElement cell : cells) {
        System.out.println(cell.getText());
    }
}

Enveloppez le localisateur dans un WebDriverWait au visibilityOfAllElementsLocatedBy lorsque le tableau est chargé par AJAX. Cela évite les références obsolètes aux éléments sur les grilles à rendu lent.

Selenium 4 localisateurs relatifs pour les tableaux Web

Selenium 4. Des localisateurs relatifs ont été introduits, permettant de cibler des éléments par leur position visuelle. Ils sont utiles lorsque les index XPath sont invalides suite à un réordonnancement des lignes. Les méthodes above(), below(), toLeftOf(), toRightOf() et near() tous acceptent un élément WebElement d'ancrage.

import static org.openqa.selenium.support.locators.RelativeLocator.with;

WebElement emailHeader = driver.findElement(By.xpath("//th[text()='Email']"));
WebElement emailCell = driver.findElement(
    with(By.tagName("td")).below(emailHeader));
System.out.println(emailCell.getText());

Les localisateurs relatifs restent lisibles même lorsque l'ordre des colonnes change. Pour des résultats optimaux sur les pages dynamiques, associez-les à des attentes explicites.

Outils d'IA pour la gestion des tableaux Web dynamiques

Les plateformes de test assistées par l'IA réduisent la maintenance des localisateurs sur les grilles qui évoluent fréquemment. Des outils comme Testim, Mabel et Fonctionner Ils utilisent la vision par ordinateur et les modèles DOM pour détecter les décalages de colonnes et les localisateurs à auto-réparation. Ils identifient les lignes par le texte d'en-tête et la similarité des cellules plutôt que par des index XPath fixes.

Pour le pur Selenium projets, bibliothèques telles que Healenium Encapsulez le WebDriver et réécrivez les localisateurs défectueux à l'exécution. Combinez ces outils avec WebDriverWait pour garantir la stabilité des scripts de tableaux dynamiques sans avoir à réécrire les sélecteurs après chaque modification de l'interface utilisateur.

Résumé

  • By.xpath() est la méthode la plus fiable pour accéder aux cellules d'un tableau Web. Selenium.
  • Si le dénombrement des frères et sœurs est difficile, utilisez un attribut unique comme prédicat, précédé du symbole @.
  • findElements renvoie une liste qui prend en charge le comptage des lignes dans les tableaux dynamiques.
  • Selenium 4 localisateurs relatifs (au-dessus, en dessous, près) réduisent la dépendance à XPath positionnel.
  • L'outil Inspect Element des outils de développement accélère la génération XPath pour les cellules profondément enfouies.
  • Des outils d’IA tels que Testim, Mabl et les localisateurs d'auto-réparation Healenium pour les grilles changeantes.

FAQ

Un tableau Web dans Selenium Un tableau est un élément Web qui affiche des données tabulaires en lignes et en colonnes. Il peut être statique ou dynamique. Les testeurs accèdent à ses cellules via les méthodes WebElement combinées à des localisateurs XPath ou CSS, car les tableaux exposent rarement des identifiants uniques pour chaque cellule.

La plupart des cellules de tableau ne possèdent pas d'attribut `id` ou `name`, c'est pourquoi les méthodes `By.id()` et `By.name()` ne fonctionneront pas. XPath parcourt la structure parent-enfant des éléments `table`, `tbody`, `tr` et `td`, ce qui en fait le localisateur de cellules le plus fiable.

Utilisez `driver.findElements(By.xpath(“//table[@id='tbl']//tr”)).size()` pour compter les lignes et `//table[@id='tbl']//tr[1]/td` pour compter les colonnes. La méthode `findElements` renvoie une liste. qui prend en charge la fonction size() pour obtenir rapidement les totaux des lignes.

Selenium La version 4 introduit des localisateurs relatifs tels que above(), below(), toLeftOf(), toRightOf() et near(). Ils permettent de cibler les cellules positionnées autour d'une cellule d'ancrage connue, ce qui est utile lorsque les index XPath changent dans les tableaux dynamiques.

Parcourez les lignes avec `findElements`, puis lisez chaque cellule avec `getText()`. Construisez dynamiquement le XPath en concaténant des chaînes de caractères, par exemple : `//tr["+i+"]/td["+j+"]`. Attendez que le tableau soit chargé avec `WebDriverWait` avant de lire les valeurs.

Oui. Des outils basés sur l'IA comme TestimMabl et Functionize utilisent la vision par ordinateur et les modèles DOM pour détecter les limites des tableaux, déduire les en-têtes et corriger automatiquement les localisateurs lorsque les colonnes se déplacent. Cela réduit la maintenance des requêtes XPath pour les tableaux de bord dynamiques.

Les modèles d'IA apprennent les structures de lignes à partir des exécutions précédentes et font correspondre les cellules en se basant sur la similarité textuelle plutôt que sur des index fixes. Lorsqu'une ligne est déplacée ou qu'une colonne est réorganisée, le système de localisation par IA retrouve la cible sans avoir à réécrire le XPath.

findElement renvoie un seul WebElement et lève une NoSuchElementException s'il est absent. findElements renvoie une liste et renvoie une liste vide si aucune correspondance n'est trouvée. Utilisez findElements lorsque vous recherchezping sur les lignes ou les colonnes du tableau.

Résumez cet article avec :