{"id":2909,"date":"2023-12-01T12:41:22","date_gmt":"2023-12-01T11:41:22","guid":{"rendered":"https:\/\/ittester.sk\/non-classifiee\/tutorial-xpath-in-selenium-et-autres-outils-automatises\/"},"modified":"2024-10-22T14:15:14","modified_gmt":"2024-10-22T12:15:14","slug":"tutorial-xpath-in-selenium-et-autres-outils-automatises","status":"publish","type":"post","link":"https:\/\/ittester.sk\/fr\/tests-automatises\/tutoriel-selenium\/tutorial-xpath-in-selenium-et-autres-outils-automatises\/","title":{"rendered":"Tutoriel XPath dans Selenium et autres outils automatis\u00e9s"},"content":{"rendered":"\n<p>Dans ce tutoriel xPath, nous allons couvrir l&rsquo;utilisation du localisateur XPath dans Selenium WebDriver et d&rsquo;autres outils automatis\u00e9s. Dans notre article sur la recherche de WebElements dans Selenium, nous avons \u00e9tudi\u00e9 les diff\u00e9rents types de localisateurs utilis\u00e9s dans Selenium WebDriver.<\/p>\n\n<p>Nous \u00e9tudierons ici comment cr\u00e9er des localisateurs Xpath, les diff\u00e9rents types de Xpath et comment rechercher des \u00e9l\u00e9ments dynamiques \u00e0 l&rsquo;aide de XPath.<\/p>\n\n<h2 class=\"wp-block-heading\"><strong>Table des mati\u00e8res<\/strong><\/h2>\n<div class=\"wp-block-aioseo-table-of-contents\"><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-co-je-to-xpath\">\u010co je to XPath?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-ake-su-rozne-typy-xpath\">Ak\u00e9 s\u00fa r\u00f4zne typy XPath?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-vyhladavanie-dynamickych-prvkov-pomocou-xpaths\">Vyh\u013ead\u00e1vanie dynamick\u00fdch prvkov pomocou XPaths<\/a><\/li><\/ul><\/div>\n<h2 class=\"wp-block-heading\" id=\"aioseo-co-je-to-xpath\">Qu&rsquo;est-ce que XPath ?<\/h2>\n\n<p>XPath peut \u00eatre d\u00e9fini comme un langage de requ\u00eate utilis\u00e9 pour naviguer dans les documents XML afin d&rsquo;y trouver diff\u00e9rents \u00e9l\u00e9ments. La syntaxe de base de l&rsquo;expression XPath est la suivante:-<\/p>\n\n<p><strong>\/\/tag[@attributeName=&rsquo;attributeValues&rsquo;]<\/strong><\/p>\n\n<p>Prenons maintenant un exemple pour comprendre les diff\u00e9rents \u00e9l\u00e9ments de la syntaxe d&rsquo;expression Xpath : les balises, les attributs et les valeurs d&rsquo;attribut. Examinez l&rsquo;image suivante d&rsquo;une page web de Google avec Firebug contr\u00f4lant la div de la barre de recherche.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"497\" src=\"https:\/\/ittester.sk\/wp-content\/uploads\/2023\/11\/x-path-1030-500-1024x497.webp\" alt=\"Capture d'&#xE9;cran de la syntaxe des expressions XPath\" class=\"wp-image-703\" srcset=\"https:\/\/ittester.sk\/wp-content\/uploads\/2023\/11\/x-path-1030-500-1024x497.webp 1024w, https:\/\/ittester.sk\/wp-content\/uploads\/2023\/11\/x-path-1030-500-300x146.webp 300w, https:\/\/ittester.sk\/wp-content\/uploads\/2023\/11\/x-path-1030-500-768x373.webp 768w, https:\/\/ittester.sk\/wp-content\/uploads\/2023\/11\/x-path-1030-500.webp 1030w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">La syntaxe des expressions XPath est tr\u00e8s utile pour cr\u00e9er d&rsquo;autres expressions XPath.  <\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li><strong>&lsquo;\/&rsquo; ou &lsquo;\/\/&rsquo;<\/strong> &#8211; La barre oblique simple et la barre oblique double sont utilis\u00e9es pour cr\u00e9er des chemins XPath absolus et relatifs (expliqu\u00e9s plus loin dans ce tutoriel). Une simple barre oblique est utilis\u00e9e pour commencer la s\u00e9lection \u00e0 partir du n\u0153ud racine. La double barre oblique est utilis\u00e9e pour r\u00e9cup\u00e9rer le n\u0153ud courant correspondant \u00e0 la s\u00e9lection. Pour l&rsquo;instant, nous utiliserons \u00ab\u00a0\/\/\u00a0\u00bb.<\/li>\n\n\n\n<li>&lt;&gt;B<strong>alise <\/strong>&#8211; Les balises HTML commencent par &lsquo; &lsquo; et se terminent par &lsquo; &lsquo;. Ils sont utilis\u00e9s pour entourer diff\u00e9rents \u00e9l\u00e9ments et fournir des informations sur le traitement de ces \u00e9l\u00e9ments. Dans l&rsquo;image ci-dessus, les balises \u00ab\u00a0div\u00a0\u00bb et \u00ab\u00a0input\u00a0\u00bb sont affich\u00e9es.<\/li>\n\n\n\n<li><strong>Attribut<\/strong> &#8211; Les attributs d\u00e9finissent les propri\u00e9t\u00e9s des \u00e9l\u00e9ments HTML. Dans la figure ci-dessus, les attributs de l&rsquo;\u00e9l\u00e9ment ext\u00e9rieur div sont id, classes et dir.<\/li>\n\n\n\n<li><strong>AttributeValue<\/strong> &#8211; Les valeurs d&rsquo;attributs, comme leur nom l&rsquo;indique, sont des valeurs d&rsquo;attributs, par ex. \u00ab\u00a0sb_ifc0\u00a0\u00bb est la valeur de l&rsquo;attribut \u00ab\u00a0id\u00a0\u00bb.<\/li>\n<\/ul>\n\n<p>En utilisant la syntaxe XPath pr\u00e9sent\u00e9e ci-dessus, nous pouvons cr\u00e9er plusieurs expressions XPath pour la barre de recherche-div de Google pr\u00e9sent\u00e9e dans l&rsquo;image, telles que \/\/div[@id=&rsquo;sb_ifc0\u2032], \/\/div[@class=&rsquo;sbib_b&rsquo;], ou \/\/div[@dir=&rsquo;ltr&rsquo;]. Chacune de ces expressions peut \u00eatre utilis\u00e9e pour r\u00e9cup\u00e9rer l&rsquo;\u00e9l\u00e9ment souhait\u00e9, \u00e0 condition que les attributs s\u00e9lectionn\u00e9s soient uniques.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-ake-su-rozne-typy-xpath\">Quels sont les diff\u00e9rents types de XPath ?<\/h2>\n\n<p>Il existe deux types d&rsquo;expressions XPath :<\/p>\n\n<ul class=\"wp-block-list\">\n<li><strong>XPath absolu<\/strong> &#8211; Les expressions XPath cr\u00e9\u00e9es \u00e0 l&rsquo;aide d&rsquo;expressions XPath absolues commencent la s\u00e9lection \u00e0 partir du n\u0153ud racine. Ces expressions commencent par un caract\u00e8re \u00ab\u00a0\/\u00a0\u00bb ou un n\u0153ud racine et parcourent l&rsquo;ensemble du DOM pour atteindre l&rsquo;\u00e9l\u00e9ment.<\/li>\n\n\n\n<li><strong>XPath relatif<\/strong> &#8211; Les expressions XPath relatives sont beaucoup plus compactes et utilisent des doubles barres obliques \u00ab\u00a0\/\/\u00a0\u00bb. Ces expressions XPath peuvent s\u00e9lectionner des \u00e9l\u00e9ments \u00e0 n&rsquo;importe quel endroit correspondant aux crit\u00e8res de s\u00e9lection et ne commen\u00e7ant pas n\u00e9cessairement par le n\u0153ud racine.<\/li>\n<\/ul>\n\n<p>Laquelle de ces deux expressions est la meilleure ?\u00a0\u00bb &#8211; Les expressions XPath relatives sont consid\u00e9r\u00e9es comme meilleures parce qu&rsquo;elles sont plus faciles \u00e0 lire et \u00e0 cr\u00e9er ; elles sont \u00e9galement plus robustes. Le probl\u00e8me des chemins XPath absolus est que m\u00eame un petit changement dans le DOM entre le chemin du n\u0153ud racine et l&rsquo;\u00e9l\u00e9ment d\u00e9sir\u00e9 peut invalider le chemin XPath.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-vyhladavanie-dynamickych-prvkov-pomocou-xpaths\">Recherche d&rsquo;\u00e9l\u00e9ments dynamiques \u00e0 l&rsquo;aide de XPaths<\/h2>\n\n<p>Dans le domaine de l&rsquo;automatisation, il arrive souvent que les \u00e9l\u00e9ments ne soient pas dot\u00e9s d&rsquo;attributs uniques permettant de les identifier de mani\u00e8re unique, ou que les \u00e9l\u00e9ments soient g\u00e9n\u00e9r\u00e9s de mani\u00e8re dynamique, la valeur de l&rsquo;attribut n&rsquo;\u00e9tant pas connue \u00e0 l&rsquo;avance.<\/p>\n\n<p>Dans ce cas, XPath propose plusieurs m\u00e9thodes de recherche d&rsquo;\u00e9l\u00e9ments, par exemple en utilisant le texte \u00e9crit au-dessus des \u00e9l\u00e9ments, en utilisant l&rsquo;index de l&rsquo;\u00e9l\u00e9ment, en utilisant une valeur d&rsquo;attribut partiellement correspondante, en se d\u00e9pla\u00e7ant vers un fr\u00e8re, un enfant ou un parent de l&rsquo;\u00e9l\u00e9ment qui peut \u00eatre identifi\u00e9 de mani\u00e8re unique, et ainsi de suite.<\/p>\n\n<p><strong>Utilisation de la fonction text()<\/strong><\/p>\n\n<p>La fonction text() permet de trouver un \u00e9l\u00e9ment en fonction du texte \u00e9crit au-dessus de lui. XPath pour le bouton \u00ab\u00a0GoogleSearch\u00a0\u00bb :<\/p>\n\n<p><strong>[text()=&rsquo;Google Search&rsquo;]\/\/*<\/strong> (ici, nous avons utilis\u00e9 &lsquo;*&rsquo; pour faire correspondre n&rsquo;importe quelle balise avec le texte souhait\u00e9)<strong> <\/strong><\/p>\n\n<p><strong>Utilisation de la fonction contains()<\/strong><\/p>\n\n<p>La fonction contains() permet \u00e9galement de comparer les valeurs d&rsquo;attributs partiellement identiques. Cette fonction est particuli\u00e8rement utile pour rechercher des valeurs dynamiques dont une partie reste constante, par exemple Le XPath pour la div externe dans l&rsquo;image ci-dessus avec l&rsquo;id \u00ab\u00a0sb_ifc0\u00a0\u00bb peut \u00e9galement \u00eatre trouv\u00e9 avec l&rsquo;id partiel &#8211; \u00ab\u00a0sb\u00a0\u00bb en utilisant contains() &#8211; <strong>\/\/div[contains(@id,&rsquo;sb&rsquo;)]<\/strong><\/p>\n\n<p><strong>Utilisation de l&rsquo;index des \u00e9l\u00e9ments<\/strong><\/p>\n\n<p>En sp\u00e9cifiant la position de l&rsquo;index entre crochets, nous pouvons passer au ni\u00e8me \u00e9l\u00e9ment satisfaisant \u00e0 la condition, par exemple <strong>\/\/div[@id=&rsquo;elementid&rsquo;]\/input[4]<\/strong> r\u00e9cup\u00e8re le quatri\u00e8me \u00e9l\u00e9ment d&rsquo;entr\u00e9e \u00e0 l&rsquo;int\u00e9rieur de l&rsquo;\u00e9l\u00e9ment div.<\/p>\n\n<p><strong>Utiliser les axes XPath<\/strong><\/p>\n\n<p>Les axes XPath permettent de localiser des \u00e9l\u00e9ments web complexes en les faisant passer par un fr\u00e8re, un descendant ou un parent d&rsquo;autres \u00e9l\u00e9ments facilement identifiables. Les axes les plus utilis\u00e9s sont les suivants :<\/p>\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td><strong>enfant<\/strong><\/td><td><strong>S\u00e9lection des n\u0153uds enfants du n\u0153ud de r\u00e9f\u00e9rence.<\/strong><strong><br\/><\/strong><strong>Syntaxe &#8211; XpathForReferenceNode\/child::tag<\/strong><\/td><\/tr><tr><td><strong>parent<\/strong><\/td><td>S\u00e9lection du n\u0153ud parent du n\u0153ud de r\u00e9f\u00e9rence.<br\/>Syntaxe &#8211; XpathForReferenceNode\/parent::tag<\/td><\/tr><tr><td><strong>suivant<\/strong><\/td><td>S\u00e9lectionnez tous les n\u0153uds qui suivent le n\u0153ud de r\u00e9f\u00e9rence.<br\/>Syntaxe &#8211; XpathForReferenceNode\/following::tag<\/td><\/tr><tr><td><strong>pr\u00e9c\u00e9dent<\/strong><\/td><td>S\u00e9lectionnez tous les n\u0153uds situ\u00e9s avant le n\u0153ud de r\u00e9f\u00e9rence.<br\/>Syntaxe &#8211; XpathForReferenceNode\/preceding::tag<\/td><\/tr><tr><td><strong>anc\u00eatre<\/strong><\/td><td>S\u00e9lection de tous les \u00e9l\u00e9ments anc\u00eatres avant le n\u0153ud de r\u00e9f\u00e9rence.<br\/>Syntaxe &#8211; XpathForReferenceNode\/ancestor::tag<\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>XPath peut \u00eatre d\u00e9fini comme un langage de requ\u00eate utilis\u00e9 pour naviguer dans les documents XML afin d&rsquo;y trouver diff\u00e9rents \u00e9l\u00e9ments.<\/p>\n","protected":false},"author":8,"featured_media":2911,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[53],"tags":[],"class_list":["post-2909","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriel-selenium"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/posts\/2909","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/comments?post=2909"}],"version-history":[{"count":1,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/posts\/2909\/revisions"}],"predecessor-version":[{"id":2912,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/posts\/2909\/revisions\/2912"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/media\/2911"}],"wp:attachment":[{"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/media?parent=2909"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/categories?post=2909"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ittester.sk\/fr\/wp-json\/wp\/v2\/tags?post=2909"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}