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.

  • 🔘 Definition: Ett undantag är ett fel som uppstår medan ett program körs, och ett ohanterat fel kraschar körningen.
  • ☑️ Omfattning: Selenium WebDriver levererar mer än fyrtio undantagsklasser, och var och en av dem härstammar från WebDriverException.
  • Ofta förekommande förbrytare: NoSuchElementException, TimeoutException, StaleElementReferenceException och ElementNotInteractableException orsakar de flesta verkliga fel.
  • 🧪 Hantering: Ett try-catch-par isolerar en feltyp, flera catch-block separerar flera och körs slutligen alltid.
  • 🛠️ Upptrappning: Nyckelorden throw och throws skickar ett undantag tillbaka till anroparen när den aktuella metoden inte kan lösa det.
  • 📊 Diagnos: printStackTrace(), toString() och getMessage() rapporterar var och en olika detaljnivåer om felet.

Undantagshantering i Selenium WebDriver med try-catch, throw och slutligen

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.

Vanliga frågor

Alla WebDriver-undantag är avmarkerade, eftersom de alla utökar RuntimeException genom WebDriverException. Kompilatorn kräver därför aldrig en try-catch, vilket är praktiskt, men det betyder också att ett obevakat lokaliseringsfel bara dyker upp när testet faktiskt körs.

Flytta elementet omedelbart innan du agerar på det istället för att cacha referensen. En kort återförsöksslinga som ignorerar undantaget och hämtar noden igen hanterar omrenderingar i React eller Vue mycket mer tillförlitligt än en längre viloläge.

De minskar det kraftigt men tar aldrig bort det. En explicit väntetid åtgärdar bara tidsproblem – en felaktig positionerare, ett avlyssnat klick eller en stängd session skapar fortfarande ett undantag som inget annat än ett catch-block kan absorbera.

Selenium 4 behåller samma hierarki, men väntekonstruktorer tar nu en Duration istället för en heltalstimeout, och striktare W3C-argumentvalidering innebär att InvalidArgumentException dyker upp för värden som Selenium 3 accepterades utan klagomål.

Självläkande lokaliseringsmotorer track vilka selektorer går sönder och byter plats i ett fungerande alternativ, vilket tar bort en stor andel av NoSuchElementException-fel. Liknande modeller klustrar upprepade stackar tracså att en genuint ny defekt inte begravs bland ojämna repriser.

Copilot är stark på standardprinciper – ett try-catch-skelett, en catch-kedja i rätt ordning, ett finally-block som avslutar drivrutinen. Den kan inte veta vilka undantag din egen applikation kastar, så granska varje genererad catch.

De kompletterar det. En ITestListener centraliserar loggning och skärmdumpar för alla tester som misslyckas, vilket håller testkroppen ren. Använd try-catch endast där skriptet måste fortsätta efter felet snarare än att bara rapportera det.

Casta drivrutinen till TakesScreenshot inuti catchen eller slutligen blocket och skriv filen innan sessionen stängs. Att namnge bilden efter testmetoden gör en misslyckad CI-körning läsbar utan att reproducera felet lokalt.

Sammanfatta detta inlägg med: