Upravljanje iznimkama Selenium Webdriver (vrste)

⚡ Pametni sažetak

Upravljanje iznimkama Selenium WebDriver sprječava zaustavljanje neuspješne naredbeping cijeli probni rad. Java try-catch, više blokova catch, throw, throws i na kraju svaki daje skripti drugačiji način oporavka.

  • 🔘 Definicija: Iznimka je greška koja se javlja tijekom izvršavanja programa, a neobrađena greška dovodi do prekida izvršavanja.
  • ☑️ Opseg: Selenium WebDriver nudi više od četrdeset klasa iznimki, a svaka od njih potječe od WebDriverException.
  • ✅ Česti prekršitelji: Iznimke NoSuchElementException, TimeoutException, StaleElementReferenceException i ElementNotInteractableException uzrokuju većinu stvarnih kvarova.
  • 🧪 Rukovanje: Par try-catch izolira jednu vrstu pogreške, više blokova catch odvaja nekoliko i na kraju se uvijek izvršava.
  • 🛠️ eskalacija: Ključne riječi throw i throws vraćaju iznimku pozivatelju kada je trenutna metoda ne može riješiti.
  • 📊 Dijagnoza: printStogTrace(), toString() i getMessage() prijavljuju različitu razinu detalja o neuspjehu.

Upravljanje iznimkama Selenium WebDriver s try-catch, throw i finally

Što je iznimka?

Iznimka je greška koja se događa u trenutku izvršavanja programa. Dok se program izvršava, programski jezik generira iznimku koja se mora obraditi, inače se program ruši.

Iznimka označava da, iako se događaj može dogoditi, ova vrsta događaja se događa rijetko. Kada metoda nije u mogućnosti obraditi iznimku, ona se izbacuje njenoj pozivateljskoj funkciji. U Java, što pokreće većinu Selenium U paketima, svaka iznimka WebDrivera je neprovjerena, tako da vas kompajler nikada ne prisiljava da je uhvatite - neobrađena greška pojavljuje se samo tijekom izvođenja.

Vrste iznimaka u Selenium webdriver

WebDriverException je osnovna klasa hijerarhije i svaka iznimka ispod nje nasljeđuje je. Tablica navodi svih 41 iznimki koje možete susresti, zajedno s uvjetom koji svaku od njih izaziva.

