top 10 selenium exceptions
Behandeln von Selenium WebDriver-Ausnahmen mit dem Exception Handling Framework - Selenium Tutorial # 19
Eine Ausnahme im Automatisierungscode ist sehr häufig. 'Ausnahme' ist, wie das Wort schon sagt, ein besonderer oder ungewöhnlicher Fall.
Die Ausführung von Automatisierungscode wird normalerweise aufgrund vieler Faktoren, die mit der Ausführung zusammenhängen, wie z. B. Netzwerkstabilitätsproblemen, Internetproblemen, Serverstabilität usw., möglicherweise nicht wie erwartet ausgeführt. Möglicherweise treten Ausnahmen aufgrund unzureichender Wartezeit oder falscher Syntaxen, Parameter usw. auf.
Im letzten WebDriver-Tutorial haben wir drei verschiedene Arten wichtiger Webelemente kennengelernt, z Webtabellen, Frames und dynamische Elemente und ihre Handhabungsmechanismen in Selenskript
Bevor Sie mit den Framework-Tutorials fortfahren Selentraining Serie, hier in diesem Tutorial werden wir lernen Arten von Ausnahmen und Umgang mit Ausnahmen in Java- und Selenium-Skripten . Entwickler / Tester verwenden das Framework zur Ausnahmebehandlung, um eine Ausnahme in Selenskripten zu behandeln.
Was du lernen wirst:
- Was ist eine Ausnahme?
- Vor- und Nachteile des Vermeidungsansatzes
- Arten von Ausnahmen in Java und Selen
- Ausnahmebehandlung
- Häufige Ausnahmen in Selenium WebDriver
- Vermeiden und Behandeln häufiger Ausnahmen
- # 1) org.openqa.selenium.NoSuchElementException
- # 2) org.openqa.selenium.NoSuchWindowException
- # 3) org.openqa.selenium.NoSuchFrameException
- # 4) org.openqa.selenium.NoAlertPresentException
- # 5) org.openqa.selenium.InvalidSelectorException
- # 6) org.openqa.selenium.ElementNotVisibleException
- # 7) org.openqa.selenium.ElementNotSelectableException
- # 8) org.openqa.selenium.TimeoutException
- # 9) org.openqa.selenium.NoSuchSessionException
- # 10) org.openqa.selenium.StaleElementReferenceException
- Fazit
- Literatur-Empfehlungen
Was ist eine Ausnahme?
Ausnahmen sind Ereignisse, aufgrund derer das Java-Programm abrupt endet, ohne die erwartete Ausgabe zu geben. Java bietet ein Framework, in dem ein Benutzer Ausnahmen behandeln kann.
Der Prozess der Behandlung von Ausnahmen wird als Ausnahmebehandlung bezeichnet.
Ausnahmen müssen behandelt werden, da sie den normalen Ausführungsfluss eines Programms unterbrechen. Eine der wichtigen Absichten der Ausnahmebehandlung besteht darin, diese Unterbrechung zu verhindern und die Programmausführung fortzusetzen. Manchmal möchten Sie möglicherweise eine Reihe von Aktionen ausführen, wenn eine bestimmte Ausnahme auftritt.
Wenn eine Ausnahme auftritt, wird ein Ausnahmeobjekt erstellt, das technisch als „ Eine Ausnahme auslösen “ und wir fügen hinzu Versuchen / Fangen Blöcke wie,
try { // Protected code } catch (ExceptionName e) { // Catch block }
# 1) Der Code, der möglicherweise eine Ausnahme auslöst, wird im Try-Block hinzugefügt.
#zwei) Die Catch-Anweisung fängt die Ausnahme ab und nimmt sie als Parameter.
#3) Wenn keine Ausnahme ausgelöst wird, wird die try-Anweisung ausgeführt und nicht die catch-Anweisung.
Beispiel : Wenn das Selenium-Skript aufgrund des falschen Locators fehlschlägt, sollte der Entwickler in der Lage sein, den Grund für den Fehler zu verstehen. Dies kann leicht erreicht werden, wenn die Ausnahme im Programm ordnungsgemäß behandelt wird.
Nach meiner Erfahrung ist es am besten, WebDriver-Ausnahmen nach Möglichkeit zu vermeiden und wirklich außergewöhnliche Fälle zu erfassen. Verwenden Sie try / catch, um Dinge zu behandeln, die schief gehen und außerhalb meiner Kontrolle liegen.
Vermeiden Sie diejenigen, die ich andere fangen kann!
Dies ist die beste Strategie, die für mich funktioniert hat.
Zum Beispiel, Stellen Sie sich eine Testseite vor, deren Laden auf einem Testserver länger als gewöhnlich dauert. Bei Aktionen auf dieser Seite treten häufig Ausnahmen auf. Anstatt dies jedes Mal zu fangen, können wir es
- Fügen Sie einen Wartebefehl hinzu und versuchen Sie, eine Ausnahme zu vermeiden
- Verwenden Sie 'Try / Catch', um den Fall zu behandeln, dass ein wirklich außergewöhnlicher Fall aufgetreten ist
Dadurch wird die Wahrscheinlichkeit von Ausnahmen verringert.
Vor- und Nachteile des Vermeidungsansatzes
Vorteile | Nachteile |
---|---|
1) Dieser Ansatz verringert die Wahrscheinlichkeit von Ausnahmen. | 1) Erhöht die Codezeilen, da Sie zusätzlichen Code hinzufügen, um Ausnahmen zu vermeiden |
Wenn eine Ausnahme immer noch abgefangen wird, wäre dies 2) ein wirklich außergewöhnlicher Fall, der es wert ist, überprüft zu werden | 2) Sollte ein besseres Verständnis der Web-Treiber-API, Befehle und Ausnahmen haben |
Reduzieren Sie die Debugging-Zeit. Der Automatisierungscode soll Fehler finden, und Sie möchten nicht zu viele unerwünschte 3) Ausnahmen sehen und die Gründe dafür finden | |
4) Im Catch-Block beschäftigen Sie sich mit gültigen Fällen | |
5) Reduzieren Sie falsche Fehler | |
6) Klarerer Bericht |
In diesem Tutorial werden wir diskutieren Vermeiden und handhaben Ansatz für die 10 häufigsten Ausnahmen in Selenium WebDriver. Lassen Sie uns vorher ein grundlegendes Verständnis der Ausnahmebehandlungs- und Try / Catch-Blöcke erlangen.
Arten von Ausnahmen in Java und Selen
Im Folgenden haben wir die Arten von Ausnahmen und die verschiedenen Möglichkeiten beschrieben, wie wir das Framework für die Ausnahmebehandlung in Selenskripten verwenden können.
Es gibt drei Arten von Ausnahmen:
- Überprüfte Ausnahme
- Deaktivierte Ausnahme
- Error
Die Klassenhierarchie von Ausnahme und Fehler:
# 1) Überprüfte Ausnahme: Die aktivierte Ausnahme wird während der Kompilierungszeit behandelt und gibt den Kompilierungsfehler aus, wenn sie während der Kompilierungszeit nicht abgefangen und behandelt wird.
Beispiel :: FileNotFoundException , IOException usw.
# 2) Ungeprüfte Ausnahme: Im Falle der nicht aktivierten Ausnahme muss ein Compiler nicht damit umgehen. Der Compiler ignoriert dies während der Kompilierungszeit.
Beispiel :: ArrayIndexoutOfBoundException
# 3) Fehler: Wenn ein Szenario schwerwiegend ist und das Programm nicht wiederhergestellt werden kann, gibt JVM einen Fehler aus. Fehler können vom Try-Catch-Block nicht behandelt werden. Selbst wenn der Benutzer versucht, den Fehler mithilfe des Try-Catch-Blocks zu behandeln, kann er den Fehler nicht beheben.
Beispiel :: Assertionsfehler , Außerhalb des Speicherfehler usw.
Ausnahmebehandlung
Try and Catch Block:
versuchen zu fangen Blöcke werden im Allgemeinen verwendet, um Ausnahmen zu behandeln. Die Art der Ausnahmen wird im erwarteten Catch-Block deklariert. Wenn eine Ausnahme im try-Block auftritt, bewegt sich die Steuerung sofort, um den Block zu fangen.
Beispiel ::
try { br = new BufferedReader(new FileReader('Data')); } catch(IOException ie) { ie.printStackTrace(); }
Abhängig von der Art der Ausnahme können mehrere Fangblöcke für einen Versuchsblock vorhanden sein.
Beispiel ::
try { br = new BufferedReader(new FileReader('Data')); } catch(IOException ie) { ie.printStackTrace(); } catch(FileNotFoundException file){ file.printStackTrace(); }
wirft Ausnahme:
wirft Das Schlüsselwort in Java wird verwendet, um eine Ausnahme auszulösen, anstatt sie zu behandeln. Alle aktivierten Ausnahmen können von Methoden ausgelöst werden.
Beispiel ::
public static void main(String() args) throws IOException { BufferedReader br=new BufferedReader(new FileReader('Data')); while ((line = br.readLine()) != null) { System.out.println(line); } }
endlich Block:
endlich Der Block wird unabhängig von der Ausführung des Try-Catch-Blocks ausgeführt und sofort nach Abschluss des Try / Catch-Blocks.
Grundsätzlich kann das Schließen von Dateien, die Datenbankverbindung usw. im finally-Block geschlossen werden.
Beispiel ::
try { br = new BufferedReader(new FileReader('Data')); } catch(IOException ie) { ie.printStackTrace(); } Finally { br.close(); }
Im obigen Beispiel ist BufferReader Stream wird im Endblock geschlossen. br.close () wird immer ausgeführt, unabhängig von der Ausführung des Try-and-Catch-Blocks.
Hinweis : endlich kann block ohne catch block existieren. Es ist nicht immer notwendig, einen Fangblock zu haben.
Es kann viele Fangblöcke geben, aber nur ein Endblock kann verwendet werden.
Werfen : Throwable ist eine übergeordnete Klasse für Fehler und Ausnahmen. Im Allgemeinen ist es schwierig, Fehler in Java zu behandeln. Wenn ein Programmierer sich über die Art des Fehlers und der Ausnahme nicht sicher ist, wird empfohlen, die Throwable-Klasse zu verwenden, die sowohl Fehler als auch Ausnahmen abfangen kann.
Beispiel ::
try { br = new BufferedReader(new FileReader('Data')); } catch (Throwable t) { t.printStackTrace(); }
Häufige Ausnahmen in Selenium WebDriver
Selen hat seine eigenen Ausnahmen. Während der Entwicklung von Selenskripten muss ein Programmierer diese Ausnahmen behandeln oder auslösen.
Nachfolgend einige Beispiele für Ausnahmen bei Selen:
Alle Laufzeitausnahmeklassen in Selenium WebDriver fallen unter die Superklasse WebDriverException.
Obwohl es unter WebDriverException viele Ausnahmeklassen gibt, sehen wir häufig die folgenden.
- NoSuchElementException
- NoSuchWindowException
- NoSuchFrameException
- NoAlertPresentException
- InvalidSelectorException
- ElementNotVisibleException
- ElementNotSelectableException
- TimeoutException
- NoSuchSessionException
- StaleElementReferenceException
Einzelheiten ::
ElementNotVisibleException : Wenn Selen versucht, ein Element zu finden, das Element jedoch auf der Seite nicht sichtbar ist
NoAlertPresentException : Wenn ein Benutzer versucht, eine Warnmeldung zu verarbeiten, die Warnmeldung jedoch nicht vorhanden ist.
NoSuchAttributeException : Beim Versuch, den Attributwert abzurufen, ist das Attribut jedoch im DOM nicht verfügbar.
NoSuchElementException : Diese Ausnahme ist auf den Zugriff auf ein Element zurückzuführen, das auf der Seite nicht verfügbar ist.
WebDriverException : Eine Ausnahme tritt auf, wenn ein Code WebDriver nicht initialisieren kann.
Vermeiden und Behandeln häufiger Ausnahmen
Lassen Sie uns den Avoid-and-Handle-Ansatz für die oben genannten Ausnahmen diskutieren:
# 1) org.openqa.selenium.NoSuchElementException
Diese häufig vorkommende Ausnahmeklasse ist eine Unterklasse von NotFoundException Klasse. Die Ausnahme tritt auf, wenn WebDriver keine Elemente finden und finden kann.
Normalerweise geschieht dies, wenn der Tester einen falschen Element-Locator in die findElement-Methode (By, by) schreibt.
Beachten Sie, dass im folgenden Beispiel die korrekte ID für das Textfeld 'erstes Feld' war, der Tester sie jedoch fälschlicherweise als 'Faustfeld' bezeichnet hat. In diesem Fall kann WebDriver das Element und nicht finden org.openqa.selenium.NoSuchElementException wird geworfen
driver.findElement(By.id('submit')).click(); Exception Handling: try { driver.findElement(By.id('submit')).click(); } catch (NoSuchElementException e)
In diesem Fall wird die Ausnahme auch dann ausgelöst, wenn das Element nicht geladen ist.
Vermeiden und Behandeln : Versuchen Sie, einen Wartebefehl zu geben.
Beispiel: Der folgende Wartebefehl wartet 10 Sekunden auf das Vorhandensein eines Webelements mit der ID 'submit'. Dann versucht es darauf zu klicken. Wenn das Element verfügbar ist, der Klick jedoch weiterhin fehlschlägt, wird eine Ausnahme abgefangen.
Die Verwendung einer verzögerten Zeit ist in der Testautomatisierung üblich, um eine Pause zwischen den Schritten zu erzeugen. Durch Hinzufügen eines Try / Catch stellen wir sicher, dass das Programm auch dann fortgesetzt wird, wenn das Warten nicht helfen kann.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.presenceOfElementLocated(By.id('submit'))); try { driver.findElement(By.id('submit')).click(); } catch (WebDriverException e) { System.out.println(“An exceptional case.”); } } catch (TimeOutException e) { System.out.println(“WebDriver couldn’t locate the element”); }
# 2) org.openqa.selenium.NoSuchWindowException
NoSuchWindowException kommt unter NotFoundException Klasse. Dies wird ausgelöst, wenn WebDriver versucht, zu einem ungültigen Fenster zu wechseln.
Der folgende Code kann org.openqa.selenium.NoSuchWindowException auslösen, wenn das Fensterhandle nicht vorhanden ist oder nicht zum Wechseln verfügbar ist.
driver.switchTo (). window (handle_1);
Vermeiden und Behandeln : Wir würden Fensterhandles verwenden, um den Satz aktiver Fenster abzurufen und dann Aktionen für dasselbe auszuführen.
Im folgenden Beispiel wird für jedes Fensterhandle der Treiberwechsel zu ausgeführt. Daher verringert sich die Wahrscheinlichkeit, einen falschen Fensterparameter zu übergeben.
for (String handle : driver.getWindowHandles()) { try { driver.switchTo().window(handle); } catch (NoSuchWindowException e) { System.out.println(“An exceptional case”); } }
# 3) org.openqa.selenium.NoSuchFrameException
Wenn WebDriver versucht, zu einem ungültigen Frame zu wechseln, wird NoSuchFrameException unter der NotFoundException-Klasse ausgelöst.
Der folgende Code kann org.openqa.selenium.NoSuchFrameException auslösen, wenn ein Frame 'frame_11' nicht vorhanden oder nicht verfügbar ist.
driver.switchTo (). frame ('frame_11');
Ausnahmebehandlung:
try { driver.switchTo().frame('frame_11'); } catch (NoSuchFrameException e)
In diesem Fall wird die Ausnahme auch dann ausgelöst, wenn der Frame nicht geladen ist.
Vermeiden und Behandeln : Versuchen Sie, einen Wartebefehl zu geben.
Im folgenden Beispiel wartet WebDriver 10 Sekunden, bis der Frame verfügbar ist. Wenn der Frame verfügbar ist und dennoch eine Ausnahme vorliegt, wird er abgefangen.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.frameToBeAvaliableAndSwitchToIt(frame_11)); try { driver.switchTo().frame('frame_11'); } catch (WebDriverException e) { System.out.println(“An exceptional case”); } } catch (TimeOutException e) { System.out.println(“WebDriver couldn’t locate the frame”); }
# 4) org.openqa.selenium.NoAlertPresentException
NoAlertPresentException unter NotFoundException wird ausgelöst, wenn WebDriver versucht, zu einer Warnung zu wechseln, die nicht verfügbar ist.
org.openqa.selenium.NoAlertPresentException wird ausgelöst Wenn unter dem Automatisierungscode Aufrufe die Operation () für die Klasse Alert () annehmen, wenn noch keine Warnung auf dem Bildschirm angezeigt wird.
driver.switchTo (). alert (). accept ();
Ausnahmebehandlung:
try { driver.switchTo().alert().accept(); } catch (NoSuchAlertException e)
In diesem Fall wird die Ausnahme auch dann ausgelöst, wenn die Warnung nicht vollständig geladen ist.
Vermeiden und Behandeln : Verwenden Sie in allen Fällen, in denen eine Warnung erwartet wird, immer eine explizite oder fließende Wartezeit für eine bestimmte Zeit. Wenn die Warnung verfügbar ist und dennoch eine Ausnahme vorliegt, wird sie abgefangen.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.alertIsPresent()); try { driver.switchTo().alert().accept(); } catch (NoAlertPresentException e) { System.out.println(“An exceptional case”); } } catch (TimeOutException e) System.out.println(“WebDriver couldn’t locate the Alert”); }
# 5) org.openqa.selenium.InvalidSelectorException
Diese Unterklasse von NoSuchElementException Klasse tritt auf, wenn ein Selektor falsch oder syntaktisch ungültig ist. Diese Ausnahme tritt häufig auf, wenn der XPATH-Locator verwendet wird.
Betrachten Sie das folgende Beispiel:
clickXPathButtonAndWait ('// button (@ type =’ button ’) (100)');
Dies würde eine InvalidSelectorExeption auslösen, da die XPATH-Syntax falsch ist.
Vermeiden und Handhaben : Um dies zu vermeiden, sollten wir den verwendeten Locator überprüfen, da der Locator wahrscheinlich falsch oder die Syntax falsch ist. Die Verwendung von Firebug zum Suchen von xpath kann diese Ausnahme verringern.
Der folgende Code zeigt, wie Sie mit Try / Catch damit umgehen
try { clickXPathButtonAndWait('//button(@type='button')'); } catch (InvalidSelectorException e) { }
# 6) org.openqa.selenium.ElementNotVisibleException
ElementNotVisibleException Klasse ist eine Unterklasse von ElementNotInteractableException Klasse. Diese Ausnahme wird ausgelöst, wenn WebDriver versucht, eine Aktion für ein unsichtbares Webelement auszuführen, mit dem nicht interagiert werden kann. Das heißt, das Webelement befindet sich in einem verborgenen Zustand.
Zum Beispiel, Wenn im folgenden Code der Schaltflächentyp mit der ID 'Submit' in HTML 'versteckt' ist, org.openqa.selenium.ElementNotVisibleException wird geworfen.
driver.findElement(By.id('submit')).click(); Exception Handling: try { driver.findElement(By.id('submit')).click(); } catch (ElementNotVisibleException e)
In diesem Fall wird die Ausnahme auch dann ausgelöst, wenn die Seite nicht vollständig geladen wurde.
wie man gefälschte E-Mail-Konten erstellt
Vermeiden und Behandeln : Es gibt zwei Möglichkeiten, dies zu tun. Wir können entweder warten, bis das Element vollständig ist.
Der folgende Code wartet 10 Sekunden auf das Element. Wenn das Element sichtbar ist und dennoch eine Ausnahme ausgelöst wird, wird es abgefangen.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.visibilityOfElementLocated(By.id(”submit”)); try { driver.findElement(By.id('submit')).click(); } catch (WebDriverException e) { System.out.println(“Exceptional case”); } } catch (TimeOutException e) System.out.println(“WebDriver couldn’t find this element visible”); }
# 7) org.openqa.selenium.ElementNotSelectableException
Diese Ausnahme fällt unter InvalidElementStateException Klasse . ElementNotSelectableException Gibt an, dass das Webelement auf der Webseite vorhanden ist, aber nicht ausgewählt werden kann.
Zum Beispiel, Der folgende Code kann eine ElementNotSelectableException auslösen, wenn die ID 'swift' deaktiviert ist.
Dropdown-Liste auswählen = neu Select (driver.findElement (By.id ('swift')));
Ausnahmebehandlung:
Versuchen {
Dropdown-Liste auswählen = neu Select (driver.findElement (By.id ('swift')));
} catch (ElementNotSelectableException e)
In diesem Fall wird eine Ausnahme ausgelöst, auch wenn das Element nach einer Weile aktiviert wird.
Vermeiden und Behandeln : Wir können einen Wartebefehl hinzufügen, um zu warten, bis das Element anklickbar wird. Wenn es immer noch eine Ausnahme gibt, wird sie abgefangen.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions. elementToBeClickable(By.id(”swift”)); try { Select dropdown = new Select(driver.findElement(By.id('swift'))); } catch (WebDriverException e) { System.out.println(“Exceptional case”); } } catch (TimeOutException e) System.out.println(“WebDriver found that this element was not selectable.”); }
# 8) org.openqa.selenium .TimeoutException
Diese Ausnahme tritt auf, wenn ein Befehlsabschluss länger als die Wartezeit dauert. Wartezeiten werden hauptsächlich in WebDriver verwendet, um die Ausnahme ElementNotVisibleException zu vermeiden.
Manchmal wird die Testseite vor dem nächsten Befehl im Programm möglicherweise nicht vollständig geladen. Wenn WebDriver versucht, ein Element auf der Webseite zu finden, bevor die Seite vollständig geladen ist, wird die Ausnahme ElementNotVisibleException ausgelöst. Um diese Ausnahme zu vermeiden, werden Wartebefehle hinzugefügt.
Wenn die Komponenten jedoch auch nach dem Warten nicht geladen werden, ist dies die Ausnahme org.openqa.selenium .TimeoutException wird geworfen.
driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);
driver.get ('https://www.softwaretestinghelp.com');
Im obigen Programm wird eine implizite Wartezeit von 10 Sekunden hinzugefügt. Wenn die Seite www.softwaretestinghelp.com Wird in 10 Sekunden nicht geladen, wird TimeoutException ausgelöst.
Vermeiden und Handhaben : Um dies zu vermeiden, können wir die durchschnittliche Ladezeit einer Seite manuell überprüfen und die Wartezeit anpassen
Oder wir können mit JavaScript Executor explizite Wartezeiten hinzufügen, bis die Seite geladen ist.
Im folgenden Beispiel wird JavaScript Executor verwendet. Nach der Seitennavigation rufen wir JavaScript return document.readyState für 20 Sekunden auf, bis 'complete' zurückgegeben wird.
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); wait.until(webDriver -> ((JavascriptExecutor)webDriver).executeScript('return document.readyState').equals('complete')); driver.get('https://www.softwaretestinghelp.com');
# 9) org.openqa.selenium.NoSuchSessionException
Diese Ausnahme wird ausgelöst, wenn eine Methode aufgerufen wird, nachdem der Browser von WebDriver.quit () beendet wurde. Dies kann auch aufgrund von Webbrowser-Problemen wie Abstürzen geschehen, und WebDriver kann mit der Treiberinstanz keinen Befehl ausführen.
Um diese Ausnahme zu sehen, kann der folgende Code ausgeführt werden.
driver.quit ()
Dropdown-Liste auswählen = neu Select (driver.findElement (By.id ('swift')));
Vermeiden und Handhaben : Wählen Sie immer die neueste stabile Version des Browsers, um Selenium Webdriver-Testfälle auszuführen.
Diese Ausnahme kann durch Verwendung von driver.quit () nach Abschluss aller Tests reduziert werden. Versuchen Sie nicht, sie nach jedem Testfall zu verwenden. Dies kann zu Problemen führen, wenn die Treiberinstanz null ist und anstehende Testfälle versuchen, sie ohne Initialisierung zu verwenden.
Der folgende Code erstellt eine WebDriver-Instanz in der Annotation @BeforeSuite TestiNG und zerstört sie in der Annotation @AfterSuite TestiNG
@BeforeSuite public void setUp() throws MalformedURLException { WebDriver driver = new FirefoxDriver(); } @AfterSuite public void testDown() { driver.quit(); }
# 10) org.openqa.selenium.StaleElementReferenceException
Diese Ausnahme besagt, dass ein Webelement nicht mehr auf der Webseite vorhanden ist.
Dieser Fehler ist nicht mit ElementNotVisibleException identisch.
StaleElementReferenceException wird ausgelöst, wenn ein Objekt für ein bestimmtes Webelement problemlos im Programm erstellt wurde. Dieses Element ist im Fenster nicht mehr vorhanden. Dies kann passieren, wenn es eine gab
- Navigation zu einer anderen Seite
- DOM wurde aktualisiert
- Ein Rahmen- oder Fensterschalter
WebElement firstName = driver.findElement (By.id ('Vorname'));
driver.switchTo (). window (Child_Window);
element.sendKeys ('Aaron');
Im obigen Code wurde das Objekt firstName erstellt und dann das Fenster gewechselt. Anschließend versucht WebDriver, 'Aaron' in das Formularfeld einzugeben. In diesem Fall wird die StaleElementReferenceException ausgelöst.
Vermeiden und Handhaben : Bestätigen Sie, dass wir versuchen, die Aktion im richtigen Fenster auszuführen. Um Probleme aufgrund der DOM-Aktualisierung zu vermeiden, können wir Dynamic Xpath verwenden
Lassen Sie uns ein anderes Beispiel diskutieren.
Angenommen, 'ID' eines Benutzernamenfelds ist 'Benutzername_1' und der XPath wird sein // * (@ id = ’Vorname_1?) . Wenn Sie die Seite erneut öffnen, ändert sich die ID möglicherweise in 'ID'. 'Vorname _11 ’. In diesem Fall schlägt der Test fehl, da der WebDriver das Element nicht finden konnte. In diesem Fall wird die StaleElementReferenceException ausgelöst.
In diesem Fall können wir einen dynamischen xpath verwenden, wie z.
try { driver.findElement(By.xpath(“//*(contains(@id,firstname’))”)).sendKeys(“Aaron”); } catch (StaleElementReferenceException e)
Im obigen Beispiel wird dynamisches XPATH verwendet. Wenn die Ausnahme weiterhin gefunden wird, wird sie abgefangen.
Fazit
Die Ausnahmebehandlung ist der wesentliche Bestandteil jedes Java-Programms sowie jedes Selen-Skripts. Wir können robusten und optimalen Code erstellen, indem wir Behandeln einer Ausnahme auf intelligente Weise . Es wird auch empfohlen, Ausnahmen in einem Skript zu behandeln, um einen besseren Bericht zu erhalten, wenn ein Programm aus irgendeinem Grund fehlschlägt.
Hier haben wir versucht, den Prozess und den Rahmen der Ausnahmebehandlung zu behandeln, die in Selenskripten implementiert werden müssen.
Denken Sie daran, dass es nicht obligatorisch ist, die Ausnahme immer in a zu behandeln versuchen zu fangen Block. Sie können abhängig von den Anforderungen in einem Skript auch eine Ausnahme auslösen.
Eine Ausnahme sollte nicht ignoriert werden, da sie die Programmausführung unterbricht. In diesem Tutorial haben wir verschiedene Ausnahmen und Möglichkeiten durchlaufen, um die Wahrscheinlichkeit zu verringern, dass sie durch manuelle Überprüfungen und Codes erhalten werden.
Das Hinzufügen von Wartezeiten kann einige Fälle wie 'NoSuchElementException', 'ElementNotFoundException', 'ElementNotVisibleException' steuern.
Nächstes Tutorial Nr. 20 :: Im kommenden Tutorial würden wir das diskutieren verschiedene Arten von Test-Frameworks verfügbar . Wir würden auch die Vor- und Nachteile der Verwendung eines vollwertigen Framework-Ansatzes bei Automatisierungstests untersuchen. Wir würden detailliert auf das datengesteuerte Test-Framework eingehen.
Bitte posten Sie Ihre Fragen zur Behandlung von Ausnahmen in Selenium WebDriver, falls Sie welche haben.
Literatur-Empfehlungen
- Java-Ausnahmen und Ausnahmebehandlung mit Beispielen
- Umgang mit Warnungen / Popups in Selenium WebDriver - Selenium Tutorial # 16
- AutoIt-Tutorial - AutoIt-Download, Installation und grundlegendes AutoIt-Skript
- Cucumber Selenium Tutorial: Integration von Cucumber Java Selenium WebDriver
- Integration von Selen mit JMeter
- Einführung in Selenium WebDriver - Selenium Tutorial # 8
- 30+ beste Selen-Tutorials: Lernen Sie Selen anhand realer Beispiele
- Teilzeit freiberufliche Stellenangebot für Selenexperten