Ausnahmebehandlung in Selenium Webdriver (Typen)

โšก Intelligente Zusammenfassung

Ausnahmebehandlung in Selenium WebDriver verhindert, dass ein fehlgeschlagener Befehl stoppt.ping ein kompletter Testlauf. Java try-catch, mehrere catch-Blรถcke, throw, throws und schlieรŸlich gibt jedes Skript eine andere Mรถglichkeit zur Wiederherstellung.

  • ๐Ÿ”˜ Definition: Eine Ausnahme ist ein Fehler, der wรคhrend der Programmausfรผhrung auftritt, und eine unbehandelte Ausnahme fรผhrt zum Absturz des Programms.
  • โ˜‘๏ธ Umfang: Selenium WebDriver liefert mehr als vierzig Ausnahmeklassen mit, und jede einzelne von ihnen erbt von WebDriverException.
  • โœ… Wiederholungstรคter: NoSuchElementException, TimeoutException, StaleElementReferenceException und ElementNotInteractableException sind die hรคufigsten Fehlerursachen in der Praxis.
  • ๐Ÿงช Handhabung: Ein try-catch-Paar isoliert einen Fehlertyp, mehrere catch-Blรถcke trennen mehrere Fehlertypen, und schlieรŸlich wird immer ein Fehlerblock ausgefรผhrt.
  • ๏ธ Eskalation: Die Schlรผsselwรถrter throw und throws geben eine Ausnahme an den Aufrufer zurรผck, wenn die aktuelle Methode sie nicht auflรถsen kann.
  • ๐Ÿ“Š Diagnose: printStackTrace(), toString() und getMessage() liefern jeweils einen anderen Detaillierungsgrad รผber den Fehler.

Ausnahmebehandlung in Selenium WebDriver mit try-catch, throw und finally

Was ist eine Ausnahme?

Eine Ausnahme ist ein Fehler, der wรคhrend der Ausfรผhrung eines Programms auftritt. Wenn ein Programm lรคuft, erzeugt die Programmiersprache eine Ausnahme, die behandelt werden muss, da das Programm sonst abstรผrzt.

Die Ausnahme weist darauf hin, dass das Ereignis zwar auftreten kann, aber selten vorkommt. Kann eine Methode die Ausnahme nicht behandeln, wird sie an die aufrufende Funktion weitergegeben. Java, was die meisten antreibt Selenium Bei WebDriver-Suites werden alle Ausnahmen ungeprรผft ausgefรผhrt, sodass der Compiler Sie nie dazu zwingt, sie abzufangen โ€“ ein unbehandelter Fehler tritt erst zur Laufzeit auf.

Arten von Ausnahmen in Selenium WebTreiber

WebDriverException ist die Basisklasse der Hierarchie, von der alle darunterliegenden Ausnahmen erben. Die Tabelle listet alle 41 mรถglichen Ausnahmen sowie die jeweilige Auslรถsebedingung auf.

