Contactez-nous

Identifier les erreurs : 'Element not found', 'Keyword not found'

Apprenez à identifier et résoudre les erreurs fréquentes 'Element not found' et 'Keyword not found' dans Robot Framework pour des tests plus stables et fiables.

Comprendre l'erreur "Element not found"

L'erreur "Element not found" (ou ses variantes comme "Element with locator '...' not found") est sans doute l'une des plus rencontrées lors de l'automatisation des tests d'interfaces web avec SeleniumLibrary dans Robot Framework. Elle signifie simplement que le framework n'a pas réussi à localiser l'élément HTML sur lequel il tentait d'effectuer une action (cliquer, saisir du texte, vérifier une propriété, etc.) en utilisant le sélecteur que vous avez fourni.

Plusieurs raisons peuvent conduire à cette erreur. La plus évidente est un sélecteur incorrect ou invalide. Peut-être y a-t-il une faute de frappe dans l'ID, le nom, l'expression XPath ou le sélecteur CSS. Il est également possible que la structure de la page ait changé depuis la dernière écriture du test, rendant l'ancien sélecteur obsolète. Les applications web évoluent, et les sélecteurs doivent parfois être mis à jour en conséquence.

Une autre cause fréquente est un problème de timing ou de synchronisation. L'élément n'est peut-être pas encore présent ou visible sur la page au moment où Robot Framework tente d'interagir avec lui. Les applications web modernes chargent souvent du contenu de manière asynchrone (par exemple, via des appels AJAX). Si votre script est plus rapide que le chargement de l'élément, vous obtiendrez une erreur "Element not found". Dans ce cas, l'utilisation de mécanismes d'attente explicite (explicit waits) est cruciale, comme nous le verrons plus en détail dans un autre chapitre.

Parfois, l'élément peut être présent dans le DOM (Document Object Model) de la page, mais pas dans l'état attendu pour l'interaction. Par exemple, il peut être caché (display: none), désactivé, ou recouvert par un autre élément (comme une modale ou un overlay). SeleniumLibrary ne pourra généralement pas interagir avec des éléments invisibles ou non interactifs, ce qui peut se manifester par cette erreur, ou des erreurs similaires indiquant que l'élément n'est pas cliquable ou interactif.

Enfin, l'élément peut se trouver à l'intérieur d'un iframe. Les iframes créent un contexte de navigation distinct. Si l'élément cible est dans un iframe, vous devez d'abord basculer le contexte de Selenium vers cet iframe (en utilisant Select Frame) avant de pouvoir interagir avec ses éléments. Oublier cette étape conduit inévitablement à une erreur "Element not found" car l'élément n'est pas accessible depuis le contexte principal de la page.

Stratégies de diagnostic pour "Element not found"

