Gestione delle eccezioni Selenium Driver Web (tipi)

⚡ Riepilogo intelligente

Gestione delle eccezioni in Selenium WebDriver impedisce l'arresto di un comando non riuscitoping un intero ciclo di prova. Java try-catch, blocchi catch multipli, throw, throws e infine ognuno dà a uno script un modo diverso per recuperare.

  • 🔘 Definizione: Un'eccezione è un errore che si verifica durante l'esecuzione di un programma e, se non gestita, provoca l'arresto anomalo del programma.
  • ☑️ Scopo: Selenium WebDriver include più di quaranta classi di eccezioni, e ognuna di esse deriva da WebDriverException.
  • ✅ Recidivi: Le eccezioni NoSuchElementException, TimeoutException, StaleElementReferenceException e ElementNotInteractableException sono le cause principali degli errori riscontrati nel mondo reale.
  • 🧪 Maneggevolezza: Una coppia try-catch isola un tipo di errore, più blocchi catch ne separano diversi e infine esegue sempre l'operazione.
  • ️ escalation: Le parole chiave throw e throws restituiscono un'eccezione al chiamante quando il metodo corrente non è in grado di risolverla.
  • 📊 Diagnosi: printStackTracLe funzioni e(), toString() e getMessage() forniscono ciascuna un diverso livello di dettaglio sull'errore.

Gestione delle eccezioni in Selenium WebDriver con try-catch, throw e infine

Che cos'è un'eccezione?

Un'eccezione è un errore che si verifica durante l'esecuzione di un programma. Mentre un programma è in esecuzione, il linguaggio di programmazione genera un'eccezione che deve essere gestita, altrimenti il ​​programma si arresta in modo anomalo.

L'eccezione indica che, sebbene l'evento possa verificarsi, questo tipo di evento si verifica raramente. Quando un metodo non è in grado di gestire l'eccezione, questa viene passata alla funzione chiamante. In Java, che guida la maggior parte Selenium Nelle suite, ogni eccezione di WebDriver non viene controllata, quindi il compilatore non ti obbliga mai a intercettarla: un errore non gestito emerge solo in fase di esecuzione.

Tipi di eccezioni in Selenium webdriver

WebDriverException è la classe base della gerarchia e ogni eccezione sottostante eredita da essa. La tabella elenca tutte le 41 eccezioni che potresti incontrare, insieme alla condizione che genera ciascuna di esse.

# Eccezione Quando si verifica
1 ElementNotVisibleException Un elemento esistente nel DOM ha una funzionalità impostata come nascosta.
2 ElementNotSelectableException L'elemento è presente nel DOM ma non può essere selezionato, quindi l'interazione è impossibile.
3 NoSuchElementException L'elemento non è stato trovato con il locator fornito.
4 NoSuchFrameException Migliori telaio La destinazione a cui passare non esiste.
5 NoAlertPresentException Un passaggio a un allarme Viene eseguito quando non viene visualizzato alcun avviso.
6 NoSuchWindowException La finestra di destinazione a cui passare non esiste.
7 StaleElementReferenceException L'elemento web è separato dall'attuale DOM.
8 SessionNotFoundException WebDriver entra in funzione dopo la chiusura del browser.
9 TimeoutException Time Un comando non è stato completato in tempo, ad esempio, l'elemento cercato non è stato trovato entro il tempo di attesa.
10 WebDriverException Classe base delle altre eccezioni di WebDriver; viene generata anche quando WebDriver agisce subito dopo la chiusura del browser.
11 ConnectionClosedException Si è verificata una disconnessione nel driver.
12 ElementClickInterceptedException L'elemento che riceve gli eventi nasconde l'elemento richiesto per il clic.
13 ElementNotInteractableException L'elemento è presente nel DOM, ma è impossibile interagire con esso.
14 ErrorInResponseException Qualcosa è andato storto durante l'interazione con il Firefox estensione o il server del driver remoto.
15 Gestore degli errori.Eccezione server sconosciuta Utilizzato come segnaposto quando il server restituisce un errore senza uno stack trace.
16 ImeActivationFailedException L'attivazione del motore IME non è riuscita.
17 ImeNotAvailableException Il supporto IME non è disponibile.
18 Eccezione per certificato non sicuro La navigazione ha fatto sì che l'agente utente colpisse un avviso del certificato, che può essere causato da un certificato TLS non valido o scaduto.
19 InvalidArgumentException Un argomento non appartiene al tipo previsto.
20 InvalidCookieDomainException A biscotto viene aggiunto sotto un dominio diverso invece di quello attuale URL.
21 InvalidCoordinatesException L'operazione di interazione rilevata non è valida.
22 InvalidElementStateException Il comando non può essere completato perché l'elemento non è valido.
23 InvalidSessionIdException L'ID di sessione specificato non è presente tra le sessioni attive, pertanto la sessione non esiste o è inattiva.
24 InvalidSwitchToTargetEccezione La finestra o il frame di destinazione a cui passare non esiste.
25 JavascriptEccezione Si è verificato un errore durante l'esecuzione JavaScript fornito dall'utente.
26 JsonException La sessione viene richiesta quando la sessione non è stata creata.
27 NoSuchAttributeException L'attributo di un elemento non è stato trovato.
28 SpostaTargetOutOfBoundsException Il target fornito al metodo move() di ActionChains non è valido, ad esempio, si trova al di fuori del documento.
29 NoSuchContextException ContextAware, che esegue test su dispositivi mobili, non riesce a trovare il contesto richiesto.
30 NoSuchCookieException Nessun cookie corrispondente al percorso specificato è stato trovato tra i cookie del documento attualmente visualizzato.
31 Eccezione non trovata Una sottoclasse di WebDriverException, generata quando un elemento nel DOM non esiste.
32 RemoteDriverServerException Il server non risponde perché le funzionalità descritte non sono corrette.
33 ScreenshotException Non è possibile catturare una schermata.
34 SessionNotCreatedException Impossibile creare una nuova sessione.
35 Impossibile impostare i cookie - Eccezione Un driver non è in grado di impostare un cookie.
36 UnexpectedTagNameException Una classe di supporto non ha ottenuto un elemento web come previsto.
37 UnhandledAlertException È presente un avviso, ma WebDriver non è in grado di eseguire l'operazione di avviso.
38 UnexpectedAlertPresentException È comparso un avviso inatteso.
39 UnknownMethodException Il comando richiesto corrisponde a un comando noto URL ma non un metodo per quello specifico URL.
40 UnreachableBrowserException Il browser non si apre oppure si è bloccato per qualche motivo.
41 UnsupportedCommandException Il WebDriver remoto non invia comandi validi come previsto.