# Exception Wenn es geschieht
1 ElementNotVisibleException Ein vorhandenes Element im DOM hat eine Funktion, die als ausgeblendet definiert ist.
2 ElementNotSelectableException Das Element befindet sich im DOM, kann aber nicht ausgewรคhlt werden, daher ist eine Interaktion unmรถglich.
3 NoSuchElementException Das Element konnte mit dem Locator geliefert.
4 NoSuchFrameException Das Rahmen Das Ziel, zu dem gewechselt werden soll, existiert nicht.
5 NoAlertPresentException Ein Wechsel zu einem alarmieren Wird ausgefรผhrt, wenn keine Warnung angezeigt wird.
6 NoSuchWindowException Das Fenster, zu dem gewechselt werden soll, existiert nicht.
7 StaleElementReferenceException Das Web-Element ist vom aktuellen Element getrennt. DOM.
8 SessionNotFoundException Der WebDriver wird aktiv, nachdem Sie den Browser beendet haben.
9 TimeoutException Ein Befehl konnte nicht rechtzeitig ausgefรผhrt werden โ€“ beispielsweise wurde das gesuchte Element innerhalb der Wartezeit nicht gefunden.
10 WebDriverException Basisklasse der anderen WebDriver-Ausnahmen; wird auch ausgelรถst, wenn der WebDriver direkt nach dem SchlieรŸen des Browsers aktiv wird.
11 ConnectionClosedException Es liegt eine Unterbrechung im Treiber vor.
12 ElementClickInterceptedException Das Element, das die Ereignisse empfรคngt, verdeckt das Element, auf das geklickt werden soll.
13 ElementNotInteractableException Das Element ist im DOM vorhanden, aber es ist unmรถglich, mit ihm zu interagieren.
14 ErrorInResponseException Bei der Interaktion mit dem/der/dem ist ein Fehler aufgetreten. Firefox Erweiterung oder den Remote-Treiberserver.
15 ErrorHandler.UnknownServerException Wird als Platzhalter verwendet, wenn der Server einen Fehler ohne Stacktrace zurรผckgibt. trace.
16 ImeActivationFailedException Die Aktivierung der IME-Engine ist fehlgeschlagen.
17 ImeNotAvailableException IME-Unterstรผtzung ist nicht verfรผgbar.
18 Unsicheres Zertifikat Die Navigation fรผhrte dazu, dass der Benutzeragent auf eine Fehlermeldung stieรŸ. Zertifikatwarnungwas durch ein ungรผltiges oder abgelaufenes TLS-Zertifikat verursacht werden kann.
19 InvalidArgumentException Das Argument gehรถrt nicht zum erwarteten Typ.
20 InvalidCookieDomainException A Plรคtzchen wird unter einer anderen Domรคne anstelle der aktuellen hinzugefรผgt URL.
21 InvalidCoordinatesException Die รผbereinstimmende Interaktionsoperation ist ungรผltig.
22 InvalidElementStateException Der Befehl kann nicht abgeschlossen werden, da das Element ungรผltig ist.
23 InvalidSessionIdException Die angegebene Sitzungs-ID gehรถrt nicht zu den aktiven Sitzungen, sie existiert also nicht oder ist inaktiv.
24 UngรผltigerWechsel zuTargetException Das Zielfenster oder der Zielrahmen, zu dem gewechselt werden soll, existiert nicht.
25 JavascriptException Bei der Ausfรผhrung ist ein Fehler aufgetreten. JavaVom Benutzer bereitgestelltes Skript.
26 JsonException Die Sitzung wird angefordert, wenn keine Sitzung erstellt wurde.
27 NoSuchAttributeException Das Attribut eines Elements konnte nicht gefunden werden.
28 BewegungTargetOutOfBoundsException Das der ActionChains move()-Methode รผbergebene Ziel ist ungรผltig โ€“ beispielsweise auรŸerhalb des Dokuments.
29 NoSuchContextException ContextAware, das Tests auf mobilen Gerรคten durchfรผhrt, kann den angeforderten Kontext nicht finden.
30 NoSuchCookieException Unter den Cookies des aktuell angezeigten Dokuments wurde kein Cookie gefunden, der dem angegebenen Pfadnamen entspricht.
31 NotFoundException Eine Unterklasse von WebDriverException, die ausgelรถst wird, wenn ein Element im DOM nicht existiert.
32 RemoteDriverServerException Der Server antwortet nicht, da die beschriebenen Fรคhigkeiten nicht ausreichen.
33 ScreenshotException Es ist nicht mรถglich, einen Bildschirm aufzunehmen.
34 SessionNotCreatedException Es konnte keine neue Sitzung erstellt werden.
35 UnableToSetCookieException Ein Treiber kann kein Cookie setzen.
36 UnerwarteteTagNameException Eine Supportklasse hat das erwartete Web-Element nicht erhalten.
37 Unbehandelte Ausnahme Es liegt eine Warnung vor, aber WebDriver ist nicht in der Lage, die Warnungsoperation durchzufรผhren.
38 UnerwarteteAlarm-Ausnahme Es erscheint eine unerwartete Warnmeldung.
39 UnknownMethodException Der angeforderte Befehl stimmt mit einem bekannten รผberein. URL aber keine Methode fรผr diesen speziellen Fall URL.
40 UnreachableBrowserException Der Browser lรคsst sich nicht รถffnen oder er ist aus irgendeinem Grund abgestรผrzt.
41 UnsupportedCommandException Der Remote-WebDriver sendet nicht wie erwartet gรผltige Befehle.

Drei Faktoren dominieren das tรคgliche Debugging: NoSuchElementException bedeutet, dass ein Fehler aufgetreten ist XPath oder ein Element, das nicht gerendert wurde; eine TimeoutException bedeutet, dass die Wartezeit zu kurz war. AJAX Antwort und StaleElementReferenceException folgt dynamisch Neu rendern.

Wie man Ausnahmen behandelt in Selenium

Hier sind die Standardkonstrukte zur Behandlung von Ausnahmen in Selenium WebDriver. Jeder ist einfach JavaEs funktioniert also in jeder Umgebung. WebDriver-Skript ohne zusรคtzliche Bibliotheken.

Schritt 1) โ€‹โ€‹Versuchen und fangen

Diese Methode kann Ausnahmen mithilfe einer Kombination der Schlรผsselwรถrter `try` und `catch` abfangen. Der `try`-Befehl markiert den Beginn des Blocks, und `catch` wird am Ende des `try`-Blocks platziert, wo es die Ausnahme behandelt.

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

Schritt 2) Mehrere Catch-Blรถcke

Es gibt verschiedene Arten von Ausnahmen, und ein einzelner Codeblock kann mehrere davon auslรถsen. Mithilfe mehrerer Catch-Blรถcke kรถnnen Sie jede Ausnahmeart separat mit eigenem Code behandeln. Sie kรถnnen mehr als zwei Catch-Blรถcke verwenden, und es gibt keine Begrenzung hinsichtlich ihrer Anzahl.

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

