Gestion des exceptions dans Selenium Pilote Web (Types)

⚡ Résumé intelligent

Gestion des exceptions dans Selenium WebDriver empêche l'arrêt d'une commande ayant échouéping un essai complet. Java try-catch, blocs catch multiples, throw, throws et enfin chacun offre à un script une manière différente de se rétablir.

  • (I.e. Définition: Une exception est une erreur qui se produit lors de l'exécution d'un programme, et une exception non gérée provoque l'arrêt du programme.
  • ☑️ Portée: Selenium WebDriver fournit plus de quarante classes d'exceptions, et chacune d'entre elles dérive de WebDriverException.
  • Les récidivistes : Les exceptions NoSuchElementException, TimeoutException, StaleElementReferenceException et ElementNotInteractableException sont à l'origine de la plupart des défaillances dans le monde réel.
  • 🧪 Manipulation : Une paire try-catch isole un type d'erreur, plusieurs blocs catch en séparent plusieurs, et enfin, elle s'exécute toujours.
  • Escalade: Les mots-clés throw et throws renvoient une exception à l'appelant lorsque la méthode actuelle ne peut pas la résoudre.
  • (I.e. Diagnostic: printStackTracLes fonctions e(), toString() et getMessage() fournissent chacune un niveau de détail différent sur l'échec.

Gestion des exceptions dans Selenium WebDriver avec try-catch, throw et finally

Qu'est-ce qu'une exception ?

Une exception est une erreur qui survient lors de l'exécution d'un programme. Pendant l'exécution d'un programme, le langage de programmation génère une exception qui doit être gérée, faute de quoi le programme plante.

L'exception indique que, bien que l'événement puisse se produire, ce type d'événement est rare. Lorsqu'une méthode ne peut pas gérer l'exception, celle-ci est transmise à sa fonction appelante. Java, ce qui conduit la plupart Selenium Dans les suites WebDriver, chaque exception n'est pas vérifiée, le compilateur ne vous oblige donc jamais à la gérer ; une défaillance non gérée n'apparaît qu'à l'exécution.

Types d'exceptions dans Selenium pilote web

WebDriverException est la classe de base de la hiérarchie, et toutes les exceptions de niveau inférieur en héritent. Le tableau répertorie les 41 exceptions possibles, ainsi que la condition qui les déclenche.

# Exception Quand cela se produit
1 ElementNotVisibleException Un élément existant dans le DOM possède une caractéristique définie comme cachée.
2 Exception d'élément non sélectionnable L'élément est présent dans le DOM mais ne peut pas être sélectionné, l'interaction est donc impossible.
3 NoSuchElementException L'élément est introuvable. localisateur fourni.
4 NoSuchFrameException Le cadre La cible vers laquelle basculer n'existe pas.
5 NoAlertPresentExceptionNoAlertPresentException Un passage à un alerter S'exécute lorsqu'aucune alerte n'est présentée.
6 NoSuchWindowExceptionNoSuchWindowException La fenêtre cible vers laquelle basculer n'existe pas.
7 Exception de référence d'élément obsolète L'élément web est détaché du courant DOM.
8 Exception SessionNotFound Le WebDriver continue d'agir après la fermeture du navigateur.
9 TimeoutException Une commande n'a pas pu être exécutée à temps — par exemple, l'élément recherché n'a pas été trouvé pendant le délai d'attente.
10 WebDriverException Classe de base des autres exceptions WebDriver ; également levée lorsque WebDriver agit juste après la fermeture du navigateur.
11 Exception de connexion fermée Il y a une déconnexion au niveau du pilote.
12 Exception interceptée par clic d'élément L'élément qui reçoit les événements masque l'élément demandé par le clic.
13 Exception ElementNotInteractable L'élément est présent dans le DOM, mais il est impossible d'interagir avec lui.
14 Exception d'erreur dans la réponse Une erreur s'est produite lors de l'interaction avec le Firefox extension ou le serveur de pilotes distant.
15 Gestionnaire d'erreurs.Exception de serveur inconnue Utilisé comme espace réservé lorsque le serveur renvoie une erreur sans pile d'appels. trace.
16 Exception d'échec d'activation de l'IME L'activation du moteur IME a échoué.
17 Exception ImeNotAvailable La prise en charge IME n'est pas disponible.
18 Exception de certificat non sécurisé La navigation a fait en sorte que l'agent utilisateur rencontre un problème. avertissement de certificat, ce qui peut être causé par un certificat TLS invalide ou expiré.
19 Exception d'argument invalide L'argument n'appartient pas au type attendu.
20 Exception de domaine de cookie invalide A gâteau est ajouté sous un domaine différent de celui actuel URL.
21 Exception InvalidCoordinates L'opération d'interaction correspondante n'est pas valide.
22 Exception d'état d'élément invalide La commande ne peut pas être terminée car l'élément est invalide.
23 Exception InvalidSessionId L'identifiant de session fourni ne figure pas parmi les sessions actives ; par conséquent, cette session n'existe pas ou est inactive.
24 InvalidSwitchToTargetException La fenêtre ou le cadre cible vers lequel basculer n'existe pas.
25 JavascriptException Une erreur s'est produite lors de l'exécution JavaScript donné par l'utilisateur.
26 Exception Json La session est demandée alors qu'elle n'est pas encore créée.
27 Exception NoSuchAttribute L'attribut de l'élément est introuvable.
28 MoveTargetException hors limites La cible fournie à la méthode move() d'ActionChains n'est pas valide — par exemple, elle se trouve en dehors du document.
29 NoSuchContextException ContextAware, qui effectue des tests sur appareils mobiles, ne trouve pas le contexte demandé.
30 NoSuchCookieException Aucun cookie correspondant au nom de chemin indiqué n'a été trouvé parmi les cookies du document actuellement consulté.
31 NotFoundException Une sous-classe de WebDriverException, levée lorsqu'un élément du DOM n'existe pas.
32 Exception RemoteDriverServer Le serveur ne répond pas car les capacités décrites ne sont pas appropriées.
33 Exception de capture d'écran Il n'est pas possible de capturer un écran.
34 Exception SessionNotCreated Impossible de créer une nouvelle session.
35 Exception Impossible de définir le cookie Un pilote ne peut pas définir de cookie.
36 Exception UnexpectedTagName Une classe de support n'a pas reçu d'élément web comme prévu.
37 Exception d'alerte non gérée Une alerte a été émise, mais WebDriver n'est pas en mesure d'effectuer l'opération d'alerte.
38 Exception d'alerte inattendue Une alerte inattendue apparaît.
39 Exception de méthode inconnue La commande demandée correspond à une commande connue URL mais pas de méthode pour cela précisément URL.
40 Exception de navigateur inaccessible Le navigateur ne peut pas être ouvert, ou il a planté pour une raison quelconque.
41 Exception de commande non prise en charge Le WebDriver distant n'envoie pas de commandes valides comme prévu.

Trois erreurs dominent le débogage quotidien : NoSuchElementException signifie une erreur XPath ou un élément qui n'a pas été rendu, TimeoutException signifie que le délai d'attente est trop court pour un AJAX réponse, et StaleElementReferenceException suit une Dynamic refaire le rendu.

Comment gérer les exceptions dans Selenium

Voici les constructions standard pour la gestion des exceptions dans Selenium WebDriver. Chacun est simple Java, donc cela fonctionne dans n'importe quel Script WebDriver sans bibliothèques supplémentaires.

Étape 1) Essayez-attrapez

Cette méthode permet de gérer les exceptions grâce à une combinaison des mots-clés try et catch. La commande try marque le début du bloc, et catch est placée à la fin du bloc try, où elle résout l'exception.

try
{
// Code
} catch (Exception e) {
// Code for Handling exception
}

Étape 2) Plusieurs blocs de capture