# izuzetak Kada se dogodi
1 ElementNotVisibleException Postojeći element u DOM-u ima značajku postavljenu kao skrivenu.
2 Iznimka ElementNijeOdabirElementa Element je u DOM-u, ali se ne može odabrati, pa je interakcija nemoguća.
3 NoSuchElementException Element nije mogao biti pronađen s lokator isporučuje se.
4 NoSuchFrameException The okvir Cilj na koji se treba prebaciti ne postoji.
5 NoAlertPresentException Prelazak na oprezan pokreće se kada se ne prikaže upozorenje.
6 NoSuchWindowException Ciljni prozor na koji se treba prebaciti ne postoji.
7 Iznimka reference zastarjelog elementa Web element je odvojen od trenutnog PRESUDA.
8 Iznimka SesijeNijePronađena WebDriver djeluje nakon što zatvorite preglednik.
9 TimeoutException Naredba nije dovršena na vrijeme - na primjer, traženi element nije pronađen unutar vremena čekanja.
10 WebDriverException Osnovna klasa ostalih iznimki WebDrivera; također se pokreće kada WebDriver reagira odmah nakon zatvaranja preglednika.
11 Iznimka zatvorene veze Došlo je do prekida veze u upravljačkom programu.
12 Iznimka presretanja klika na element Element koji prima događaje skriva element zatražen za klik.
13 Iznimka ElementNijeInteraktabilno Element je prisutan u DOM-u, ali je s njim nemoguće komunicirati.
14 Iznimka pogreške u odgovoru Došlo je do greške prilikom interakcije s Firefox proširenje ili poslužitelj udaljenog upravljačkog programa.
15 ErrorHandler.UnknownServerException Koristi se kao rezervirano mjesto kada poslužitelj vrati grešku bez stoga trace.
16 Iznimka Neuspješne Aktivacije Ime Aktivacija IME mehanizma nije uspjela.
17 Iznimka ImeNijeDostupno Podrška za IME nije dostupna.
18 Iznimka nesigurnog certifikata Navigacija je dovela do toga da korisnički agent naiđe na upozorenje o certifikatu, što može uzrokovati nevažeći ili istekli TLS certifikat.
19 InvalidArgumentException Argument ne pripada očekivanom tipu.
20 Iznimka nevažeće domene kolačića A kolačić dodaje se pod drugu domenu umjesto trenutne URL.
21 Iznimka nevažećih koordinata Podudarna operacija interakcije nije valjana.
22 Iznimka stanja nevažećeg elementa Naredba se ne može dovršiti jer element nije valjan.
23 Iznimka nevažećeg ID-a sesije Navedeni ID sesije nije među aktivnim sesijama, pa ne postoji ili je neaktivan.
24 Nevažeći prekidačTargetizuzetak Cilj okvira ili prozora na koji se treba prebaciti ne postoji.
25 Javascriptizuzetak Došlo je do greške prilikom izvršavanja JavaSkripta koju daje korisnik.
26 JsonException Sesija se zahtijeva kada sesija nije kreirana.
27 NoSuchAttributeException Atribut elementa nije pronađen.
28 PotezTargetIznimka izvan granica Cilj naveden metodi ActionChains move() nije valjan — na primjer, izvan dokumenta.
29 NoSuchContextException ContextAware, koji provodi testiranje mobilnih uređaja, ne može pronaći traženi kontekst.
30 NoSuchCookieException Među kolačićima dokumenta koji se trenutno pregledava nije pronađen kolačić koji odgovara navedenom nazivu puta.
31 Nije pronađena iznimka Podklasa WebDriverException, koja se aktivira kada element na DOM-u ne postoji.
32 Iznimka udaljenog upravljačkog poslužitelja Poslužitelj ne odgovara jer opisane mogućnosti nisu ispravne.
33 Iznimka zaslona Nije moguće snimiti zaslon.
34 Iznimka SesijeNijeKreirana Nova sesija nije mogla biti uspješno kreirana.
35 Iznimka nije moguće postaviti kolačić Vozač ne može postaviti kolačić.
36 Neočekivana iznimka naziva oznake Klasa podrške nije dobila web element kako se očekivalo.
37 Neobrađena iznimka upozorenja Postoji upozorenje, ali WebDriver ne može izvršiti operaciju upozorenja.
38 Neočekivana iznimka prisutnosti upozorenja Pojavljuje se neočekivano upozorenje.
39 Iznimka nepoznate metode Tražena naredba odgovara poznatoj URL ali ne i metoda za to konkretno URL.
40 Iznimka nedostižnog preglednika Preglednik se ne može otvoriti ili se iz nekog razloga srušio.
41 Nepodržana iznimka naredbe Udaljeni WebDriver ne šalje valjane naredbe kako se očekuje.

Tri dominiraju u svakodnevnom otklanjanju pogrešaka: NoSuchElementException znači pogrešku XPath ili element koji se nije prikazao, TimeoutException znači da je čekanje prekratko za AJAX odgovor, a StaleElementReferenceException slijedi nakon dinamičan ponovno renderirati.

Kako se nositi s iznimkama u Selenium

Evo standardnih konstrukcija za rukovanje iznimkama u Selenium WebDriver. Svaki je običan Java, tako da radi u bilo kojem Skripta WebDrivera bez dodatnih biblioteka.

Korak 1) Pokušaj-uhvati

Ova metoda može uhvatiti iznimke pomoću kombinacije ključnih riječi try i catch. Naredba try označava početak bloka, a catch se postavlja na kraj bloka try, gdje rješava iznimku.

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

Korak 2) Više blokova za hvatanje

Postoje različite vrste iznimki, a jedan blok koda može izazvati više od jedne. Višestruki catch blokovi omogućuju vam da svaku vrstu obradite zasebno s vlastitim kodom. Možete koristiti više od dva catch bloka i nema ograničenja koliko ih možete dodati.

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

Korak 3) Bacite

Kada želite generirati iznimku, ključna riječ throw predaje je na obradu tijekom izvođenja. Koristite throw kada prosljeđujete iznimku dalje umjesto da je rješavate u trenutnoj metodi.

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

Korak 4) Višestruke iznimke

U klauzuli throws možete spomenuti razne iznimke.

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
}

Korak 5) Konačno

Ključna riječ finally stvara blok ispod bloka try. Izvršava se bez obzira na to je li došlo do iznimke, što je čini pravim mjestom za zatvaranje upravljačkog programa ili otpuštanje deskriptora datoteke.

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

Metode za prikaz informacija o iznimkama

Nakon što se uhvati iznimka, sam objekt nosi dijagnostičke detalje. Za njihov prikaz možete koristiti sljedeće metode:

način Što izvještava
printStogTrace() Ispisuje stog trace, naziv iznimke i drugi korisni opisi.
toString () Vraća tekstualnu poruku koja opisuje naziv i opis iznimke.
getMessage() Prikazuje opis iznimke zasebno.

Uparite ovo sa snimkom zaslona snimljenom unutar catch bloka i neuspješno pokretanje pokazuje i što se pokvarilo i kako je stranica izgledala.

Pitanja i odgovori

Svaki WebDriver izuzetak je neprovjeren, jer svi proširuju RuntimeException kroz WebDriverException. Kompajler stoga nikada ne zahtijeva try-catch, što je zgodno, ali također znači da se greška nezaštićenog lokatora pojavljuje samo kada se test stvarno pokrene.

Umjesto keširanja reference, odmah premjestite element prije nego što na njega reagirate. Kratka petlja ponovnog pokušaja koja ignorira iznimku i ponovno dohvaća čvor puno pouzdanije obrađuje ponovno renderiranje Reacta ili Vuea nego dulje stanje mirovanja.

Oni ga značajno smanjuju, ali ga nikada ne uklanjaju. Eksplicitno čekanje rješava samo probleme s vremenom - pogrešan lokator, presretnuti klik ili zatvorena sesija i dalje izazivaju iznimku koju ništa osim catch bloka ne može apsorbirati.

Selenium 4 zadržava istu hijerarhiju, ali konstruktori čekanja sada uzimaju Duration umjesto cjelobrojnog timeouta, a stroža W3C validacija argumenata znači da se InvalidArgumentException pojavljuje za vrijednosti koje Selenium 3 prihvaćeno bez prigovora.

Samoobnavljajući lokatorski motori track koji selektori prekidaju i zamjenjuju se u radnoj alternativi, što uklanja veliki udio kvarova NoSuchElementException. Slični modeli klasteriraju ponovljeni stog tractako da se istinski novi nedostatak ne zakopa među lošim reprizama.

Copilot je jak na standardnom principu - kostur try-catch-a, lanac catch-a u ispravnom redoslijedu, finally blok koji zatvara upravljački program. Ne može znati koje iznimke baca vaša aplikacija, stoga pregledajte svaki generirani catch.

Oni ga nadopunjuju. ITestListener centralizira zapisivanje i snimke zaslona za svaki test koji ne uspije, što održava tijelo testa čistim. Koristite try-catch samo tamo gdje skripta mora nastaviti nakon pogreške, a ne samo je prijaviti.

Prebacite upravljački program na TakesScreenshot unutar bloka catch ili finally i zapišite datoteku prije zatvaranja sesije. Imenovanje slike po testnoj metodi čini neuspješno CI pokretanje čitljivim bez lokalne reprodukcije greške.

Sažmite ovu objavu uz: