protractor testing tool
Wat is gradenboog?
De gradenboog is een automatiseringstesttool voor het testen van webapplicaties; het combineren van krachtige technologieën zoals Jasmine, Selenium Webdriver, Node.js etc.
De Protractor-testtool is een end-to-end gedragsgestuurd testraamwerk dat is ontworpen met het oog op Angular JS-applicaties. Ook al klinkt dat misschien alsof Gradenboog niet werkt met niet-hoekige JS-applicaties, het doet het wel.
Het werkt even goed met zowel Angular als niet-Angular JS-applicaties.
Voel je vrij om de volledige AngularJS-reeks tutorials In onze vorige tutorial, het verschil tussen hoekige versies werd in detail uitgelegd.
Wat je leert:
- Gradenboog versus Selenium WebDriver
- Kenmerken
- Hoe kan gradenboog mij helpen?
- Welk framework te gebruiken?
- Gradenboog downloaden en instellen
- Klaar om uw eerste testcase te maken?
- Hoe voer je je testcases uit?
- Nog enkele coole functies van Gradenboog
- Gevolgtrekking
- Aanbevolen literatuur
Gradenboog versus Selenium WebDriver
Wat maakt gradenboog anders dan traditioneel Selenium WebDriver
Neem even de tijd om deze vragen te beantwoorden:
- Is het moeilijk om te bepalen wanneer de webpagina precies is geladen (alle asynchrone elementen zijn klaar en verwerkt)?
- Ben je het zat om wacht- en slaapstanden aan je code toe te voegen?
- Wilt u de omslachtige moeite om de hoekelementen te lokaliseren wegnemen?
- Gefrustreerd door lokalisatie-elementen met veranderende ID's?
- Wilt u uw eigen locator maken?
- Schrijf je lange code, zelfs voor de eenvoudigste beweringen?
- Bent u een liefhebber / fan van JavaScript?
Als je deze vragen met Ja hebt beantwoord, Gradenboog kan helpen.
Het is een wrapper die bovenop Selenium Webdriver is gebouwd en biedt dus alle mogelijkheden van Selenium, samen met vele nuttige toevoegingen. Het biedt:
Kenmerken
Het biedt:
1) WaitForAngular
SQL query interviewvragen voor testers
Van documentatie:
Geef WebDriver de opdracht om te wachten tot Angular klaar is met renderen en geen uitstaande $ http- of $ timeout-aanroepen heeft voordat u verdergaat. Merk op dat Gradenboog deze opdracht automatisch toepast vóór elke WebDriver-actie.
Dit betekent dat het niet nodig is om handmatig wachttijden aan uw script toe te voegen en Gradenboog zal automatisch wachten tot de webelementen zijn geladen en pas daarna de volgende stappen uitvoeren.
twee) Het heeft de mogelijkheid om een globale functie te exporteren element , die een locator nodig heeft en een ElementFinder zal retourneren. Deze ElementFinder heeft een reeks actiemethoden, zoals click (), getText (), sendKeys () enz. Dit is de kern van hoe om te gaan met het element en er informatie uit te halen.
Deze globale functie helpt om de syntaxis van het zoeken naar elementen te verminderen. Bekijk de volgende verklaring om het element in zowel Selenium WebDriver als Gradenboog te lokaliseren:
Selenium Webdriver
Gradenboog
De syntaxis ziet er compact uit, nietwaar?
3) Enkele nieuwe locatorstrategieën en -functies die worden geboden om te helpen bij het lokaliseren van de hoekelementen zijn: By.binding, By.repeater, By.textarea, By.model, WebElement.all, WebElement.evaluate , enz.
Hoe kan gradenboog mij helpen?
Bekijk de volgende opvallende kenmerken:
- Eenvoudige syntaxis om testcases te schrijven
- De mogelijkheid om meerdere browsers tegelijk uit te voeren met Selenium Grid
- Hoekspecifieke locators
- Ondersteuning voor gedragsgestuurde ontwikkeling zoals jasmijn / mokka
- Het is niet nodig om slaap / wachttijden toe te voegen
- Ondersteunde integratie met Jenkins / Browser Stack / Grunt etc.
- Weg met het omgaan met synchronisatieproblemen op Angular JS-websites
- Ondersteuning voor meerdere browsers (Firefox, Chrome, Safari, Internet Explorer)
- Mogelijkheid om dezelfde scripts in mobiele browsers uit te voeren, ook zonder de code te hoeven wijzigen
Welk framework te gebruiken?
Het ondersteunt twee Behavior-Driven Development (BDD) testframeworks direct uit de doos:
- Jasmijn: Jasmijn is het standaardtestframework wanneer Gradenboog is geïnstalleerd. We zullen Jasmine gebruiken in dit artikel.
- Mokka: Mokka is een JavaScript-testraamwerk dat draait op Node.js. Als je Mocha als je testraamwerk wilt gebruiken, moet je het instellen met je gradenboog en ook de Behavior Driven Development-interface en Chai Assertions with Chai as Promised gebruiken (zie deze link voor meer details
Gradenboog downloaden en instellen
Omdat het een node.js-programma is, moet u node.js installeren om het te laten werken. Node.js kan vanaf deze URL worden gedownload door het besturingssysteem te selecteren: Node.js downloaden
Met node.js krijg je ook Gradenboog boven zeeniveau pakket, dat nu kan worden gebruikt om Protractor te installeren.
Nu node.js op uw machine is geïnstalleerd, opent u de opdrachtprompt (cmd) en drukt u op de onderstaande opdracht om deze globaal te installeren:
‘-G’ wordt gebruikt om deze tool wereldwijd te installeren. Verwijder het als u het niet wereldwijd wilt installeren. Deze opdracht installeert ook de Protractor API samen met een standaard seleniumserver, wat betekent dat je niet per se een zelfstandige server hoeft te starten.
Nu moeten we de seleniumserver en ChromeDriver installeren. Gebruik de volgende opdracht (wordt ook geleverd met gradenboog) in cmd:
Dit is alles wat we nodig hebben om te beginnen met het schrijven van onze eerste testcase met behulp van dit raamwerk. Als je wilt, kun je elke IDE / editor installeren om je code te schrijven. Eclipse IDE is de populaire, maar er zijn ook wat meer coole editors om te overwegen. Persoonlijk geef ik de voorkeur aan de ‘Atom’ -editor voor het schrijven van mijn gradenboogcode.
Klaar om uw eerste testcase te maken?
Het heeft 2 bestanden nodig om te draaien:
- Configuratiebestand
- Spec-bestand.
De Configuratiebestand is degene die Protractor vertelt waar de testbestanden (specificaties) / welke browser hij moet kiezen / welk framework moet worden gebruikt (Jasmine / Mocha) / waar hij met je Selenium-browser en andere configuraties moet praten. Als een configuratie niet is gedefinieerd in configuratiebestanden, worden de standaardinstellingen gebruikt.
Spec-bestand is het bestand waarin we onze eigenlijke testcode schrijven. Al onze functionele teststromen / beweringen zullen in dit specifieke bestand staan. Er kunnen verschillende specificatiebestanden zijn op basis van het aantal testcases, maar slechts 1 spec-bestand kan de volledige testsuite met verschillende specificaties uitvoeren.
Voorbeeld TEST CASE:
Nu zullen we een eenvoudige testcase schrijven waarin we naar een URL navigeren en de paginatitel controleren.
Hier zijn de stappen:
- Maak een nieuwe map voor uw testsuite.
- Maak een nieuw bestand met de naam ‘ js ’. (Elke naam is voldoende) Alle specificatie- / configuratiebestanden hebben de extensie‘ .js ’.
- Maak een nieuw bestand met de naam gespecificeerd als ‘ js
Nu zijn we klaar om te beginnen met onze codering. Zie de onderstaande code van het ‘testCaseNameSpec.js’ -bestand.
Hier is hoe het configuratiebestand eruit ziet:
Laten we nu deze 2 bestanden doorbreken en kijken hoe het werkt.
# 1) Spec.js
- Alle opdrachten op browserniveau worden afgehandeld door ‘ browser ’, Een globaal gemaakt door Protractor.
- Aangezien we het Jasmine-raamwerk volgen, ‘ beschrijven ' en ‘ het ’Zijn de syntaxis van Jasmine. Beschrijf het volledige einde om de stroom van uw testcase te beëindigen, terwijl ‘het’ enkele teststappen / scenario's kan bevatten, enz. U kunt meerdere ‘ het ’Blokkeert in uw programma als u dat wenst.
- browser.get is een eenvoudige Selenium-syntaxis die Protractor vertelt om een specifieke URL in de browser te raken.
- Omdat de website die we proberen te bezoeken een niet-hoekige website is, stellen we de ignoreSynchronization tag naar ‘ waar ’Zoals weergegeven op regel 4. Als u deze tag niet waar maakt, zal uw test mislukken met de fout' Angular kon niet gevonden worden op de pagina '. De reden hierachter is dat Protractor verwacht standaard te werken met hoekige websites, en als we Protractor gebruiken om de niet-hoekige website te valideren, moeten we dit expliciet aan Protractor vertellen. Als u echter aan hoekige websites werkt, hoeft u deze verklaring niet te gebruiken, aangezien Gradenboog de webpagina standaard als hoekig beschouwt.
- ‘Verwachten’ is niets anders dan de bewering waarbij we de titel van de webpagina vergelijken met een aantal vooraf gedefinieerde gegevens. We zullen meer beweringen in detail bespreken.
#twee) conf.js
- Zoals eerder besproken, is het configuratiebestand het bestand dat Protractor de belangrijkste details vertelt. Zoals weergegeven in de code, is het raamwerk ‘Jasmine’.
- Binnen de sectie mogelijkheden zijn browserconfiguraties ingesteld. U kunt de browsernaam definiëren, zoals Firefox / chrome enz. U kunt ook het maximum aantal instanties van de browsers instellen, zodat u in één keer meerdere testcases kunt uitvoeren op verschillende beschikbare browservensters.
- In de ' specificaties ’Sectie, geven we het pad van het spec-bestand, d.w.z. precies waar het spec-bestand zich bevindt ten opzichte van het configuratiebestand.
- Er zijn ook veel andere coole functies die u aan uw configuratiebestand kunt toevoegen, zoals rapportage / onPrepare-functie / drempel-time-out enz. We zullen er in deze tutorial enkele behandelen.
Hoe voer je je testcases uit?
We hebben de code geschreven en nu hebben we alleen nog een duwtje nodig om onze code te laten werken. Druk op de volgende opdracht in cmd om je programma uit te voeren:
Met deze opdracht wordt de selenium-server gestart, gevolgd door het uitvoeren van uw testscript. U kunt de logboeken in cmd zelf bekijken of, als u dat wilt, logboeken ook in een .txt-bestand vastleggen (alleen voeg >> textFileName.txt toe na het bovenstaande commando en de logs worden opgeslagen in het tekstbestand dat zich in dezelfde map bevindt als het configuratiebestand).
Een chromen venster wordt geopend, waar SoftwareTestingHelp.com website moet worden geopend. De uitvoer zou ‘1 spec, 0 failure’ zijn wanneer u de code uitvoert. Dit betekent dat we 1 ‘it’ -blokken hadden, die werden uitgevoerd met 0 fouten.
Overweeg nu het onderstaande specificatiebestand waarin we enkele acties uitvoeren op een webpagina die is gebouwd op AngularJS, zodat u kunt zien hoe gradenboog Selenium aanpakt als het gaat om het testen van de Angular-website:
fasen van de levenscyclus van softwareontwikkeling
U kunt dezelfde conf.js ook gebruiken om deze specificatie uit te voeren. Zorg ervoor dat u de specificatiebestandsnaam bijwerkt.
Nu spelen we in dit spec-bestand met een hoekige JS-website, zodat je kunt zien waartoe Gradenboog precies in staat is.
Als u dit bestand net als eerder uitvoert, wordt een webpagina geopend met 2 tekstvakken, een vervolgkeuzelijst, een knop en enkele andere webelementen. Zoals je misschien al geraden hebt, is het een rekenmachine-pagina. We geven 2 gehele getallen als invoer en voeren een vermenigvuldigingsbewerking uit.
Zoals we al hebben besproken, is een van de grootste voordelen van het gebruik van deze tool de unieke technieken om de hoekelementen te lokaliseren. ‘By.model’ is zo'n manier om elementen te lokaliseren. ‘.SendKeys ()’ is de gebruikelijke Selenium-syntaxis om waarden in tekstvakken en te verzenden '.Klik()' wordt gebruikt om op knoppen te klikken.
Zoals eerder besproken, 'verwachten' is een bewering, die Gradenboog vraagt om het resultaat van de vermenigvuldiging van getallen vast te leggen en het te vergelijken met ‘10’ en ‘25’ opeenvolgend. Simple Mathematics vertelt ons dat de output ‘25’ zou moeten zijn en daarom mislukt de eerste bewering en de tweede slaagt.
Als resultaat krijg je ‘ 1 specificatie, 1 fout ’In de logboeken wanneer u de code uitvoert, wat wordt verwacht.
Nog enkele coole functies van Gradenboog
# 1) Beweringen en annotaties
Beweringen vormen een belangrijk onderdeel van de automatiseringsscripts. Annotaties zijn ook erg handig om bepaalde methoden in een klasse effectief te taggen om een speciale betekenis te hebben.
Het biedt een verscheidenheid aan beweringen en annotaties en biedt daarnaast ook de mogelijkheid om uw eigen beweringen te maken.
Beschouw het onderstaande voorbeeld:
In het bovenstaande voorbeeld gebruiken we 2 annotaties, ‘BeforeEach’ en 'na elke' Deze annotaties zijn ook beschikbaar in TestNG (traditioneel Selenium). Deze annotaties zorgen ervoor dat een bepaald stuk code wordt uitgevoerd voor / na respectievelijk de uitvoering van de resterende code.
Dus hier is hoe de uitvoering van de code zal plaatsvinden,
- Gradenboog reikt in de ‘ voor elk 'Blokkeer eerst en het zal op' http://juliemr.github.io/protractor-demo/ ’URL in de browser.
- Nu gaat de stroom naar het ‘it’ -blok en functioneert ‘ multiplyNumbers ' zal worden aangeroepen, die op zijn beurt de gespecificeerde acties zal uitvoeren en het besturingselement terugstuurt naar waar de functie werd aangeroepen.
- Eindelijk zal de bewering zijn werk doen. Als we nu meerdere elementen tegelijk willen aanpakken, kunt u ‘element.all’ een functie van deze tool gebruiken. Het identificeert alle beschikbare elementen met de opgegeven locator (in dit geval door.repeater). Het is aan jou wat je met de geïdentificeerde elementen wilt doen. In dit geval vergelijken we de berekeningsgeschiedenis met een bepaald getal.
- Omdat we in de eerste bewering de telling van de berekeningsgeschiedenis vergelijken met ‘2’, ook al hebben we de berekening slechts één keer uitgevoerd, zal de bewering mislukken. De tweede bewering gaat echter door, want na de tweede berekening zou het aantal geschiedenis ‘2’ zijn.
Er zijn veel meer soorten beweringen beschikbaar. Enkele hiervan worden hieronder gegeven:
a) Haal tekst uit een webelement en vergelijk het met een bepaalde waarde:
b) Controleer of een webelement op de pagina wordt weergegeven of niet:
# 2) Omgaan met meerdere browsers / vensters / tabbladen
Er kunnen meerdere gevallen zijn als het gaat om het omgaan met de browser. Enkele van deze gevallen worden hieronder uitgelicht:
a) Een nieuw tabblad wordt geopend door op een link te klikken
Soms, wanneer u op een link klikt, wordt een nieuw tabblad geopend en moeten de rest van de acties plaatsvinden in het nieuw geopende venster. In dit geval, wanneer u de code schrijft tot het punt waarop een nieuw tabblad wordt geopend, moet u Window Handler op de volgende manier implementeren:
Krijg eerst een telling van alle beschikbare vensters en gebruik vervolgens indexering om de besturing tussen de vensters te wisselen. Het oorspronkelijke venster dat het nieuwe venster startte, heeft index 0, terwijl de volgende vensters oplopende indexen hebben.
b) Een geheel nieuwe browser openen met een nieuwe sessie
Als u bepaalde acties op een browser moet uitvoeren en verdere acties op een andere sessie van de browser moet uitvoeren, moeten we de forkNewDriverInstance In dit geval maken we op de volgende manier een nieuwe browserinstantie met een nieuwe browsernaam:
c) Uw testcase in meerdere browsers uitvoeren:
Het uitvoeren van uw testcase in 2 browsers tegelijk is iets dat het configuratiebestand voor u kan doen. Voeg gewoon de onderstaande code toe aan uw configuratiebestand:
Zodra u dit configuratiebestand uitvoert, ziet u tests die tegelijkertijd in Firefox en Chrome worden uitgevoerd en worden run-logboeken afzonderlijk weergegeven in de opdrachtprompt.
# 3) Gebruik pagina-objecten om uw framework nog beter te maken
Deze tool is op zichzelf goed, maar wordt onoverwinnelijk in combinatie met Page Object Model (POM). De meeste van zijn tekortkomingen (indien aanwezig) worden verholpen met het pagina-objectmodel. Bovendien helpt POM je project ook op een meer gestructureerde manier te onderhouden.
Als u niet weet wat POM is, hoeft u zich geen zorgen te maken. POM is een manier om uw testcase te scheiden op basis van de pagina's.
Neem dit voorbeeld:
Er is een winkelwebsite. Uw testcase is om een product te selecteren, het aan de winkelwagen toe te voegen en het vervolgens te kopen.
Nu zijn er twee manieren om uw testscriptcode hiervoor te beheren:
- Schrijf een eenvoudige testcase met alle locators op dezelfde pagina waarin uw logica is geschreven,
- Schrijf de hele stroom testcase, uw logica in uw specificatiebestand en scheid uw locators en testgegevens in verschillende bestanden. Elke webpagina heeft een equivalent .js-paginabestand. Op deze manier wordt uw code gestructureerd en als er een ander testgeval is waarvoor dezelfde locator nodig is, hoeft u deze locators niet opnieuw te schrijven, importeer gewoon dit locatorbestand en gebruik het naar behoefte.
Het onderhouden van uw testcases kan heel vervelend zijn. Als je POM gebruikt, zal je code veel gestructureerder zijn.
python if-instructie op één regel
Hier is een voorbeeld van het gebruik van het pagina-objectmodel:
Dit is de stroom in de bovenstaande momentopname:
- Er is een testcase die Laptop aanschaft. De code voor de stroom en logica staat in de purchaseLaptopSpec.js.
- Alle pagina's die u tegenkomt om de laptop aan te schaffen, hebben 1 ‘.js’ -bestand met de juiste titel. Alle elementen die nodig zijn om te worden gebruikt voor de aanschaf van de laptop, hun locators bevinden zich in het respectieve paginabestand.
- De gegevens die nodig zijn voor deze testcase kunnen worden opgeslagen in de TestData-map, hetzij in een ‘.json’ -formaat of in het Excel-formaat.
- Als u klaar bent met de pagina's en locators, importeert u deze bestanden gewoon in uw specificatiebestand om de locator- / testgegevens te gebruiken en bent u helemaal klaar met uw testcase.
# 4) Rapportage
NPM (Node Package Manager) biedt verschillende rapportagepakketten waarmee een screenshot van elke teststap kan worden vastgelegd en ook, zodra de test is voltooid, wordt een HTML-rapport voor u gegenereerd. Het enige dat u hoeft te doen, is die pakketten installeren door een opdrachtprompt te openen en op de onderstaande opdrachten te drukken:
Zodra deze pakketten zijn geïnstalleerd, worden elke keer dat u uw configuratiebestand uitvoert, alle schermafbeeldingen van uw testgevallen opgeslagen en wordt er ook een HTML-rapport gegenereerd met het resultaat van het geslaagd / mislukken van de testcase.
# 5) Integreer met andere krachtige tools zoals Git / Jenkins / Browserstack / Grunt
Er zijn meerdere tools op de markt om uw testcases nog beter te maken. Git / Jenkins / BrowserStack / Grunt zijn enkele van dergelijke tools die aanzienlijke waarde toevoegen aan uw normale Gradenboog-testscripts. En het beste is dat u uw specificatiebestand niet hoeft aan te raken om uw gradenboog met een van deze tools te integreren. Het is uw configuratiebestand dat al deze dingen voor u overneemt.
Gaan is een zeer krachtige tool voor versiebeheer. Het is altijd een best practice om je code in Git te houden als er meerdere ontwikkelaars bij betrokken zijn.
Jenkins is een doorlopende integratietool waarmee u uw testcases kunt plannen en uitvoeren naar behoefte. Gradenboogscripts kunnen ook worden geconfigureerd met Jenkins. Het beste gebruik van het uitvoeren van uw testcases op Jenkins is dat het erg snel is en dat u ook meerdere testcases tegelijk kunt uitvoeren.
BrowserStack is een cross-browser testtool die ook kan worden gebruikt om uw applicaties in verschillende browsers te testen. Het kan ook worden geïntegreerd met Gradenboog door de browserStack-inloggegevens toe te voegen aan uw configuratiebestand.
Grond is een JavaScript-taakrunner. Het biedt u de mogelijkheid om verschillende taken voor u uit te voeren. Het geweldige is dat er meer dan 4000 taken zijn en dat u nog meer taken kunt maken volgens uw vereisten. Hieronder volgen enkele van de belangrijke dagelijkse gebruikstaken waarvoor we Grunt kunnen gebruiken:
- Maak een lijst van alle best practices voor codering en informeer onmiddellijk wanneer u een van deze schendt.
- Om meerdere specificatiebestanden tijdens runtime te maken. Bijvoorbeeld , als er een testcase is die u meerdere keren wilt uitvoeren (van 1 tot een willekeurig nummer). Dit lijkt op dit moment misschien overbodig, maar denk eraan om het afrekenen van een winkelwebsite uit te voeren voor elk beschikbaar land. Het zou vervelend zijn om handmatig meerdere specificaties te maken. Dus laat Grunt dit voor je doen.
- De horloge-functie. Je schrijft een testcase en elke keer dat je je code opslaat nadat je er een wijziging in hebt aangebracht, wil je dat je testcase draait, Grunt heeft het.
- Meerdere bestanden samenvoegen.
Probeer het gewoon en u zult het geweldig vinden.
Gevolgtrekking
Je kunt selenium laten werken als een gradenboog, maar waarom zou je het wiel opnieuw uitvinden? Als Google zoveel moeite heeft gedaan om Gradenboog als een zonnetje te laten werken, laat het dan ten volle benutten. Tenminste voor de AngularJS-websites, het zal uw leven een stuk gemakkelijker maken.
Dit artikel gaat ook niet alleen over gradenboog. Er is een grote wereld van gradenboog die er is en er zijn honderden pakketten beschikbaar op de markt die door NPM worden aangeboden om naast eenvoudige testscenario's meer functies aan uw test toe te voegen. Gebruik deze pakketten gerust en maak het nog beter.
Over de auteur: Dit is een gastpost van Deshansh. Hij werkt als Software Development Engineer in Test bij een van de toonaangevende MNC's. Hij heeft uitgebreide ervaring met het testen van selenium en gradenboogautomatisering.
Onze aanstaande tutorial zal je helpen om elk AngularJS-interview met succes te wissen.
PREV-zelfstudie VOLGENDE zelfstudie
Aanbevolen literatuur
- Beste softwaretesttools 2021 [QA Test Automation Tools]
- Primer eBook downloaden testen
- Automatiseringstests met behulp van komkommer-tool en selenium - Selenium-zelfstudie # 30
- Toepassingen installeren en voorbereiden voor Appium-testen
- Laadtesten met LoadUI - een gratis en open source loadtesttool
- Integratie van selenium met JMeter
- Laadtests met HP LoadRunner-zelfstudies
- Tutorial WAVE Accessibility Testing Tool