Tre dominano il debug quotidiano: NoSuchElementException significa un errore XPath o un elemento che non è stato renderizzato, TimeoutException significa un'attesa troppo breve per un AJAX risposta e segue StaleElementReferenceException dinamico ri-renderizzare.

Come gestire le eccezioni in Selenium

Ecco le strutture standard per la gestione delle eccezioni in Selenium WebDriver. Ognuno è semplice Java, quindi funziona in qualsiasi Script WebDriver senza librerie aggiuntive.

Passaggio 1) Prova a catturare

Questo metodo permette di intercettare le eccezioni utilizzando una combinazione delle parole chiave try e catch. Il comando try segna l'inizio del blocco, mentre catch viene posizionato alla fine del blocco try, dove si occupa di gestire l'eccezione.

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

Passaggio 2) Blocchi di cattura multipli

Esistono vari tipi di eccezioni e un singolo blocco di codice può generarne più di una. L'utilizzo di più blocchi catch consente di gestire ogni tipo separatamente con il proprio codice. È possibile utilizzare più di due blocchi catch, senza alcun limite al numero di blocchi che si possono aggiungere.

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

Passaggio 3) Lanciare

Quando si desidera generare un'eccezione, la parola chiave `throw` la passa al metodo successivo per essere gestita in fase di esecuzione. Utilizzare `throw` quando si desidera passare un'eccezione al metodo successivo anziché risolverla nel metodo corrente.

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);
}
}

Passaggio 4) Eccezioni multiple

È possibile menzionare varie eccezioni nella clausola 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
}

Passaggio 5) Infine

La parola chiave finally crea un blocco sotto il blocco try. Viene eseguito indipendentemente dal fatto che si sia verificata un'eccezione, il che lo rende il luogo ideale per chiudere un driver o rilasciare un handle di file.

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

Metodi per la visualizzazione delle informazioni sulle eccezioni

Una volta intercettata un'eccezione, l'oggetto stesso contiene i dettagli diagnostici. È possibile utilizzare i seguenti metodi per visualizzarli:

Metodo Cosa riporta
printStackTrace() Stampa lo stack trace, il nome dell'eccezione e altre descrizioni utili.
accordare() Restituisce un messaggio di testo che descrive il nome e la descrizione dell'eccezione.
getMessage () Visualizza la descrizione dell'eccezione separatamente.

Abbinando questi elementi a uno screenshot acquisito all'interno del blocco catch, un'esecuzione non riuscita mostra sia cosa si è rotto sia come appariva la pagina.

DOMANDE FREQUENTI

Tutte le eccezioni di WebDriver non vengono controllate, perché estendono tutte RuntimeException tramite WebDriverException. Il compilatore, quindi, non richiede mai un blocco try-catch, il che è comodo, ma significa anche che un errore di localizzazione non controllato si manifesta solo quando il test viene effettivamente eseguito.

Invece di memorizzare il riferimento nella cache, riposiziona immediatamente l'elemento prima di agire su di esso. Un breve ciclo di tentativi che ignora l'eccezione e recupera nuovamente il nodo gestisce i re-render di React o Vue in modo molto più affidabile rispetto a un'attesa più lunga.

Lo riducono drasticamente, ma non lo eliminano mai del tutto. Un'attesa esplicita risolve solo i problemi di temporizzazione: un localizzatore errato, un clic intercettato o una sessione chiusa generano comunque un'eccezione che solo un blocco catch può assorbire.

Selenium 4 mantiene la stessa gerarchia, ma i costruttori di attesa ora accettano una Durata invece di un timeout intero e una convalida degli argomenti W3C più rigorosa significa che InvalidArgumentException si verifica per i valori che Selenium 3 accettati senza problemi.

Motori di localizzazione autoriparanti track quali selettori si rompono e vengono scambiati con un'alternativa funzionante, che elimina una grande parte degli errori NoSuchElementException. Modelli simili raggruppano stack ripetuti tracin modo che un difetto genuinamente nuovo non venga nascosto tra repliche scadenti.

Copilot è molto efficace con i costrutti standard: una struttura di base con try-catch, una catena di catch nell'ordine corretto e un blocco finally che termina l'esecuzione del driver. Non può sapere quali eccezioni vengono generate dalla tua applicazione, quindi rivedi ogni catch generato.

Lo completano. Un ITestListener centralizza la registrazione e gli screenshot per ogni test che fallisce, mantenendo pulito il corpo del test. Utilizza try-catch solo quando lo script deve continuare dopo l'errore anziché limitarsi a segnalarlo.

Effettua il cast del driver a TakesScreenshot all'interno del blocco catch o finally e scrivi il file prima della chiusura della sessione. Assegnare all'immagine lo stesso nome del metodo di test rende leggibile un'esecuzione CI fallita senza dover riprodurre l'errore in locale.

Riassumi questo post con: