Undantagshantering in Selenium Webdriver (typer)
⚡ Smart sammanfattning
Undantagshantering i Selenium WebDriver hindrar ett felaktigt kommando från att stoppasping en hel testkörning. Java try-catch, flera catch-block, throw, throws och slutligen ge varje skript ett annat sätt att återhämta sig.

Vad är ett undantag?
Ett undantag är ett fel som inträffar vid körningstillfället för ett program. Medan ett program körs genererar programmeringsspråket ett undantag som måste hanteras, annars kraschar programmet.
Undantaget indikerar att även om händelsen kan inträffa, inträffar den här typen av händelse sällan. När en metod inte kan hantera undantaget kastas den till sin anropande funktion. Java, vilket driver de flesta Selenium I programsviterna är alla WebDriver-undantag avmarkerade, så kompilatorn tvingar dig aldrig att fånga det — ett ohanterat fel uppstår bara vid körning.
Typer av undantag i Selenium webbdrivrutin
WebDriverException är hierarkins basklass, och varje undantag nedan ärver från den. Tabellen listar alla 41 undantag som du kan stöta på, tillsammans med villkoret som utlöser vart och ett.
| # | undantag | När det inträffar |
|---|---|---|
| 1 | ElementNotVisibleException | Ett befintligt element i DOM-filen har en funktionsuppsättning som dold. |
| 2 | ElementInteValbartUndantag | Elementet finns i DOM-filen men kan inte väljas, så interaktion är omöjlig. |
| 3 | NoSuchElementException | Elementet kunde inte hittas med locator levereras. |
| 4 | IngetSådantFrameUndantag | Ocuco-landskapet ram Målet att byta till finns inte. |
| 5 | NoAlertPresentException | En övergång till en varna körs när ingen varning visas. |
| 6 | NoSuchWindowException | Fönstermålet som ska växlas till finns inte. |
| 7 | Undantag för inaktuellt elementreferens | Webbelementet är frikopplat från det aktuella DOM. |
| 8 | Undantag från sessionen hittades inte | WebDrivern agerar efter att du avslutat webbläsaren. |
| 9 | TimeoutException | Ett kommando slutfördes inte i tid — till exempel hittades inte det sökta elementet inom väntetiden. |
| 10 | WebDriverException | Basklass för de andra WebDriver-undantagen; aktiveras också när WebDriver agerar direkt efter att du stänger webbläsaren. |
| 11 | AnslutningStängdUndantag | Det är en frånkoppling i drivrutinen. |
| 12 | ElementClickAvlyssnatUndantag | Elementet som tar emot händelserna döljer elementet som begärs för klicket. |
| 13 | ElementNotInteratableException | Elementet finns i DOM:en, men det är omöjligt att interagera med det. |
| 14 | Fel i svarUndantag | Något misslyckades under interaktionen med Firefox tillägg eller fjärrdrivrutinsservern. |
| 15 | ErrorHandler.OkändServerException | Används som platshållare när servern returnerar ett fel utan en stack trace. |
| 16 | Tidsaktivering misslyckades undantag | Aktivering av IME-motorn misslyckades. |
| 17 | TidInteTillgängligtUndantag | IME-stöd är inte tillgängligt. |
| 18 | OsäkertCertifikatundantag | Navigeringen gjorde att användaragenten träffade en certifikatvarning, vilket ett ogiltigt eller utgånget TLS-certifikat kan orsaka. |
| 19 | Ogiltigt argumentundantag | Ett argument tillhör inte den förväntade typen. |
| 20 | Ogiltigt cookiedomänundantag | A kaka läggs till under en annan domän istället för den nuvarande URL. |
| 21 | Ogiltiga koordinaterUndantag | Den matchade interagerande operationen är ogiltig. |
| 22 | OgiltigtElementStateException | Kommandot kan inte slutföras eftersom elementet är ogiltigt. |
| 23 | Ogiltigt sessions-ID-undantag | Det angivna sessions-ID:t finns inte bland de aktiva sessionerna, så det finns inte eller är inaktivt. |
| 24 | Ogiltig BytTillTargetundantag | Ram- eller fönstermålet som ska växlas till finns inte. |
| 25 | Javascriptundantag | Ett fel uppstod under körningen JavaSkript givet av användaren. |
| 26 | JsonException | Sessionen begärs när sessionen inte har skapats. |
| 27 | IngetSådantAttributUndantag | Attributet för ett element kunde inte hittas. |
| 28 | FlyttaTargetUtanförgränsernaUndantag | Målet som angetts för ActionChains move()-metoden är inte giltigt – till exempel, utanför dokumentet. |
| 29 | IngetSådantKontextUndantag | ContextAware, som utför tester av mobila enheter, kan inte hitta den begärda kontexten. |
| 30 | IngetSådantCookieUndantag | Ingen cookie som matchar den angivna sökvägen hittades bland cookierna i det aktuella dokumentet. |
| 31 | Inte hittat undantag | En underklass till WebDriverException, som genereras när ett element på DOM:en inte finns. |
| 32 | Undantag för fjärrdrivrutinsserver | Servern svarar inte eftersom de beskrivna funktionerna inte är korrekta. |
| 33 | Undantag från skärmdump | Det går inte att fånga en skärm. |
| 34 | SessionInteSkapadUndantag | Det gick inte att skapa en ny session. |
| 35 | Kan inte ställa in cookieundantag | En drivrutin kan inte ställa in en cookie. |
| 36 | OväntatTagNameException | En supportklass fick inte ett webbelement som förväntat. |
| 37 | UnhandledAlertException | Det finns en varning, men WebDriver kan inte utföra varningsåtgärden. |
| 38 | Oväntat aviseringsnuvarande undantag | En oväntad varning visas. |
| 39 | OkändmetodUndantag | Det begärda kommandot matchar ett känt URL men inte en metod för just det URL. |
| 40 | Undantag för oåtkomlig webbläsare | Webbläsaren kan inte öppnas, eller så har den kraschat av någon anledning. |
| 41 | Undantag för kommandon som inte stöds | Den fjärrstyrda WebDriver skickar inte giltiga kommandon som förväntat. |
Tre dominerar den dagliga felsökningen: NoSuchElementException betyder ett felaktigt XPath eller ett element som inte har renderats, TimeoutException innebär en för kort väntetid för en AJAX svar, och StaleElementReferenceException följer en dynamisk återgera.
Hur man hanterar undantag i Selenium
Här är standardkonstruktionerna för att hantera undantag i Selenium WebDriver. Var och en är enkel Java, så det fungerar i alla WebDriver-skript utan extra bibliotek.
Steg 1) Prova-fånga
Den här metoden kan fånga undantag med hjälp av en kombination av nyckelorden try och catch. Kommandot try markerar början av blocket och catch placeras i slutet av try-blocket, där det löser undantaget.
try { // Code } catch (Exception e) { // Code for Handling exception }
Steg 2) Flera fångstblock
Det finns olika typer av undantag, och ett enda kodblock kan generera mer än ett. Flera catch-block låter dig hantera varje typ separat med sin egen kod. Du kan använda mer än två catch-block, och det finns ingen gräns för hur många du lägger till.
try { //Code } catch (ExceptionType1 e1) { //Code for Handling Exception 1 } catch (ExceptionType2 e2) { //Code for Handling Exception 2 }
Steg 3) Kasta
När du vill generera ett undantag skickar nyckelordet throw det vidare för hantering vid körning. Använd throw när du skickar ett undantag vidare istället för att lösa det i den aktuella metoden.
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); } }
Steg 4) Flera undantag
Du kan nämna olika undantag i kastklausulen.
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 }
Steg 5) Slutligen
Nyckelordet finally skapar ett block under try-blocket. Det körs oavsett om ett undantag inträffade, vilket gör det till rätt plats att stänga en drivrutin eller frigöra ett filreferens.
try { //Code } catch (ExceptionType1 e1) { //Catch block } catch (ExceptionType2 e2) { //Catch block } catch (ExceptionType3 e3) { //Catch block } finally { //The finally block always executes. }
Metoder för att visa undantagsinformation
När ett undantag upptäcks innehåller själva objektet diagnostikdetaljerna. Du kan använda följande metoder för att visa det:
| Metod | Vad den rapporterar |
|---|---|
| printStackTrace() | Skriver ut stacken trace, namnet på undantaget och annan användbar beskrivning. |
| att stränga () | Returnerar ett textmeddelande som beskriver undantagets namn och beskrivning. |
| getMessage () | Visar beskrivningen av undantaget separat. |
Kombinera dessa med en skärmdump tagen inuti catch-blocket, så visar en misslyckad körning både vad som gick sönder och hur sidan såg ut.
