Unntakshåndtering inn Selenium Webdriver (typer)

⚡ Smart oppsummering

Unntakshåndtering i Selenium WebDriver hindrer en mislykket kommando i å stoppeping en hel testkjøring. Java try-catch, flere catch-blokker, kast, kast og til slutt gi hver av dem et skript en annen måte å gjenopprette på.

  • 🔘 Definisjon: Et unntak er en feil som oppstår mens et program kjører, og en ubehandlet feil krasjer kjøringen.
  • ☑️ Omfang: Selenium WebDriver sender mer enn førti unntaksklasser, og hver enkelt av dem stammer fra WebDriverException.
  • Hyppige lovbrytere: NoSuchElementException, TimeoutException, StaleElementReferenceException og ElementNotInteractableException forårsaker de fleste feil i den virkelige verden.
  • 🧪 Håndtering: Et try-catch-par isolerer én feiltype, flere catch-blokker skiller flere, og utføres til slutt alltid.
  • 🛠️ Eskalering: Nøkkelordene `throw` og `throws` sender et unntak tilbake til den som kaller det når den gjeldende metoden ikke kan løse det.
  • 📊 diagnose: printStackTrace(), toString() og getMessage() rapporterer hver et ulikt detaljnivå om feilen.

Unntakshåndtering i Selenium WebDriver med try-catch, kast og til slutt

Hva er et unntak?

Et unntak er en feil som oppstår når et program kjøres. Mens et program kjører, genererer programmeringsspråket et unntak som må håndteres, ellers krasjer programmet.

Unntaket indikerer at selv om hendelsen kan forekomme, skjer denne typen hendelse sjelden. Når en metode ikke er i stand til å håndtere unntaket, kastes den til dens kallende funksjon. Java, som driver mest Selenium I programseriene er alle WebDriver-unntak ukontrollert, slik at kompilatoren aldri tvinger deg til å fange det – en ubehandlet feil dukker bare opp under kjøretid.

Typer unntak i Selenium webdriver

WebDriverException er basisklassen i hierarkiet, og alle unntak nedenfor arver fra den. Tabellen viser alle 41 unntakene du kan møte, sammen med betingelsen som utløser hvert av dem.

# Unntak Når det skjer
1 ElementNotVisibleException Et eksisterende element i DOM-en har en funksjon satt som skjult.
2 ElementIkkevalgbartUnntak Elementet er i DOM-en, men kan ikke velges, så interaksjon er umulig.
3 NoSuchElementException Elementet ble ikke funnet med locator medfølgende.
4 IngenSlikRammeUnntak Ocuco ramme Målet som skal byttes til finnes ikke.
5 NoAlertPresentException En bytte til en varsling kjører når det ikke vises et varsel.
6 NoSuchWindowException Vindusmålet som skal byttes til finnes ikke.
7 Unntak av foreldet elementreferanse Nettelementet er frakoblet fra gjeldende DOM.
8 Unntak fra økten WebDriveren aktiveres etter at du har avsluttet nettleseren.
9 Unntak for tidsavbrudd En kommando ble ikke fullført i tide – for eksempel ble ikke elementet som ble søkt etter funnet i ventetiden.
10 WebDriverException Basisklasse for de andre WebDriver-unntakene; også generert når WebDriver-en fungerer rett etter at du lukker nettleseren.
11 TilkoblingLukketUnntak Det er en frakobling i driveren.
12 ElementKlikkAvlyttetUnntak Elementet som mottar hendelsene skjuler elementet som forespurtes for klikket.
13 ElementIkkeInteraktivUnntak Elementet finnes i DOM-en, men det er umulig å samhandle med det.
14 Feil i svarUnntak Noe feilet under samhandling med Firefox utvidelse eller den eksterne driverserveren.
15 ErrorHandler.UkjentServerUnntak Brukes som en plassholder når serveren returnerer en feil uten en stakk trace.
16 Tidsaktivering mislyktesUnntak Aktivering av IME-motoren mislyktes.
17 TidIkkeTilgjengeligUnntak IME-støtte er ikke tilgjengelig.
18 Usikkert sertifikatunntak Navigasjonen fikk brukeragenten til å treffe en sertifikatadvarsel, noe et ugyldig eller utløpt TLS-sertifikat kan forårsake.
19 Ugyldig argumentunntak Et argument tilhører ikke den forventede typen.
20 Ugyldig informasjonskapseldomeneunntak A cookie er lagt til under et annet domene i stedet for det nåværende URL.
21 Ugyldige koordinaterUnntak Den samsvarende interagerende operasjonen er ikke gyldig.
22 Ugyldig elementtilstandunntak Kommandoen kan ikke fullføres fordi elementet er ugyldig.
23 Ugyldigøkt-IDunntak Den oppgitte økt-ID-en er ikke blant de aktive øktene, så den finnes ikke eller er inaktiv.
24 UgyldigByttTilTargetUnntak Ramme- eller vindusmålet som skal byttes til finnes ikke.
25 JavascriptUnntak Det oppsto en feil under utførelse JavaSkript gitt av brukeren.
26 JsonException Økten blir forespurt når økten ikke er opprettet.
27 NoSuchAttributeException Attributtet til et element ble ikke funnet.
28 FlyttTargetUtenforGrenseneUnntak Målet som er oppgitt for ActionChains move()-metoden er ikke gyldig – for eksempel utenfor dokumentet.
29 IngenSlikKontekstUnntak ContextAware, som tester mobilenheter, finner ikke den forespurte konteksten.
30 IngenSlikInformasjonskapselUnntak Ingen informasjonskapsel som samsvarer med det oppgitte stinavnet ble funnet blant informasjonskapslene i dokumentet som vises for øyeblikket.
31 Ikke funnetUnntak En underklasse av WebDriverException, som genereres når et element på DOM-en ikke finnes.
32 EksternDriverServerUnntak Serveren svarer ikke fordi de beskrevne funksjonene ikke er riktige.
33 SkjermbildeUnntak Det er ikke mulig å fange en skjerm.
34 Unntak av økt ikke opprettet Kunne ikke opprette en ny økt.
35 Kan ikke angi informasjonskapselunntak En sjåfør kan ikke sette en informasjonskapsel.
36 UventetTagNameUnntak En støtteklasse fikk ikke et webelement som forventet.
37 Uhåndtert varselunntak Det er et varsel, men WebDriver kan ikke utføre varseloperasjonen.
38 Uventet varselTilstedeværendeunntak Et uventet varsel dukker opp.
39 UkjentMetodeUnntak Den forespurte kommandoen samsvarer med en kjent URL men ikke en metode for akkurat det URL.
40 Unnåelig nettleserunntak Nettleseren kan ikke åpnes, eller den krasjet av en eller annen grunn.
41 Ustøttet kommandounntak Den eksterne WebDriveren sender ikke gyldige kommandoer som forventet.

Tre dominerer daglig feilsøking: NoSuchElementException betyr en feil XPath eller et element som ikke har blitt gjengitt, betyr TimeoutException en ventetid som er for kort for en AJAX svar, og StaleElementReferenceException følger en dynamisk gjengi på nytt.

Slik håndterer du unntak i Selenium

Her er standardkonstruksjonene for håndtering av unntak i Selenium WebDriver. Hver er enkel Java, så det fungerer i alle WebDriver-skript uten ekstra biblioteker.

Trinn 1) Prøv-fangst

Denne metoden kan fange opp unntak ved hjelp av en kombinasjon av nøkkelordene try og catch. try-kommandoen markerer starten på blokken, og catch plasseres på slutten av try-blokken, hvor den løser unntaket.

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

Trinn 2) Flere fangblokker

Det finnes ulike typer unntak, og én enkelt kodeblokk kan generere mer enn ett. Flere catch-blokker lar deg håndtere hver type separat med sin egen kode. Du kan bruke mer enn to catch-blokker, og det er ingen grense for hvor mange du legger til.

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

Trinn 3) Kast

Når du vil generere et unntak, sender nøkkelordet throw det videre til håndtering under kjøretid. Bruk throw når du sender et unntak videre i stedet for å løse det i gjeldende metode.

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

Trinn 4) Flere unntak

Du kan nevne diverse unntak 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
}

Trinn 5) Til slutt

Nøkkelordet finally oppretter en blokk under try-blokken. Det kjøres uavhengig av om et unntak har oppstått, noe som gjør det til det rette stedet å lukke en driver eller frigjøre en filhåndtak.

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

Metoder for å vise unntaksinformasjon

Når et unntak oppdages, inneholder selve objektet diagnostiske detaljer. Du kan bruke følgende metoder for å vise det:

Metode Hva den rapporterer
printStackTrace() Skriver ut stakken trace, navnet på unntaket og annen nyttig beskrivelse.
toString () Returnerer en tekstmelding som beskriver navnet og beskrivelsen av unntaket.
getMessage () Viser beskrivelsen av unntaket alene.

Kombiner disse med et skjermbilde tatt inne i fangstblokken, og en mislykket kjøring viser både hva som gikk i stykker og hvordan siden så ut.

Spørsmål og svar

Alle WebDriver-unntak er ikke avkrysset, fordi de alle utvider RuntimeException gjennom WebDriverException. Kompilatoren krever derfor aldri en try-catch, noe som er praktisk, men det betyr også at en ubeskyttet locator-feil bare dukker opp når testen faktisk kjører.

Flytt elementet rett før du handler på det, i stedet for å mellomlagre referansen. En kort gjentakelsesløkke som ignorerer unntaket og henter noden på nytt, håndterer ny gjengivelse i React eller Vue mye mer pålitelig enn en lengre hvilemodus.

De reduserer det kraftig, men fjerner det aldri. En eksplisitt venting løser bare tidsproblemer – en feil lokator, et avlyttet klikk eller en lukket økt genererer fortsatt et unntak som ingenting annet enn en fangstblokk kan absorbere.

Selenium 4 beholder samme hierarki, men ventekonstruktører tar nå en Duration i stedet for et heltalls timeout, og strengere W3C-argumentvalidering betyr at InvalidArgumentException dukker opp for verdier som Selenium 3 akseptert uten klage.

Selvreparerende lokatormotorer track, som bryter og bytter ut selektorer i et fungerende alternativ, noe som fjerner en stor andel av NoSuchElementException-feil. Lignende modeller klynger repetert stakk tracslik at ikke en genuint ny feil blir begravet blant ustabile repriser.

Copilot er sterk på standardprinsipper – et try-catch-skjelett, en catch-kjede i riktig rekkefølge, en finally-blokk som avslutter driveren. Den kan ikke vite hvilke unntak din egen applikasjon kaster, så se gjennom hver genererte catch.

De utfyller det. En ITestListener sentraliserer logging og skjermbilder for enhver test som mislykkes, noe som holder testkroppen ren. Bruk try-catch bare der skriptet må fortsette etter feilen, i stedet for å bare rapportere den.

Cast driveren til TakesScreenshot inne i catch-en eller til slutt blokken og skriv filen før økten lukkes. Å navngi bildet etter testmetoden gjør en mislykket CI-kjøring lesbar uten å reprodusere feilen lokalt.

Oppsummer dette innlegget med: