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.
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.
