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 :