Il existe différents types d'exceptions, et un seul bloc de code peut en déclencher plusieurs. L'utilisation de plusieurs blocs `catch` permet de gérer chaque type séparément avec son propre code. Vous pouvez utiliser plus de deux blocs `catch`, et leur nombre est illimité.

try
{
//Code
} catch (ExceptionType1 e1) {
//Code for Handling Exception 1
} catch (ExceptionType2 e2) {
//Code for Handling Exception 2
}

Étape 3) Lancer

Pour générer une exception, le mot-clé `throw` la transmet à la méthode en cours d'exécution afin qu'elle soit gérée. Utilisez `throw` lorsque vous transmettez une exception à une autre méthode au lieu de la résoudre dans la méthode courante.

public static void anyFunction() throws Exception{

try {
// write your code here
} catch (Exception b) {
// Do whatever you want to perform 
// Throw the Exception back to the system
throw(b);
}
}

Étape 4) Plusieurs exceptions

Vous pouvez mentionner diverses exceptions dans la clause throws.

public static void anyFunction() throws ExceptionType1, ExceptionType2{

try {
// write your code here
} catch (ExceptionType1 e1) {
// Code to handle exception 1
} catch (ExceptionType2 e2) {
// Code to handle exception 2
}

Étape 5) Enfin

Le mot-clé `finally` crée un bloc sous le bloc `try`. Ce bloc s'exécute qu'une exception se soit produite ou non, ce qui en fait l'endroit idéal pour fermer un pilote ou libérer un descripteur de fichier.

try {
//Code
} catch (ExceptionType1 e1) {
//Catch block
} catch (ExceptionType2 e2) {
//Catch block
} catch (ExceptionType3 e3) {
//Catch block
} finally {
//The finally block always executes.
}

Méthodes d'affichage des informations d'exception

Une fois l'exception interceptée, l'objet lui-même contient les informations de diagnostic. Vous pouvez utiliser les méthodes suivantes pour les afficher :

Méthode Ce que rapporte le rapport
printStackTrace () Affiche la pile trace, le nom de l'exception et toute autre description utile.
toString () Renvoie un message texte décrivant le nom et la description de l'exception.
getMessage () Affiche la description de l'exception séparément.

Associez ces éléments à une capture d'écran prise à l'intérieur du bloc catch, et une exécution ayant échoué montrera à la fois ce qui a dysfonctionné et à quoi ressemblait la page.

FAQ

Aucune exception WebDriver n'est vérifiée, car elles héritent toutes de RuntimeException via WebDriverException. Le compilateur n'exige donc jamais de bloc try-catch, ce qui est pratique, mais signifie aussi qu'une erreur de localisation non gérée ne se manifeste que lors de l'exécution du test.

Déplacez l'élément immédiatement avant d'agir dessus au lieu de mettre sa référence en cache. Une courte boucle de nouvelle tentative qui ignore l'exception et récupère à nouveau le nœud gère les rendus React ou Vue de manière bien plus fiable qu'une longue pause.

Ils la réduisent considérablement, mais ne la suppriment jamais. Une attente explicite ne corrige que les problèmes de synchronisation ; un localisateur incorrect, un clic intercepté ou une session fermée provoquent toujours une exception que seul un bloc catch peut absorber.

Selenium La version 4 conserve la même hiérarchie, mais les constructeurs d'attente acceptent désormais une durée (Duration) au lieu d'un délai d'attente entier, et une validation plus stricte des arguments selon les normes W3C entraîne l'apparition d'une exception InvalidArgumentException pour les valeurs qui Selenium 3 acceptées sans réclamation.

Moteurs de localisation auto-réparateurs track identifie les sélecteurs qui se rompent et sont remplacés par une alternative fonctionnelle, ce qui élimine une grande partie des erreurs NoSuchElementException. Des modèles similaires regroupent des piles répétées. tracAinsi, un défaut véritablement nouveau ne se retrouve pas noyé sous des versions déjà défectueuses.

Copilot excelle dans la gestion du code standard : une structure try-catch, une chaîne de blocs catch dans le bon ordre et un bloc finally qui arrête le pilote. Il ne peut cependant pas connaître les exceptions levées par votre application ; il est donc essentiel de vérifier chaque bloc catch généré.

Ils le complètent. Un ITestListener centralise la journalisation et les captures d'écran de tout test ayant échoué, ce qui permet de garder le corps du test propre. N'utilisez le bloc try-catch que lorsque le script doit continuer à s'exécuter après l'erreur plutôt que de simplement la signaler.

Dans le bloc `catch` ou `finally`, convertissez le pilote en `TakesScreenshot` et écrivez le fichier avant la fermeture de la session. Nommer l'image d'après la méthode de test permet de lire un test d'intégration continue ayant échoué sans avoir à reproduire l'erreur localement.

Résumez cet article avec :