Schritt 3) Werfen

Wenn Sie eine Ausnahme auslรถsen mรถchten, รผbergibt das Schlรผsselwort `throw` diese zur Laufzeitbehandlung. Verwenden Sie `throw`, wenn Sie eine Ausnahme weitergeben, anstatt sie in der aktuellen Methode zu behandeln.

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

Schritt 4) Mehrere Ausnahmen

In der throws-Klausel kรถnnen verschiedene Ausnahmen aufgefรผhrt werden.

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
}

Schritt 5) Endlich

Das Schlรผsselwort `finally` erzeugt einen Block unterhalb des `try`-Blocks. Er wird unabhรคngig davon ausgefรผhrt, ob eine Ausnahme aufgetreten ist, weshalb er sich zum SchlieรŸen eines Treibers oder zum Freigeben eines Dateihandles eignet.

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

Methoden zur Anzeige von Ausnahmeinformationen

Sobald eine Ausnahme abgefangen wird, enthรคlt das Objekt selbst die Diagnosedetails. Sie kรถnnen diese mit den folgenden Methoden anzeigen:

Methodik Was es berichtet
printStackTrace() Gibt den Stapel aus trace, der Name der Ausnahme und weitere nรผtzliche Beschreibungen.
toString () Gibt eine Textnachricht zurรผck, die den Namen und die Beschreibung der Ausnahme enthรคlt.
getMessage () Zeigt die Beschreibung der Ausnahme separat an.

Kombiniert man diese mit einem Screenshot, der innerhalb des Catch-Blocks aufgenommen wurde, zeigt ein fehlgeschlagener Durchlauf sowohl, was schiefgelaufen ist, als auch, wie die Seite aussah.

Hรคufig gestellte Fragen

Alle WebDriver-Ausnahmen sind ungeprรผft, da sie alle von RuntimeException รผber WebDriverException erben. Der Compiler verlangt daher nie einen try-catch-Block, was zwar praktisch ist, aber auch bedeutet, dass ein ungeschรผtzter Locatorfehler erst beim tatsรคchlichen Ausfรผhren des Tests auftritt.

Statt die Referenz zwischenzuspeichern, sollte das Element unmittelbar vor der Bearbeitung neu geladen werden. Eine kurze Wiederholungsschleife, die die Ausnahme ignoriert und den Knoten erneut abruft, bewรคltigt React- oder Vue-Neurenderings deutlich zuverlรคssiger als eine lรคngere Wartezeit.

Sie reduzieren es zwar deutlich, beseitigen es aber nie vollstรคndig. Ein explizites Warten behebt lediglich Timing-Probleme โ€“ ein falscher Locator, ein abgefangener Klick oder eine geschlossene Sitzung lรถsen weiterhin eine Ausnahme aus, die nur ein Catch-Block abfangen kann.

Selenium Version 4 behรคlt die gleiche Hierarchie bei, aber die Wartekonstruktoren akzeptieren nun eine Dauer anstelle eines ganzzahligen Timeouts, und die strengere W3C-Argumentvalidierung fรผhrt dazu, dass InvalidArgumentException fรผr Werte auftritt, die Selenium 3 wurden ohne Beanstandung angenommen.

Selbstheilende Ortungsgerรคte track, welche Selektoren fehlschlagen und durch eine funktionierende Alternative ersetzt werden, wodurch ein GroรŸteil der NoSuchElementException-Fehler behoben wird. ร„hnliche Modelle gruppieren wiederholte Stapel tracDamit ein wirklich neuer Fehler nicht zwischen fehlerhaften Wiederholungen untergeht.

Copilot legt groรŸen Wert auf Standardcode โ€“ ein try-catch-Grundgerรผst, eine Catch-Kette in der richtigen Reihenfolge und einen finally-Block, der den Treiber beendet. Da Copilot nicht weiรŸ, welche Ausnahmen Ihre Anwendung auslรถst, sollten Sie jeden generierten Catch-Block รผberprรผfen.

Sie ergรคnzen es. Ein ITestListener zentralisiert die Protokollierung und Screenshots fรผr jeden fehlgeschlagenen Test und hรคlt so den Testkรถrper รผbersichtlich. Verwenden Sie try-catch nur dann, wenn das Skript nach dem Fehler fortgesetzt werden muss, anstatt ihn lediglich zu melden.

Verwenden Sie innerhalb des catch- oder finally-Blocks die Methode `TakesScreenshot`, um die Datei vor dem SchlieรŸen der Sitzung zu schreiben. Durch die Benennung des Bildes nach der Testmethode wird ein fehlgeschlagener CI-Lauf lesbar, ohne dass der Fehler lokal reproduziert werden muss.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: