Kivételek kezelése Selenium Webdriver (típusok)

⚡ Okos összefoglaló

Kivételkezelés Selenium A WebDriver megőrzi a hibás leállítási parancsotping egy teljes tesztfutás. Java try-catch, többszörös catch blokkok, throw, throws és végül mindegyik más módot ad egy szkriptnek a helyreállításra.

  • 🔘 Meghatározás: A kivétel egy olyan hiba, amely a program végrehajtása közben keletkezik, és egy kezeletlen hiba a program futási folyamatának összeomlásához vezet.
  • ☑️ Hatály: Selenium A WebDriver több mint negyven kivételosztályt szállít, és mindegyik a WebDriverException-ből származik.
  • ✅ Gyakori bűnelkövetők: A valós hibák többségét a NoSuchElementException, a TimeoutException, a StaleElementReferenceException és az ElementNotInteractableException okozza.
  • 🧪 Kezelése: Egy try-catch blokkpár egyetlen hibatípust izolál, több catch blokk többet választ el egymástól, és végül mindig végrehajtódik.
  • 🇧🇷 Eszkaláció: A throw és throws kulcsszavak kivételt adnak vissza a hívónak, ha az aktuális metódus nem tudja feloldani a hibát.
  • 📊 Diagnózis: printStackTracAz e(), a toString() és a getMessage() függvények eltérő részletességgel jelentik a hibát.

Kivételkezelés Selenium WebDriver try-catch, throw és finally utasításokkal

Mi a kivétel?

A kivétel egy olyan hiba, amely egy program végrehajtása során történik. A program futása közben a programozási nyelv egy kivételt generál, amelyet kezelni kell, különben a program összeomlik.

A kivétel azt jelzi, hogy bár az esemény előfordulhat, ez a típusú esemény ritkán fordul elő. Amikor egy metódus nem tudja kezelni a kivételt, akkor a hívó függvénynek kerül. Java, ami a legtöbbet hajtja Selenium csomagokban minden WebDriver kivétel nincs ellenőrizve, így a fordító soha nem kényszerít arra, hogy elkapd – a kezeletlen hibák csak futásidőben jelentkeznek.

A kivételek típusai itt Selenium webdriver

A WebDriverException a hierarchia alaposztálya, és minden alatta lévő kivétel ettől örököl. A táblázat mind a 41 kivételt felsorolja, amelyekkel találkozhatsz, valamint az egyes kivételeket kiváltó feltételt.

# kivétel Amikor bekövetkezik
1 ElementNotVisibleException A DOM-ban egy meglévő elem rejtett funkciókészlettel rendelkezik.
2 ElementNotSelectableException Az elem a DOM-ban van, de nem választható ki, így az interakció lehetetlen.
3 NoSuchElementException Az elem nem található a következővel: lokátor szállított.
4 NoSuchFrameException Az keret A cél, amelyre váltani szeretnél, nem létezik.
5 NoAlertPresentException Váltás egy éber akkor fut, ha nincs riasztás.
6 NoSuchWindowException Az átváltandó ablakcélpont nem létezik.
7 StaleElementReferenceException A webes elem leválik az aktuális elemről DOM.
8 MunkamenetNemFoundException A WebDriver a böngésző bezárása után lép működésbe.
9 TimeoutException Egy parancs végrehajtása nem fejeződött be időben – például a keresett elem nem található meg a várakozási időn belül.
10 WebDriverException A többi WebDriver kivétel alaposztálya; akkor is keletkezik, amikor a WebDriver közvetlenül a böngésző bezárása után cselekszik.
11 KapcsolatLezártKivétel Kapcsolatszakadás van a meghajtóban.
12 ElementClickInterceptedException Az eseményeket fogadó elem elrejti a kattintáshoz kért elemet.
13 ElementNotInteractableException Az elem jelen van a DOM-ban, de lehetetlen vele interakcióba lépni.
14 Kivétel a válaszban (ErrorInResponse) Valami hiba történt a következővel való interakció során: Firefox kiterjesztés vagy a távoli illesztőprogram-kiszolgáló.
15 Hibakezelő. Ismeretlen kiszolgálókivétel Helyőrzőként használatos, ha a szerver verem nélkül ad vissza hibát. trace.
16 ImeActivationFailedException Az IME motor aktiválása sikertelen.
17 ImeNotAvailableException Az IME támogatás nem érhető el.
18 Bizonytalan tanúsítványkivétel A navigáció hatására a felhasználói ügynök egy tanúsítványfigyelmeztetés, amit egy érvénytelen vagy lejárt TLS-tanúsítvány okozhat.
19 ÉrvénytelenArgumentKivétel Egy argumentum nem tartozik a várt típusba.
20 Érvénytelen Süti Tartomány Kivétel A aprósütemény egy másik domain alá kerül hozzáadásra a jelenlegi helyett URL.
21 Érvénytelen koordináták kivétele A talált interakciós művelet érvénytelen.
22 ÉrvénytelenElemÁllapotKivétel A parancs nem fejezhető be, mert az elem érvénytelen.
23 Érvénytelen munkamenet-azonosító kivétel A megadott munkamenet-azonosító nem szerepel az aktív munkamenetek között, tehát nem létezik vagy inaktív.
24 Érvénytelen váltás erreTargetkivétel A váltani kívánt keret vagy ablakcélpont nem létezik.
25 Javascriptkivétel Hiba történt a végrehajtás során JavaA felhasználó által megadott szkript.
26 JsonException A munkamenetet akkor kéri a rendszer, ha a munkamenet még nincs létrehozva.
27 NoSuchAttributeException Egy elem attribútuma nem található.
28 MozogTargetHatáron kívüli kivétel Az ActionChains move() metódusnak megadott célpont érvénytelen – például „out of the document”.
29 NoSuchContextException A mobileszközök tesztelését végző ContextAware nem találja a kért kontextust.
30 Nincs ilyen süti kivétel Nem található a megadott elérési útnak megfelelő süti a jelenleg böngészett dokumentum sütijei között.
31 Nem található kivétel A WebDriverException egy alosztálya, amely akkor keletkezik, ha egy elem nem létezik a DOM-ban.
32 Távoli illesztőprogram-kiszolgáló kivétel A szerver nem válaszol, mert a leírt képességek nem megfelelőek.
33 Képernyőkép-kivétel Képernyőt nem lehet rögzíteni.
34 SessionNotCreatedException Nem sikerült új munkamenetet létrehozni.
35 UnableToSetCookieException Egy illesztőprogram nem tud sütit beállítani.
36 Váratlan címkenév-kivétel Egy támogató osztály nem a várt módon kapott webes elemet.
37 Nem kezelt riasztási kivétel Van egy riasztás, de a WebDriver nem tudja végrehajtani a riasztási műveletet.
38 Váratlan riasztási jelen kivétel Egy váratlan riasztás jelenik meg.
39 IsmeretlenMetódusKivétel A kért parancs megegyezik egy ismerttel URL de nem egy módszer erre a konkrét esetre URL.
40 Elérhetetlen böngészőkivétel A böngésző nem nyitható meg, vagy valamilyen okból összeomlott.
41 Nem támogatott parancskivétel A távoli WebDriver nem a várt módon küld érvényes parancsokat.

Három domináns a napi hibakeresésben: a NoSuchElementException hibás eredményt jelent. XPath vagy egy nem renderelt elem esetében a TimeoutException azt jelenti, hogy a várakozás túl rövid egy elemhez. AJAX válasz, és a StaleElementReferenceException egy dinamikus újrarenderelés.

Kivételek kezelése a Selenium

Íme a kivételek kezelésére szolgáló szabványos konstrukciók a következőben: Selenium WebDriver. Mindegyik egyszerű Java, így bármilyen helyzetben működik WebDriver szkript extra könyvtárak nélkül.

1. lépés) Próbáld elkapni

Ez a metódus a try és catch kulcsszavak kombinációjával képes kivételeket elkapni. A try parancs a blokk kezdetét jelöli, a catch pedig a try blokk végére kerül, ahol feloldja a kivételt.

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

2. lépés) Több rögzítőblokk

Különböző típusú kivételek léteznek, és egyetlen kódblokk többet is okozhat. Több catch blokk lehetővé teszi, hogy minden típust külön, a saját kódjával kezeljünk. Kettőnél több catch blokkot is használhatunk, és nincs korlátozás arra vonatkozóan, hogy hányat adhatunk hozzá.

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

3. lépés) Dobd

Amikor kivételt szeretnénk generálni, a throw kulcsszó átadja azt futási időben történő kezelésre. A throw kulcsszót akkor használjuk, ha egy kivételt továbbítunk tovább, ahelyett, hogy az aktuális metódusban feloldanánk azt.

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

4. lépés: Több kivétel

A throws záradékban különféle kivételeket említhetsz.

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
}

5. lépés) Végül

A finally kulcsszó egy blokkot hoz létre a try blokk alatt. A kulcsszó végrehajtódik, függetlenül attól, hogy történt-e kivétel, így ez a megfelelő hely egy illesztőprogram bezárására vagy egy fájlkezelő feloldására.

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

Kivételinformációk megjelenítésének módszerei

Miután egy kivételt észlelt a rendszer, maga az objektum tartalmazza a diagnosztikai részleteket. A megjelenítéshez a következő módszereket használhatja:

Módszer Amit jelent
printStackTrace() Kinyomtatja a verem tartalmát trace, a kivétel neve és egyéb hasznos leírás.
toString () Egy szöveges üzenetet ad vissza, amely leírja a kivétel nevét és leírását.
getMessage() A kivétel leírását önmagában jeleníti meg.

Párosítsd ezeket egy, a catch blokkon belül készített képernyőképpel, és egy sikertelen futtatás megmutatja, hogy mi tört el, és hogyan nézett ki az oldal.

GYIK

Minden WebDriver kivétel nincs ellenőrizve, mivel mindegyik a RuntimeException-t a WebDriverException-ön keresztül kiterjeszti. A fordító ezért soha nem kér try-catch-et, ami kényelmes, de azt is jelenti, hogy egy védelem nélküli lokátorhiba csak akkor jelenik meg, amikor a teszt ténylegesen fut.

A hivatkozás gyorsítótárazása helyett közvetlenül a művelet előtt helyezd át az elemet. Egy rövid újrapróbálkozási ciklus, amely figyelmen kívül hagyja a kivételt és újra lekéri a csomópontot, sokkal megbízhatóbban kezeli a React vagy Vue újrarendereléseket, mint egy hosszabb sleep mód.

Jelentősen csökkentik, de soha nem távolítják el. Egy explicit várakozás csak időzítési problémákat old meg – egy rossz lokátor, egy elfogott kattintás vagy egy lezárt munkamenet továbbra is kivételt generál, amelyet csak egy catch blokk képes elnyelni.

Selenium A 4-es verzió megtartja ugyanazt a hierarchiát, de a várakozási konstruktorok mostantól Duration-t (durációt) vesznek figyelembe egész időtúllépés helyett, és a szigorúbb W3C argumentumérvényesítés azt jelenti, hogy az InvalidArgumentException olyan értékek esetén jelenik meg, amelyek Selenium 3 panasz nélkül elfogadva.

Öngyógyító lokátormotorok track amely szelektorok megszakadnak és egy működő alternatívát választanak ki, ami a NoSuchElementException hibák nagy részét kiküszöböli. Hasonló modellek klaszterezik az ismétlődő veremeket tracígy egy valóban új hiba nem kerül eltemetésre a bizonytalan ismétlések között.

A Copilot erős a sablonos megoldásokban – egy try-catch váz, egy megfelelő sorrendben elhelyezett catch lánc, egy finally blokk, ami kilép a driverből. Nem tudhatja, hogy a saját alkalmazásod milyen kivételeket dob, ezért minden generált catch blokkot ellenőrizni kell.

Kiegészítik ezt. Az ITestListener központosítja a sikertelen tesztek naplózását és képernyőképeit, így a teszt törzse tisztán marad. A try-catch parancsot csak akkor használjuk, ha a szkriptnek a hiba után folytatnia kell a folyamatot, ahelyett, hogy egyszerűen csak jelentené azt.

Másold át a drivert a TakesScreenshot-ra a catch vagy a blokk belsejében, és írd ki a fájlt a munkamenet bezárása előtt. A képfájlnak a tesztmetódus utáni elnevezése olvashatóvá teszi a sikertelen CI-futtatást a hiba helyi reprodukálása nélkül.

Foglald össze ezt a bejegyzést a következőképpen: