top 10 selenium exceptions
Omgaan met Selenium WebDriver-uitzonderingen met behulp van Exception Handling Framework - Selenium Tutorial # 19
Een uitzondering krijgen in automatiseringscode is heel gebruikelijk. ‘Uitzondering’, zoals het woord aangeeft, is een speciaal of ongebruikelijk geval.
De uitvoering van automatiseringscode verloopt meestal niet zoals verwacht vanwege vele factoren die bij de uitvoering betrokken zijn, zoals problemen met de netwerkstabiliteit, internetproblemen, serverstabiliteit enz. We kunnen uitzonderingen krijgen vanwege onvoldoende wachttijd of onjuiste syntaxis, parameters enz.
In de laatste WebDriver-zelfstudie leerden we over 3 verschillende soorten belangrijke webelementen, zoals Webtabellen, frames en dynamische elementen en hun behandelingsmechanismen in seleniumscript
Voordat u verder gaat met Framework-zelfstudies hierin Selenium training serie, hier in deze tutorial zullen we meer leren over soorten uitzonderingen en hoe om te gaan met uitzonderingen in Java- en Selenium-scripts Ontwikkelaars / testers gebruiken een raamwerk voor het afhandelen van uitzonderingen om een uitzondering in seleniumscripts af te handelen.
beste gratis dvd-ripper voor Windows
Wat je leert:
- Wat is een uitzondering?
- Voordelen en nadelen van de aanpak om te vermijden
- Soorten uitzonderingen in Java en Selenium
- Afhandeling van uitzonderingen
- Veelvoorkomende uitzonderingen in Selenium WebDriver
- Veelvoorkomende uitzonderingen vermijden en behandelen
- # 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
- Gevolgtrekking
- Aanbevolen literatuur
Wat is een uitzondering?
Uitzonderingen zijn gebeurtenissen waardoor het Java-programma abrupt eindigt zonder de verwachte uitvoer te geven. Java biedt een raamwerk waarin een gebruiker uitzonderingen kan verwerken.
Het afhandelen van uitzonderingen wordt het afhandelen van uitzonderingen genoemd.
Uitzonderingen moeten worden afgehandeld omdat ze de normale uitvoeringsstroom van een programma onderbreken. Een van de belangrijkste bedoelingen van het afhandelen van uitzonderingen is om deze onderbreking te voorkomen en de uitvoering van het programma voort te zetten. Soms wilt u misschien een aantal acties uitvoeren bij het optreden van een bepaalde uitzondering.
Wanneer zich een uitzondering voordoet, wordt een uitzonderingsobject gemaakt dat technisch wordt aangeduid als ‘ Een uitzondering maken ’ en we voegen toe Proberen te vangen blokken zoals,
# 1) Het stuk code dat een uitzondering zou kunnen genereren, wordt toegevoegd in het Try-blok.
#twee) De Catch-instructie vangt de uitzondering op en neemt deze als parameter.
# 3) Als er geen uitzondering wordt gegenereerd, wordt de instructie try uitgevoerd en niet de instructie catch.
Voorbeeld : Wanneer het seleniumscript mislukt vanwege de verkeerde locator, moet de ontwikkelaar de reden voor de mislukking kunnen begrijpen en dit kan gemakkelijk worden bereikt als de uitzondering correct wordt afgehandeld in het programma.
Mijn ervaring is dat het het beste is om WebDriver-uitzonderingen waar mogelijk te vermijden en echt uitzonderlijke gevallen op te vangen. Gebruik try / catch om dingen aan te pakken die fout gaan en waar ik geen controle over heb.
Vermijd degenen die ik anderen kan vangen!
Dit is de beste strategie die voor mij heeft gewerkt.
Bijvoorbeeld, overweeg een testpagina die meer tijd nodig heeft dan normaal om op een testserver te laden. We zullen regelmatig uitzonderingen krijgen bij het uitvoeren van acties op deze pagina. Dus in plaats van dit elke keer te vangen, kunnen we dat
- Voeg een wachtopdracht toe en probeer een uitzondering te vermijden
- Gebruik ‘Try / Catch’ voor het geval er zich een echt uitzonderlijk geval heeft voorgedaan
Daardoor verkleint de kans op uitzonderingen.
Voordelen en nadelen van de aanpak om te vermijden
Voordelen | Nadelen |
---|---|
1) Deze aanpak verkleint de kans op uitzonderingen. | 1) Vergroot het aantal regels codes omdat u extra code toevoegt om uitzonderingen te voorkomen |
Als er nog steeds een uitzondering wordt gemaakt, 2) zou een echt uitzonderlijk geval zijn dat de moeite van het controleren waard is | 2) Moet een beter begrip hebben van Web Driver API, commando's en uitzonderingen |
Verkort de foutopsporingstijd. Automatiseringscode is bedoeld om bugs te vinden en u wilt niet te veel ongewenste 3) uitzonderingen zien en de redenen achter elk van deze vinden | |
4) In het Catch-blok behandelt u meer geldige gevallen | |
5) Verminder valse fouten | |
6) Duidelijker rapport |
In deze tutorial zullen we bespreken Vermijden en hanteren aanpak voor de 10 meest voorkomende uitzonderingen in Selenium WebDriver. Laten we eerst een basiskennis hebben van het afhandelen van uitzonderingen en Try / Catch-blokken.
Soorten uitzonderingen in Java en Selenium
Hieronder hebben we de soorten uitzonderingen beschreven en de verschillende manieren waarop we het raamwerk voor het afhandelen van uitzonderingen kunnen gebruiken in seleniumscripts.
Er zijn drie soorten uitzonderingen:
- Uitzondering gecontroleerd
- Uitzondering niet aangevinkt
- Fout
De klassenhiërarchie van uitzondering en fout:
# 1) Gecontroleerde uitzondering: Gecontroleerde uitzondering wordt afgehandeld tijdens het compileren en geeft de compilatiefout als het niet wordt opgevangen en afgehandeld tijdens het compileren.
Voorbeeld FileNotFoundException IOException enz.
# 2) Uitzondering niet aangevinkt: In het geval van de ongecontroleerde uitzondering, verplicht een compiler niet om. De compiler negeert tijdens het compileren.
Voorbeeld ArrayIndexoutOfBoundException
# 3) Fout: Als een scenario fataal is en het programma niet kan herstellen, geeft JVM een foutmelding. Fouten kunnen niet worden afgehandeld door het try-catch-blok. Zelfs als de gebruiker de fout probeert af te handelen met behulp van Try catch block, kan hij de fout niet herstellen.
Voorbeeld Beweringsfout Onvoldoende geheugen fout enz.
Afhandeling van uitzonderingen
Probeer en vang blok:
proberen te vangen blokken worden over het algemeen gebruikt om uitzonderingen af te handelen. Het type uitzonderingen wordt gedeclareerd in het catch-blok dat naar verwachting zal komen. Als er een uitzondering binnenkomt in blok proberen, beweegt de besturing onmiddellijk om blok te vangen.
Voorbeeld
Er kunnen meerdere catch-blokken zijn voor één try-blok, afhankelijk van het type uitzondering.
Voorbeeld
gooit Uitzondering:
gooit trefwoord in java wordt gebruikt om een uitzondering te genereren in plaats van deze af te handelen. Alle aangevinkte uitzonderingen kunnen door methoden worden gegenereerd.
Voorbeeld
Tenslotte blok:
Tenslotte , block wordt uitgevoerd ongeacht de uitvoering van het try-catch-blok en het wordt onmiddellijk uitgevoerd nadat het try / catch-blok is voltooid.
In principe kan het bestand sluiten, databaseverbinding enz. Worden gesloten in een blok.
Voorbeeld
In het bovenstaande voorbeeld BufferReader stream is gesloten in eindelijk blok. br.close () zal altijd worden uitgevoerd, ongeacht de uitvoering van het try and catch-blok.
Notitie : eindelijk blok kan bestaan zonder enig vangblok. Het is niet nodig om altijd een vangblok te hebben.
Er kunnen veel catch-blokken zijn, maar er kan slechts één blok uiteindelijk worden gebruikt.
Gooibaar : Throwable is een bovenliggende klasse voor fouten en uitzonderingen. Over het algemeen is het moeilijk om fouten in java af te handelen. Als een programmeur niet zeker is van het type fout en uitzondering, dan is het raadzaam om de klasse Throwable te gebruiken, die zowel fout als uitzondering kan opvangen.
Voorbeeld
Veelvoorkomende uitzonderingen in Selenium WebDriver
Selenium heeft zijn eigen uitzonderingen. Bij het ontwikkelen van seleniumscripts moet een programmeur die uitzonderingen behandelen of weggooien.
Hieronder staan een paar voorbeelden van uitzonderingen bij selenium:
Alle runtime-uitzonderingsklassen in Selenium WebDriver vallen onder de superklasse WebDriverException.
Hoewel er veel uitzonderingsklassen zijn onder WebDriverException, zien we vaak de onderstaande.
- NoSuchElementException
- NoSuchWindowException
- NoSuchFrameException
- NoAlertPresentException
- InvalidSelectorException
- ElementNotVisibleException
- ElementNotSelectableException
- TimeoutException
- NoSuchSessionException
- StaleElementReferenceException
Details
ElementNotVisibleException : Als selenium een element probeert te vinden, maar het element is niet zichtbaar op de pagina
NoAlertPresentException : Als een gebruiker een waarschuwingsvenster probeert af te handelen, maar de waarschuwing niet aanwezig is.
NoSuchAttributeException : Tijdens het proberen om de attribuutwaarde op te halen, maar het attribuut is niet beschikbaar in DOM.
NoSuchElementException : Deze uitzondering is te wijten aan het openen van een element dat niet beschikbaar is op de pagina.
converteer ascii naar int c ++
WebDriverException : Uitzondering komt wanneer een code WebDriver niet kan initialiseren.
Veelvoorkomende uitzonderingen vermijden en behandelen
Laten we de aanpak van vermijden en hanteren bespreken voor de bovengenoemde uitzonderingen:
# 1) org.openqa.selenium.NoSuchElementException
Deze vaak voorkomende uitzonderingsklasse is een subklasse van NotFoundException klasse. De uitzondering doet zich voor wanneer WebDriver elementen niet kan vinden en lokaliseren.
Dit gebeurt meestal wanneer de tester een onjuiste elementlocator schrijft in de methode findElement (By, by).
Bedenk dat in het onderstaande voorbeeld de juiste id voor het tekstveld ‘firstfield’ was, maar dat de tester het ten onrechte noemde als ‘fistfield’. In dit geval kan WebDriver het element en org.openqa.selenium.NoSuchElementException zal worden gegooid
In dit geval wordt de uitzondering gegenereerd, zelfs als het element niet is geladen.
Vermijden en hanteren : Probeer een wachtcommando te geven.
Voorbeeld: De onderstaande wachtopdracht wacht 10 seconden op de aanwezigheid van een webelement met id ‘submit’. Vervolgens probeert het erop te klikken. Als het element beschikbaar is maar de klik nog steeds mislukt, wordt er een uitzondering gemaakt.
Het gebruik van vertraagde tijd is een gangbare praktijk bij testautomatisering om een pauze tussen de stappen te creëren. Door een Try / Catch toe te voegen, zorgen we ervoor dat het programma doorgaat, zelfs als het wachten niet zou kunnen helpen.
# 2) org.openqa.selenium.NoSuchWindowException
NoSuchWindowException komt onder NotFoundException klasse. Dit wordt gegenereerd wanneer WebDriver probeert over te schakelen naar een ongeldig venster.
De onderstaande code kan org.openqa.selenium.NoSuchWindowException genereren als de vensterhandgreep niet bestaat of niet beschikbaar is om over te schakelen.
driver.switchTo (). window (handle_1);
Vermijden en hanteren : We zouden venstergrepen gebruiken om de set actieve vensters te krijgen en vervolgens acties daarop uitvoeren.
In het onderstaande voorbeeld wordt voor elke raamkruk de bestuurdersschakelaar naar uitgevoerd. Daarom is de kans op het passeren van een verkeerde vensterparameter kleiner.
# 3) org.openqa.selenium.NoSuchFrameException
Wanneer WebDriver probeert over te schakelen naar een ongeldig frame, wordt NoSuchFrameException onder de klasse NotFoundException gegenereerd.
De onderstaande code kan org.openqa.selenium.NoSuchFrameException genereren als een frame 'frame_11' niet bestaat of niet beschikbaar is.
driver.switchTo (). frame ('frame_11');
Afhandeling van uitzonderingen:
In dit geval wordt de uitzondering gegenereerd, zelfs als het frame niet is geladen.
Vermijden en hanteren : Probeer een wachtcommando te geven.
In het onderstaande voorbeeld wacht WebDriver 10 seconden totdat het frame beschikbaar is. Als het frame beschikbaar is en er is nog steeds een uitzondering, dan wordt het gepakt.
# 4) org.openqa.selenium.NoAlertPresentException
NoAlertPresentException onder NotFoundException wordt gegenereerd wanneer WebDriver probeert over te schakelen naar een waarschuwing die niet beschikbaar is.
org.openqa.selenium.NoAlertPresentException zal worden gegenereerd Als onderstaande automatiseringscode wordt aangeroepen, accepteer () de bewerking op de Alert () -klasse wanneer er nog geen waarschuwing op het scherm is.
driver.switchTo (). alert (). accept ();
Afhandeling van uitzonderingen:
In dit geval wordt de uitzondering gegenereerd, zelfs als de waarschuwing niet volledig is geladen.
Vermijden en hanteren : Gebruik altijd expliciet of vloeiend wachten op een bepaalde tijd in alle gevallen waarin een waarschuwing wordt verwacht. Als de waarschuwing beschikbaar is en er nog steeds een uitzondering is, wordt deze afgevangen.
# 5) org.openqa.selenium.InvalidSelectorException
Deze subklasse van NoSuchElementException klasse treedt op wanneer een selector onjuist of syntactisch ongeldig is. Deze uitzondering komt vaak voor wanneer de XPATH-locator wordt gebruikt.
Beschouw het onderstaande voorbeeld:
clickXPathButtonAndWait ('// button [@ type =’ button ’] [100]');
Dit zou een InvalidSelectorExeption opleveren omdat de XPATH-syntaxis onjuist is.
Vermijden en hanteren : Om dit te voorkomen, moeten we de gebruikte locator controleren omdat de locator waarschijnlijk onjuist is of de syntaxis onjuist is. Het gebruik van Firebug om xpath te vinden, kan deze uitzondering verminderen.
Onderstaande code laat zien hoe je ermee om moet gaan met Try / Catch
# 6) org.openqa.selenium.ElementNotVisibleException
ElementNotVisibleException class is een subklasse van ElementNotInteractableException klasse. Deze uitzondering wordt gegenereerd wanneer WebDriver een actie probeert uit te voeren op een onzichtbaar webelement waarmee geen interactie kan worden uitgevoerd. Dat wil zeggen, het webelement bevindt zich in een verborgen toestand.
Bijvoorbeeld, in de onderstaande code, als het type knop met id ‘submit’ ‘verborgen’ is in HTML, org.openqa.selenium.ElementNotVisibleException zal worden gegooid.
In dit geval wordt de uitzondering gegenereerd, zelfs als de pagina niet volledig is geladen.
Vermijden en hanteren : Er zijn twee manieren om dit te doen. We kunnen ofwel wachten tot het element volledig is, gebruiken.
De onderstaande code wacht 10 seconden op het element. Als het element zichtbaar is en er nog steeds een uitzondering wordt gegenereerd, wordt het afgevangen.
# 7) org.openqa.selenium.ElementNotSelectableException
Deze uitzondering valt onder InvalidElementStateException klasse ElementNotSelectableException geeft aan dat het webelement aanwezig is in de webpagina maar niet kan worden geselecteerd.
Bijvoorbeeld, de onderstaande code kan een ElementNotSelectableException genereren als de id 'swift' is uitgeschakeld.
Select dropdown = new Select (driver.findElement (By.id ('swift')));
Afhandeling van uitzonderingen:
proberen {
Select dropdown = new Select (driver.findElement (By.id ('swift')));
} catch (ElementNotSelectableException e)
In dit geval wordt er een uitzondering gegenereerd, zelfs als het element na een tijdje wordt ingeschakeld.
Vermijden en hanteren : We kunnen een wait-commando toevoegen om te wachten tot het element klikbaar wordt. Als er nog steeds een uitzondering is, wordt deze afgevangen.
# 8) org.openqa.selenium .TimeoutException
Deze uitzondering treedt op wanneer het voltooien van een opdracht langer duurt dan de wachttijd. Waits worden voornamelijk gebruikt in WebDriver om de uitzondering ElementNotVisibleException te vermijden.
Soms wordt de testpagina mogelijk niet volledig geladen voor de volgende opdracht in het programma. Als WebDriver een element op de webpagina probeert te vinden voordat de pagina volledig is geladen, wordt een uitzondering ElementNotVisibleException gegenereerd. Om deze uitzondering te vermijden, zijn wacht-opdrachten toegevoegd.
Als de componenten echter niet worden geladen, zelfs niet na het wachten, is de uitzondering org.openqa.selenium .TimeoutException zal worden gegooid.
driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);
driver.get ('https://www.softwaretestinghelp.com');
In het bovenstaande programma wordt een impliciete wachttijd van 10 seconden toegevoegd. Als de page www.softwaretestinghelp.com wordt niet binnen 10 seconden geladen, dan wordt TimeoutException gegenereerd.
Vermijden en hanteren : Om dit te voorkomen, kunnen we handmatig de gemiddelde laadtijd van een pagina controleren en de wachttijd aanpassen
Of we kunnen expliciet wachten toevoegen met JavaScript-uitvoerder totdat de pagina is geladen.
In het onderstaande voorbeeld wordt JavaScript-uitvoerder gebruikt. Na paginanavigatie noemen we JavaScript return document.readyState gedurende 20 seconden totdat 'complete' wordt geretourneerd.
# 9) org.openqa.selenium.NoSuchSessionException
Deze uitzondering wordt gegenereerd wanneer een methode wordt aangeroepen na het afsluiten van de browser door WebDriver.quit (). Dit kan ook gebeuren door problemen met de webbrowser, zoals crashes, en WebDriver kan geen enkele opdracht uitvoeren met behulp van de driverinstantie.
anime-websites om anime gratis te bekijken
Om deze uitzondering te zien, kan de onderstaande code worden uitgevoerd.
driver.quit ()
Select dropdown = new Select (driver.findElement (By.id ('swift')));
Vermijden en hanteren : Kies altijd de nieuwste stabiele versie van de browser om Selenium Webdriver-testcases uit te voeren.
Deze uitzondering kan worden verminderd door driver.quit () te gebruiken na voltooiing van alle tests. Probeer ze niet na elk testgeval te gebruiken. Dit kan tot problemen leiden wanneer de driverinstantie nul is en toekomstige testcases proberen deze te gebruiken zonder te initialiseren.
De onderstaande code maakt een WebDriver-instantie in de @BeforeSuite TestiNG-annotatie en vernietigt deze in @AfterSuite TestiNG-annotatie
# 10) org.openqa.selenium.StaleElementReferenceException
Deze uitzondering zegt dat een webelement niet langer aanwezig is op de webpagina.
Deze fout is niet hetzelfde als ElementNotVisibleException.
StaleElementReferenceException wordt gegenereerd wanneer een object voor een bepaald webelement zonder enig probleem in het programma is gemaakt; dit element is niet meer aanwezig in het venster. Dit kan gebeuren als er een
- Navigatie naar een andere pagina
- DOM is vernieuwd
- Een raam- of raamschakelaar
WebElement firstName = driver.findElement (By.id ('voornaam'));
driver.switchTo (). venster (Child_Window);
element.sendKeys ('Aaron');
In de bovenstaande code is object firstName gemaakt en vervolgens is het venster omgeschakeld. Vervolgens probeert WebDriver ‘Aaron’ in het formulierveld te typen. In dit geval wordt StaleElementReferenceException gegenereerd.
Vermijden en hanteren : Bevestig dat we de actie proberen uit te voeren in het juiste venster. Om problemen als gevolg van DOM-vernieuwing te voorkomen, kunnen we Dynamic Xpath gebruiken
Laten we nog een voorbeeld bespreken.
Stel dat ‘id’ van een gebruikersnaamveld ‘gebruikersnaam_1’ is en de XPath zal dat zijn // * [@ id = ’voornaam_1?] Wanneer u de pagina opnieuw opent, kan de ‘id’ veranderen in ‘ 'Voornaam _11 ’. In dit geval zal de test mislukken omdat de WebDriver het element niet kon vinden. In dit geval wordt StaleElementReferenceException gegenereerd.
In dit geval kunnen we een dynamisch xpath gebruiken zoals,
In het bovenstaande voorbeeld wordt dynamische XPATH gebruikt en als de uitzondering nog steeds wordt gevonden, wordt deze afgevangen.
Gevolgtrekking
Het afhandelen van uitzonderingen is het essentiële onderdeel van elk Java-programma, evenals het seleniumscript. We kunnen robuuste en optimale code bouwen door slim omgaan met een uitzondering En het is ook een best practice om uitzonderingen in een script af te handelen, waardoor u een beter rapport krijgt wanneer een programma om welke reden dan ook mislukt.
Hier hebben we geprobeerd het proces en het raamwerk van het afhandelen van uitzonderingen te behandelen dat vereist is om te worden geïmplementeerd in seleniumscripts.
Onthoud dat het niet verplicht is om altijd de uitzondering in een proberen te vangen blok. U kunt ook een uitzondering genereren, afhankelijk van de vereiste in een script.
Een uitzondering mag niet worden genegeerd, aangezien deze de uitvoering van het programma verstoort. In deze zelfstudie hebben we verschillende uitzonderingen en manieren doorlopen om de kans te verkleinen dat ze handmatige controles en codes doorlopen.
Door wachttijden toe te voegen, kunt u enkele gevallen regelen, zoals ‘NoSuchElementException‘, ‘ElementNotFoundException‘, ‘ElementNotVisibleException’.
Volgende tutorial # 20 In de komende tutorial bespreken we de verschillende soorten toetsingskaders beschikbaar We zouden ook de voor- en nadelen bestuderen van het gebruik van een volwaardige raamwerkbenadering bij automatiseringstests. We zouden in detail ingaan op het datagedreven raamwerk van Test.
Plaats alstublieft uw vragen met betrekking tot de uitzonderingsafhandeling in Selenium WebDriver, als u die heeft.
Aanbevolen literatuur
- Java-uitzonderingen en het afhandelen van uitzonderingen met voorbeelden
- Omgaan met waarschuwingen / pop-ups in Selenium WebDriver - Selenium Tutorial # 16
- AutoIt-zelfstudie - AutoIt downloaden, installeren en basis AutoIt-script
- Cucumber Selenium Tutorial: Cucumber Java Selenium WebDriver Integration
- Integratie van selenium met JMeter
- Inleiding tot Selenium WebDriver - Selenium Tutorial # 8
- 30+ beste selenium-zelfstudies: leer selenium met echte voorbeelden
- Parttime freelancen vacature voor seleniumexperts