Vérifiez la présence de l'élément et la commande waitFor dans Selenium

⚡ Résumé intelligent

Vérifier la présence de l'élément et les commandes waitFor dans Selenium L'IDE vérifie qu'une page contient les éléments et le texte attendus par un test, et interrompt la lecture jusqu'à ce qu'une condition dynamique devienne vraie avant l'exécution de l'étape suivante.

  • (I.e. Vérifications des éléments : La fonction verifyElementPresent renvoie TRUE lorsque le localisateur correspond à un élément de la page, et la fonction verifyElementNotPresent est son exact inverse.
  • ☑️ Vérifications de texte : La fonction verifyTextPresent effectue une recherche sur l'ensemble de la page et est sensible à la casse ; par conséquent, « Atlanta » ne correspond jamais à « atlanta ».
  • Vérifications de position : Les fonctions verifyElementPositionLeft et verifyElementPositionTop comparent le décalage en pixels d'un élément par rapport au bord de la page.
  • 🧪 Chargement de la page : Les commandes andWait, telles que clickAndWait, suspendent le script jusqu'à ce que la nouvelle page ait fini de se charger.
  • Contenu dynamique : Les commandes waitFor attendent une condition au lieu du chargement de la page, ce qui convient aux écrans AJAX qui ne se rechargent jamais.
  • (I.e. IDE actuel : L'extension pour navigateur renomme ces étapes et attribue à chaque commande d'attente son propre délai d'attente en millisecondes.

Vérifier la présence de l'élément et la commande waitFor dans Selenium IDE

Un enregistré Selenium IDE Le script gère les clics et les frappes, mais ne détermine jamais par lui-même si l'application s'est comportée correctement. Deux familles de commandes s'en chargent : vérifier des commandes qui vérifient l'état de la page, et attendez commandes qui suspendent l'exécution jusqu'à ce que la page soit prête à être vérifiée.

⚠️ Remarque concernant les versions : Les captures d'écran ci-dessous proviennent de l'original Firefox-brancher Selenium L'IDE, qui n'est plus distribué, utilise ses noms Selenese en camelCase. L'IDE actuel est Chrome. Firefox et bord extension du navigateurLe comportement décrit ici reste valable, mais plusieurs noms de commandes ont changé — une carteping Le tableau apparaît plus loin dans cet article, et chaque commande et capture d'écran originales sont conservées exactement telles que publiées.

Vérifier la présence d'un élément

Nous pouvons utiliser les deux commandes suivantes pour vérifier la présence d'un élément :

  • verifyElementPresent – renvoie TRUE si l'élément spécifié a été TROUVÉ dans la page ; FAUX sinon
  • verifyElementNotPresent – renvoie TRUE si l'élément spécifié n'a été TROUVÉ nulle part dans la page ; FAUX s'il est présent.

Les deux commandes prennent un élément localisateur dans le Target champ — un identifiant, un nom, un sélecteur CSS, un texte de lien ou un XPath expression — et aucune des deux n'a besoin de valeur.

Le script de test ci-dessous vérifie que la zone de texte Nom d'utilisateur est présente dans le Mercury La page d'accueil de Tours alors que la zone de texte Prénom ne l'est pas. La zone de texte Prénom est en fait un élément présent dans la page d'inscription de Mercury Visites, pas sur la page d'accueil.

Selenium Script IDE utilisant verifyElementPresent sur la zone Nom d'utilisateur et verifyElementNotPresent sur la zone Prénom

Parce que ce sont vérifier commandes plutôt que affirmer En cas d'échec d'une commande, une erreur est consignée dans le journal, mais les étapes restantes s'exécutent néanmoins. Cette distinction est expliquée plus en détail ci-dessous.

Vérifier la présence d'un certain texte dans la commande dans Selenium

Vérifier l'existence d'un élément ne suffit pas toujours ; un test doit souvent confirmer les mots affichés à l'utilisateur. Deux commandes textuelles permettent de répondre à ce besoin.

  • verifyTextPrésent – renvoie TRUE si la chaîne de texte spécifiée a été TROUVÉE quelque part dans la page ; FAUX sinon
  • verifyTextNotPresent – renvoie TRUE si la chaîne de texte spécifiée n'a été TROUVÉE nulle part dans la page ; FAUX s'il a été trouvé

N'oubliez pas que ces commandes sont sensibles à la casse.

Le journal ci-dessous montre la même page vérifiée deux fois avec deux orthographes différentes de la même phrase.

Selenium Journal de l'IDE indiquant que verifyTextPresent réussit pour le trajet Atlanta-Las Vegas et échoue pour le trajet Atlanta-Las Vegas.

Dans le scénario ci-dessus, « Atlanta to Las Vegas » a été traité différemment de « atlanta to Las Vegas » car le « A » d’« Atlanta » était en majuscule dans la première formulation et en minuscule dans la seconde. Lors de l’exécution de la commande verifyTextPresent sur chacune d’elles, l’une a réussi le test tandis que l’autre a échoué.

Vérifier la position spécifique d'un élément

Les défauts de mise en page perturbent rarement le fonctionnement d'un localisateur ; les contrôles de présence ne les détectent donc pas. Les commandes de position comblent cette lacune.

Selenium L'IDE indique la position d'un élément en mesurant (en pixels) sa distance par rapport au bord gauche ou supérieur de la fenêtre du navigateur.

  • verifyElementPositionLeft – vérifie si le nombre de pixels spécifié correspond à la distance entre l'élément et le bord gauche de la page. Cela renverra FALSE si la valeur spécifiée ne correspond pas à la distance du bord gauche.
  • vérifierElementPositionTop – vérifie si le nombre spécifié de pixels correspond à la distance entre l'élément et le bord supérieur de la page. Cela renverra FALSE si la valeur spécifiée ne correspond pas à la distance du bord supérieur.

Le script ci-dessous enregistre les décalages de pixels attendus dans la colonne Valeur.

Selenium Étapes de l'IDE utilisant verifyElementPositionLeft et verifyElementPositionTop avec des valeurs en pixels dans la colonne Valeur

Manipulez ces deux commandes avec précaution. Le décalage en pixels varie selon la taille de la fenêtre, le niveau de zoom et les polices installées ; une valeur fixe qui fonctionne sur une machine peut donc ne pas fonctionner sur une autre.

Attendre les commandes dans Selenium

Une commande de vérification ne peut inspecter que ce qui est déjà affiché à l'écran ; par conséquent, une vérification exécutée trop tôt échoue même si l'application fonctionne. Les commandes d'attente résolvent ce problème de synchronisation.

Voici les types de commandes d'attente dans Selenium

Commandes andWait

Ce sont des commandes qui attendront le chargement d’une nouvelle page avant de passer à la commande suivante.

Des exemples sont

  • cliquerEtAttendre
  • tapezEtAttendez
  • sélectionnerEtattendre

Chacune d'elles est une commande d'action ordinaire à laquelle est ajouté le suffixe AndWait, comme le montre l'étape enregistrée ci-dessous.

Étape clic et attente enregistrée en maintenant le Selenium Script IDE jusqu'à ce que la page suivante soit entièrement chargée

Commandes waitFor

Ce sont des commandes qui attendent qu'une condition spécifiée devienne vraie avant de passer à la commande suivante (indépendamment du chargement d'une nouvelle page). Ces commandes sont plus appropriées pour être utilisées sur des sites Web dynamiques basés sur AJAX qui modifient les valeurs et les éléments sans recharger la page entière. Les exemples comprennent:

  • attendre le titre
  • attendreTextePrésent
  • attendreAlerte

Considérez le scénario Facebook ci-dessous.

Formulaire d'inscription Facebook affichant le lien « Pourquoi dois-je fournir le lien de ma date de naissance avant de cliquer ? »

Nous pouvons utiliser une combinaison de « clic » et « waitForTextPresent » pour vérifier la présence du texte « Indiquer votre anniversaire ».

Selenium Dans l'IDE, associez un clic à waitForTextPresent pour attendre la saisie de votre texte d'anniversaire.

Nous ne pouvons pas utiliser clickAndWait car aucune page n'a été chargée en cliquant sur « Pourquoi dois-je indiquer ma date de naissance ? » lien. Si nous le faisons, le test échouera

La même règle s'applique à tout contenu injecté par script plutôt que par navigation, et c'est pourquoi Écrans pilotés par AJAX Il faut presque toujours utiliser waitFor plutôt que andWait.

Commandes Assert vs Verify vs waitFor dans Selenium IDE

Les débutants choisissent souvent la mauvaise famille et se demandent ensuite pourquoi une suite s'arrête au premier défaut, ou pourquoi elle signale vingt pannes qui ne semblent pas être dues à un problème. tracRetour à la question initiale. Les trois préfixes répondent à trois questions différentes.

Titre Ce qu'il fait En cas d'échec Meilleur utilisé pour
affirmer Vérifie immédiatement une condition Consigne l'échec et interrompt le cas de test. Préconditions — une authentification qui doit réussir pour que tout le reste soit possible
vérifier Vérifie immédiatement une condition Consigne l'échec et passe à la commande suivante Des contrôles indépendants, comme la présence de plusieurs étiquettes sur une même page de confirmation.
attendre Des sondages jusqu'à ce que la condition devienne vraie Enregistre l'échec une fois le délai d'attente expiré, puis continue. Tout ce qui apparaît en retard — réponses AJAX, indicateurs de chargement, boîtes de dialogue

Une méthode pratique combine les trois : vérifier la page d’arrivée, attendre l’élément qui arrive de manière asynchrone, puis vérifier chaque champ individuellement. En procédant ainsi, une navigation défectueuse interrompt le test prématurément, tandis que plusieurs incohérences mineures sont toutes signalées en une seule exécution. Cette même rigueur s’applique à Selenium tests écrits en code, dont les équivalents sont les assertions strictes, les assertions souples et les attentes explicites.

Commandes de vérification et d'attente dans le courant Selenium IDE

Le FirefoxLe plugin IDE qui a permis de générer les captures d'écran ci-dessus a été abandonné et son ensemble de commandes a été entièrement repensé pour l'extension de navigateur actuelle. Plusieurs noms Selenese ont été conservés, certains ont été renommés et quelques-uns ont été supprimés. Le tableau ci-dessous établit une correspondance entre les commandes utilisées dans cet article et leurs équivalents actuels, tirés de la documentation officielle. Selenium Référence des commandes de l'IDE.

Commande sélénienne héritée Commande dans l'EDI actuel
verifyElementPresent vérifier la présence de l'élément
verifyElementNotPresent élément de vérification absent
verifyTextPrésent vérifier le texte (limité à un localisateur d'élément, et non à la page entière)
verifyTextNotPresent vérifier que ce n'est pas du texte (limité à un localisateur d'élément)
vérifier le titre vérifier le titre
vérifierPositionÉlémentGauche / vérifierPositionÉlémentHaut Aucun équivalent — les affirmations de position ont été abandonnées
cliquer et attendre, saisir et attendre, sélectionner et attendre Pas de suffixe AndWait — la commande open attend déjà le chargement de la page
waitForElementPrésent attendre que l'élément soit présent, avec un temps d'attente en millisecondes
attendreAlerte Afficher l'alerte ou vérifier le texte de l'alerte après l'affichage de la boîte de dialogue

Deux différences sont particulièrement importantes au quotidien. Premièrement, les commandes d'attente actuelles (attendre la présence de l'élément, attendre la visibilité de l'élément, attendre la modification de l'élément et leurs versions négatives) spécifient chacune un temps d'attente en millisecondes, ce qui évite aux opérations lentes de partager un délai d'attente global. Deuxièmement, la recherche de texte sur toute la page a disparu : la vérification de texte nécessite un localisateur, ce qui permet généralement une vérification plus précise.