Lorsque vous êtes confronté à une erreur "Element not found", la première étape est de vérifier la validité de votre sélecteur. Utilisez les outils de développement de votre navigateur (Inspecteur d'éléments) pour examiner la structure HTML de la page au moment de l'erreur. Essayez de localiser l'élément manuellement en utilisant le sélecteur dans la console des outils de développement (par exemple, avec document.querySelector("votre_selecteur_css") ou $x("votre_xpath")). Cela vous aidera à confirmer si le sélecteur est correct et s'il cible bien l'élément désiré.

Si le sélecteur semble correct, investiguez les problèmes de synchronisation. Robot Framework et SeleniumLibrary exécutent souvent les étapes très rapidement. Introduisez une attente explicite avant l'action sur l'élément. Par exemple, utilisez Wait Until Element Is Visible ou Wait Until Page Contains Element avec un délai raisonnable :

Wait Until Element Is Visible    id:monElementId    timeout=10s
Click Element    id:monElementId

Si cela résout le problème, c'est un signe clair d'un souci de synchronisation. Préférez toujours les attentes conditionnelles aux pauses fixes (Sleep).

Prenez une capture d'écran au moment de l'échec. SeleniumLibrary peut être configurée pour le faire automatiquement en cas d'erreur (avec l'option run_on_failure=Capture Page Screenshot lors de l'import de la librairie). L'image peut révéler l'état de la page : une modale inattendue, un chargement incomplet, ou un message d'erreur de l'application elle-même. Cela donne un contexte visuel précieux.

Vérifiez si l'élément est à l'intérieur d'un iframe. Si c'est le cas, vous devez explicitement basculer vers cet iframe avant d'essayer de trouver l'élément. Utilisez Select Frame avec l'ID, le nom ou l'index de l'iframe, ou même un sélecteur pointant vers l'élément iframe lui-même. N'oubliez pas de revenir au contexte par défaut avec Unselect Frame une fois que vous avez terminé d'interagir avec les éléments de l'iframe.

Select Frame    id:iframeLogin
Input Text      id:username    monUtilisateur
Unselect Frame

Assurez-vous que l'élément est interactible. Parfois, un élément est dans le DOM mais non visible ou désactivé. Utilisez des keywords comme Element Should Be Visible ou Element Should Be Enabled avant de tenter une action pour confirmer son état. Si un overlay ou une pop-up recouvre l'élément, il faudra d'abord gérer cet overlay (le fermer, attendre sa disparition) avant de pouvoir atteindre l'élément cible.

Comprendre l'erreur "Keyword not found"

L'erreur "Keyword not found" (ou "No keyword with name 'MonKeywordInexistant' found") signifie que Robot Framework n'a pas réussi à identifier ou à accéder à l'implémentation du mot-clé que vous essayez d'appeler dans votre script de test. C'est une erreur de "résolution de nom" au niveau de Robot Framework lui-même.

Les causes les plus fréquentes incluent :

  • Faute de frappe ou casse incorrecte : Les noms des keywords sont sensibles à la casse et aux espaces. Une simple erreur de frappe (Clik Element au lieu de Click Element) ou une différence dans la casse (open browser au lieu de Open Browser) entraînera cette erreur. Robot Framework essaie parfois de faire correspondre les noms de manière insensible à la casse et aux espaces, mais il est préférable de respecter scrupuleusement le nom exact du keyword.
  • Librairie non importée ou mal importée : Si le keyword appartient à une librairie (comme Open Browser de SeleniumLibrary), cette librairie doit être correctement importée dans la section *** Settings *** de votre fichier de test ou d'un fichier de ressources. Vérifiez l'instruction Library MonNomDeLibrairie.
  • Keyword utilisateur non défini ou hors de portée : Si c'est un keyword que vous avez défini vous-même (User Keyword), assurez-vous qu'il est bien défini dans la section *** Keywords *** du même fichier, ou dans un fichier de ressources qui est correctement importé (Resource mon_fichier_de_ressources.robot). Si le keyword est dans un autre fichier, il doit être explicitement rendu accessible.
  • Problème d'installation de la librairie : Si la librairie est externe (non intégrée à Robot Framework), elle doit être installée dans l'environnement Python que Robot Framework utilise. Une installation manquante ou corrompue de robotframework-seleniumlibrary, par exemple, rendra tous ses keywords inaccessibles.
  • Nom du keyword ambigu : Si plusieurs keywords portent le même nom (par exemple, un keyword intégré et un keyword utilisateur, ou deux keywords utilisateurs de librairies différentes), Robot Framework pourrait ne pas savoir lequel utiliser. Dans ce cas, il faut utiliser le nom complet du keyword, en le préfixant par le nom de sa librairie ou de son fichier de ressources : SeleniumLibrary.Open Browser ou MonFichierDeRessources.Mon Keyword Utilisateur.

Stratégies de diagnostic pour "Keyword not found"

La première chose à faire est de vérifier scrupuleusement l'orthographe et la casse du keyword qui pose problème. Comparez-le avec la documentation officielle de la librairie ou avec la définition de votre keyword utilisateur.

Vérifiez les importations dans la section *** Settings ***. Assurez-vous que la ligne Library NomDeLaLibrairie (pour les keywords de librairie) ou Resource chemin/vers/le/fichier_ressource.robot (pour les keywords utilisateurs d'un autre fichier) est présente et correcte. Le chemin vers les fichiers de ressources est relatif au fichier qui les importe.

Si vous utilisez un IDE avec une extension Robot Framework (comme VS Code avec Robot Framework Language Server), celui-ci devrait normalement vous signaler les keywords non reconnus directement dans l'éditeur. Profitez de cette fonctionnalité pour une détection précoce.

Pour les librairies externes, confirmez leur installation dans votre environnement Python. Vous pouvez utiliser pip list dans votre terminal pour voir les paquets installés. Si la librairie est manquante, installez-la avec pip install nom-de-la-librairie-robotframework.

Si vous suspectez une ambiguïté de nom, essayez d'utiliser le nom complet du keyword : NomDeLaLibrairieOuRessource.NomDuKeyword. Par exemple, si vous avez un keyword utilisateur nommé Log et que vous voulez utiliser celui de la librairie BuiltIn, vous écririez BuiltIn.Log.

Les messages d'erreur de Robot Framework sont souvent assez explicites. Lisez attentivement le message complet, car il peut contenir des indices sur la raison pour laquelle le keyword n'a pas été trouvé, ou des suggestions de keywords similaires (en cas de faute de frappe probable).