Sélecteurs
Le Protocole WebDriver fournit plusieurs stratĂ©gies de sĂ©lection pour interroger un Ă©lĂ©ment. WebdriverIO les simplifie pour faciliter la sĂ©lection des Ă©lĂ©ments. Veuillez noter que mĂȘme si la commande pour interroger les Ă©lĂ©ments s'appelle $
et $$
, elles n'ont rien à voir avec jQuery ou le Moteur de Sélection Sizzle.
Bien qu'il existe de nombreux sélecteurs différents, seuls quelques-uns d'entre eux offrent un moyen fiable de trouver le bon élément. Par exemple, étant donné le bouton suivant :
<button
id="main"
class="btn btn-large"
name="submission"
role="button"
data-testid="submit"
>
Submit
</button>
Nous recommandons et ne recommandons pas les sélecteurs suivants :
Sélecteur | Recommandé | Notes |
---|---|---|
$('button') | đš Jamais | Le pire - trop gĂ©nĂ©rique, sans contexte. |
$('.btn.btn-large') | đš Jamais | Mauvais. CouplĂ© au style. TrĂšs susceptible de changer. |
$('#main') | â ïž Avec parcimonie | Mieux. Mais toujours couplĂ© au style ou aux Ă©couteurs d'Ă©vĂ©nements JS. |
$(() => document.queryElement('button')) | â ïž Avec parcimonie | RequĂȘte efficace, complexe Ă Ă©crire. |
$('button[name="submission"]') | â ïž Avec parcimonie | CouplĂ© Ă l'attribut name qui a une sĂ©mantique HTML. |
$('button[data-testid="submit"]') | â Bon | NĂ©cessite un attribut supplĂ©mentaire, non liĂ© Ă l'a11y. |
$('aria/Submit') ou $('button=Submit') | â Toujours | Le meilleur. Ressemble Ă la façon dont l'utilisateur interagit avec la page. Il est recommandĂ© d'utiliser les fichiers de traduction de votre frontend pour que vos tests ne Ă©chouent jamais lorsque les traductions sont mises Ă jour |
SĂ©lecteur CSSâ
Sauf indication contraire, WebdriverIO interrogera les éléments en utilisant le modÚle de sélecteur CSS, par exemple :
loading...
Texte de lienâ
Pour obtenir un élément d'ancrage avec un texte spécifique, interrogez le texte en commençant par un signe égal (=
).
Par exemple :
loading...
Vous pouvez interroger cet élément en appelant :
loading...
Texte de lien partielâ
Pour trouver un élément d'ancrage dont le texte visible correspond partiellement à votre valeur de recherche,
interrogez-le en utilisant *=
devant la chaĂźne de requĂȘte (par exemple, *=driver
).
Vous pouvez également interroger l'élément de l'exemple ci-dessus en appelant :
loading...
Remarque : Vous ne pouvez pas mĂ©langer plusieurs stratĂ©gies de sĂ©lection dans un seul sĂ©lecteur. Utilisez plutĂŽt plusieurs requĂȘtes d'Ă©lĂ©ments chaĂźnĂ©es pour atteindre le mĂȘme objectif, par exemple :
const elem = await $('header h1*=Welcome') // ne fonctionne pas !!!
// utilisez plutĂŽt
const elem = await $('header').$('*=driver')
ĂlĂ©ment avec un texte spĂ©cifiqueâ
La mĂȘme technique peut ĂȘtre appliquĂ©e aux Ă©lĂ©ments Ă©galement. De plus, il est Ă©galement possible de faire une correspondance insensible Ă la casse en utilisant .=
ou .*=
dans la requĂȘte.
Par exemple, voici une requĂȘte pour un titre de niveau 1 avec le texte "Welcome to my Page" :
loading...
Vous pouvez interroger cet élément en appelant :
loading...
Ou en utilisant une requĂȘte de texte partiel :
loading...
La mĂȘme chose fonctionne pour les noms d'id
et de class
:
loading...
Vous pouvez interroger cet élément en appelant :
loading...
Remarque : Vous ne pouvez pas mĂ©langer plusieurs stratĂ©gies de sĂ©lection dans un seul sĂ©lecteur. Utilisez plutĂŽt plusieurs requĂȘtes d'Ă©lĂ©ments chaĂźnĂ©es pour atteindre le mĂȘme objectif, par exemple :
const elem = await $('header h1*=Welcome') // ne fonctionne pas !!!
// utilisez plutĂŽt
const elem = await $('header').$('h1*=Welcome')
Nom de baliseâ
Pour interroger un élément avec un nom de balise spécifique, utilisez <tag>
ou <tag />
.
loading...
Vous pouvez interroger cet élément en appelant :
loading...
Attribut Nameâ
Pour interroger des éléments avec un attribut name spécifique, vous pouvez soit utiliser un sélecteur CSS3 normal, soit la stratégie de nom fournie par le JSONWireProtocol en passant quelque chose comme [name="some-name"] comme paramÚtre de sélecteur :
loading...
loading...
Remarque : Cette stratégie de sélection est obsolÚte et ne fonctionne que dans les anciens navigateurs qui sont exécutés par le protocole JSONWireProtocol ou en utilisant Appium.
xPathâ
Il est également possible d'interroger des éléments via un xPath spécifique.
Un sélecteur xPath a un format comme //body/div[6]/div[1]/span[1]
.
loading...
Vous pouvez interroger le deuxiĂšme paragraphe en appelant :
loading...
Vous pouvez utiliser xPath pour également parcourir l'arbre DOM vers le haut et vers le bas :
loading...
SĂ©lecteur de nom d'accessibilitĂ©â
Interrogez les Ă©lĂ©ments par leur nom accessible. Le nom accessible est ce qui est annoncĂ© par un lecteur d'Ă©cran lorsque cet Ă©lĂ©ment reçoit le focus. La valeur du nom accessible peut ĂȘtre Ă la fois du contenu visuel ou des alternatives textuelles cachĂ©es.
Vous pouvez en savoir plus sur ce sélecteur dans notre article de blog de lancement
Récupérer par aria-label
â
loading...
loading...
Récupérer par aria-labelledby
â
loading...
loading...
RĂ©cupĂ©rer par contenuâ
loading...
loading...
RĂ©cupĂ©rer par titreâ
loading...
loading...
Récupérer par propriété alt
â
loading...
loading...
ARIA - Attribut Roleâ
Pour interroger des éléments basés sur les rÎles ARIA, vous pouvez spécifier directement le rÎle de l'élément comme [role=button]
en tant que paramÚtre de sélecteur :
loading...
loading...
Attribut IDâ
La stratégie de localisation "id" n'est pas prise en charge dans le protocole WebDriver, il faut utiliser les stratégies de sélecteur CSS ou xPath pour trouver des éléments en utilisant l'ID.
Cependant, certains pilotes (par exemple Appium You.i Engine Driver) pourraient encore prendre en charge ce sélecteur.
Les syntaxes de sélecteur actuellement prises en charge pour l'ID sont :
//localisateur css
const button = await $('#someid')
//localisateur xpath
const button = await $('//*[@id="someid"]')
//stratégie id
// Remarque : fonctionne uniquement dans Appium ou des frameworks similaires qui prennent en charge la stratégie de localisation "ID"
const button = await $('id=resource-id/iosname')
Fonction JSâ
Vous pouvez également utiliser des fonctions JavaScript pour récupérer des éléments en utilisant les API web natives. Bien sûr, vous ne pouvez le faire que dans un contexte web (par exemple, browser
, ou contexte web sur mobile).
Ătant donnĂ© la structure HTML suivante :
loading...
Vous pouvez interroger l'élément frÚre de #elem
comme suit :