Erreurs courantes avec les commandes Verify et waitFor

La plupart des problèmes signalés avec ces commandes ne sont pas des défauts de l'IDE. La liste ci-dessous répertorie les erreurs les plus fréquentes et leurs solutions.

  • L'élément existe, mais la vérification échoue toujours. La présence et la visibilité sont deux états différents. Un élément masqué par une règle CSS est toujours présent dans le DOM ; il est donc conseillé d’associer la vérification de présence à l’attente de la visibilité de l’élément lorsque le test dépend de la visualisation effective de l’élément par l’utilisateur.
  • Une vérification de texte échoue sur des formulations apparemment identiques. Les espaces insécables, les espaces blancs de fin de chaîne et les apostrophes courbes copiées d'un document de conception empêchent une correspondance exacte. Veuillez saisir manuellement la chaîne attendue plutôt que de la coller.
  • Une commande d'attente expire sur une page qui s'est pourtant clairement chargée. L'élément se trouve généralement dans une iframe. Exécutez d'abord la commande select frame, sinon le localisateur sera évalué sur le mauvais document.
  • ClickAndWait se bloque sur une application monopage. Aucune navigation n'a lieu, il n'y a donc rien à attendre. Remplacez-la par un clic suivi de la commande waitFor appropriée.
  • La vérification de position réussit en local mais échoue sur le serveur de compilation. La taille de l'écran et le rendu des polices varient. Privilégiez une vérification de présence ou de texte, ou définissez explicitement la taille de la fenêtre au début du test.
  • L'ensemble de la suite s'arrête à la première incohérence. Une commande assert a été enregistrée à la place d'une commande verify. Modifiez le préfixe : l'exécution signalera alors chaque échec au lieu du premier seulement.

Une fois qu'un script a survécu à ces pièges, l'étape suivante consiste généralement à stocker les valeurs d'exécution dans des variables Les vérifications comparent donc les données à des données réelles plutôt qu'à des chaînes de caractères codées en dur.

FAQ

L'ancien EDI partageait un délai d'attente global pour chaque étape d'attente, modifié par la commande setTimeout. L'extension actuelle définit explicitement un temps d'attente en millisecondes pour chaque commande d'attente ; ainsi, un écran lent n'entraîne plus un délai d'attente aussi long pour toutes les autres étapes.

Non. La pause suspend toujours l'exécution pendant toute la durée, ce qui représente une perte de temps lorsque la page se charge rapidement et reste inefficace lorsqu'elle se charge lentement. Utilisez-la uniquement pour illustrer une étape lors d'une démonstration, jamais dans une suite de tests que vous prévoyez d'exécuter de manière répétée.

Non. La présence signifie que le nœud existe dans le DOM, ce qui reste vrai pour les éléments masqués par CSS ou situés hors écran. Si le test dépend de la visibilité de l'élément par l'utilisateur, ajoutez une condition d'attente de visibilité de l'élément en plus de la vérification de présence.

Oui, et l'IDE actuel l'exige. Sa commande de vérification de texte prend un localisateur d'élément et la chaîne attendue, ce qui est plus strict que l'ancienne recherche sur toute la page et empêche un élément de menu sans rapport avec le sujet de satisfaire une vérification qu'il n'est pas censé satisfaire.

Code La fonction `export` transforme chaque commande en une instruction équivalente dans le langage cible ; ainsi, une étape d'attente devient une attente explicite de WebDriver. Lisez le fichier généré avant de lui faire confiance, car les délais d'attente et la gestion des erreurs (transitoires ou matérielles) ne sont pas toujours conservés intacts après la conversion.

Les modèles d'apprentissage automatique analysent les données d'exécution historiques et signalent les étapes qui échouent de manière intermittente plutôt que systématique, ce qui est caractéristique d'une attente manquante. La réparation des localisateurs assistée par l'IA s'attaque à l'autre cause fréquente en proposant un nouveau sélecteur lorsque le balisage change.

Il gère bien la partie mécanique — transformant une étape d'attente en un WebDriverWait avec une condition attendue. RevVérifiez le délai d'attente et la condition choisis, car une condition de présence générée doit souvent être une condition de visibilité.

Les localisateurs sont évalués par rapport au document actuellement sélectionné, et une iframe est considérée comme un élément distinct. Exécutez d'abord la commande de sélection de l'iframe, puis la vérification, et revenez ensuite au document principal afin que les étapes suivantes ne soient pas effectuées dans un contexte inapproprié.

Résumez cet article avec :