specflow selenium webdriver end end example
End-to-end voorbeeld van het gebruik van Specflow & Selenium Webdriver:
In deze Gratis Specflow-trainingsserie , naar Korte introductie over Specflow werd gegeven in onze vorige tutorial.
In dit artikel zullen we een end-to-end-voorbeeld zien van het gebruik van op Specflow gebaseerde BDD-specificaties en de tests zullen worden uitgevoerd via Selenium Webdriver.
De tests kunnen zo simpel zijn als het testen van de inlogfunctionaliteit van een applicatie. Het is alleen dat, we zullen die tests beschrijven met behulp van Specflow en de Step-implementaties zullen Selenium-stuurprogramma en -opdrachten en NUnit gebruiken als beweringsraamwerk.
We zullen ook op NUnit gebaseerde Specflow-runner gebruiken (in tegenstelling tot Specrun die niet open source is en een willekeurige vertraging introduceert in de gratis versie).
Wat je leert:
Video-zelfstudie: Specflow en Selenium
Bekijk de video-tutorial over Specflow en Selenium:
java webservices interviewvragen en antwoorden voor ervaren
Laten we beginnen.
Laten we om te beginnen een unit-testproject maken in Visual Studio en de volgende vereisten installeren:
# 1) Maak een unit-testproject
Installeer het Nuget-pakket voor Nunit en Specflow.
# 2) Installeer Selenium's Webdriver voor de Chrome-browser.
Dit kan ook worden geïnstalleerd via de Nuget Package Manager-console via de onderstaande opdracht.
# 3) Installeer Selenium Webdriver-bibliotheken en Selenium Wait Helpers voor het toevoegen van ExpectedCondition waits.
# 4) Verwijder nu het test.cs-bestand uit het project dat automatisch wordt aangemaakt.
We doen deze stap om verwarring te voorkomen, aangezien we functiebestanden en stapdefinitiebestanden voor Specflow zullen gebruiken.
# 5) Maak mappen voor functies en stapdefinities om implementatiebestanden voor functies en stapdefinities op te slaan.
Dit is geen verplichte stap, maar het is handig om de features en step-implementaties in aparte mappen te organiseren.
# 6) Aan het einde van de bovenstaande stappen zouden de oplossingsstructuur en de packages.config eruit moeten zien zoals hieronder getoond.
Feature en Step-implementatie
Laten we nu aan de slag gaan met het feature-bestand en de daadwerkelijke stapimplementatie.
Over de functie - De voorbeeldfunctie is het testen / valideren van de zoekfunctionaliteit van de YouTube-website. We zullen naar een trefwoord zoeken en beweren dat de gebruiker is omgeleid naar de pagina met zoekresultaten.
Voeg een nieuw feature-bestand toe en noem het YoutubeSearchFeature.feature
Voeg een zoekfunctionaliteitsscenario en functiebeschrijving toe zoals hieronder weergegeven:
Het bovenstaande scenario verwacht dat de test:
- Navigeer naar de YouTube-website: Dit vereist een webautomatiseringsraamwerk zoals Selenium, dat een webstuurprogramma gebruikt om naar een webpagina in een browser te navigeren.
- Zoek op trefwoord: Deze stap omvat het zoeken naar geschikte invoerelementen en knoppen om respectievelijk het trefwoord in te toetsen en de zoekopdracht uit te voeren.
- Stel dat de zoekresultaten worden weergegeven en dat de gebruiker zich op de resultatenpagina bevindt: Deze stap omvat beweringen rond het verifiëren of de gebruiker op de juiste pagina is terechtgekomen.
Laten we nu eens kijken naar de Step-implementaties van elk van de stappen.
Laten we eerst eens kijken hoe we seleniumlogica / -code gaan integreren in de bestaande Specflow-definitie.
Selenium of een andere tool (of Unit testing stubs / bespot / drivers etc) zijn in wezen een tussenliggend onderdeel van de Step Execution, maar het belangrijkste om te begrijpen is de manier om beide Frameworks te integreren.
Specflow stelt gebruikers in staat testspecificaties te schrijven. Het dicteert niet de tool die moet worden gebruikt. De testontwikkelaar is dus vrij om zoveel testtools te kiezen als hij wil, afhankelijk van de use case die wordt opgelost.
Om Selenium in dit scenario te gebruiken, hebben we het volgende nodig:
- Een instantie van WebDriver (we zullen ChromeDriver voor de eenvoud gebruiken), waarmee de gebruiker daadwerkelijk naar de webpagina kan navigeren met een browser volgens de implementatie van de Driver.
- Er zijn maar weinig WebElement-verklaringen (en kunnen alleen worden gedaan als onderdeel van Step-implementaties) die nodig zijn om met de gebruiker te communiceren en invoer door te geven en acties uit te voeren enz.
- Weinig beweringen over de titel van het venster, URL's, enz. Die kunnen worden uitgevoerd op de driverinstantie.
We maken een instantie van ChromeWebdriver in het Step Implementations-bestand.
Laten we daarom het Step Definition-bestand maken. Zoals we in het vorige artikel hebben gezien, biedt Specflow een mechanisme om automatisch de stapdefinities te genereren (die later indien nodig kunnen worden aangepast / gewijzigd).
- Navigeer naar het feature-bestand, klik met de rechtermuisknop en selecteer 'Generate Step Definitions'.
- Maak een nieuw bestand in de map StepDefinitions zoals we eerder hebben gemaakt en noem het bestand YoutubeSearchFeatureSteps.cs
- Zorg ervoor dat alle stappen van het scenario op de juiste manier zijn gebonden aan de stapdefinities.
Tip - Automatisch gegenereerde stapdefinities wijzigen:
Als u nu zorgvuldig observeert, identificeert / scheidt de stapdefinitie die werd gegenereerd voor onze zoekwoordstap, d.w.z. 'Ik heb India ingevoerd als zoekwoord', de automatisch gegenereerde code, het zoekwoord niet en daarom wordt het niet geparametreerd.
Maar dit is niet wat we willen. We hebben het trefwoord nodig om te worden geparametriseerd, anders moeten we voor elke trefwoordzoekopdracht een aangepaste Step-definitie maken.
Laten we dus eens kijken hoe we deze stapdefinitie kunnen wijzigen in een meer algemene definitie, waardoor het zoekwoord in parameters kan worden ingesteld. Dit kan worden gedaan door middel van een eenvoudige regex-matcher.
Raadpleeg het onderstaande codevoorbeeld. We hebben het zoekwoord vervangen door een regex-matcher, d.w.z. ' 'Wat dit zal doen, is dat het de waarde vervangt van elk trefwoord dat u uit het scenario doorgeeft, en dat het de waarde van het zoekwoord in de invoerparameter met de naam' searchString 'in het onderstaande codevoorbeeld instelt.
Op deze manier blijft de code modulair en wordt herhaalde standaardcode voor elke Step-implementatie vermeden.
Selenium-integratie en stapdefinitielogica
Laten we nu eens kijken naar de daadwerkelijke integratie van Selenium met Specflow. Zodra de stapdefinities zijn gegenereerd, zullen we er nu code aan toevoegen om het eigenlijke testscenario uit te voeren.
Laten we eens kijken, waar we de Selenium Web-driverinstantie kunnen plaatsen en initialiseren, zodat deze beschikbaar is gedurende de hele scenario-uitvoering. We plaatsen de Driver als een privéveld van de Binding Class die is gegenereerd. De driver wordt geïnitialiseerd als onderdeel van de klasse Constructor.
Op deze manier blijft het stuurprogramma geïnitialiseerd gedurende de hele duur van de test, aangezien we slechts één bindbestand hebben voor alle stappen (en het wordt geïnitialiseerd voordat de testuitvoering begint).
Merk ook op dat we ook het ID-wegwerp interface, om de driverinstantie te verwijderen waarna deze niet langer nodig is. Door het in de methode Dispose () te plaatsen, wordt gegarandeerd dat zodra het Object van de klasse wordt verwijderd, de driverinstantie ook kan worden verwijderd.
Dit is hoe de code voor declaratie en initialisatie van de WebDriver-instantie eruit ziet:
Met het bovenstaande kan de driverinstantie worden gebruikt als onderdeel van elke Step-implementatie die deel uitmaakt van de scenario-uitvoering.
Laten we nu eens kijken naar de stapsgewijze implementatie van elk afzonderlijk scenario.
# 1) Stappen regelen:
Beide stappen omvatten interactie met de driverinstantie. De eerste stap is het browservenster openen en naar de YouTube-website navigeren
De tweede stap zoekt naar de zoekinvoerknop en voert 'India' in als zoekwoord.
Hieronder vindt u de implementatie voor beide stappen:
Let voor de eerste stap op de bewering dat het ervoor zorgt dat de navigatie naar YouTube succesvol was door de titel van het venster te controleren.
Notitie: Er kunnen verschillende manieren zijn om Assertions op verschillende webelementen of driver-eigenschappen te plaatsen, maar het uiteindelijke doel van deze tutorial is om het op de meest simplistische manier te illustreren.
In de tweede stap hebben we een dynamische wachttijd toegevoegd met Verwachte voorwaarden wat ervoor zorgt dat het zoekvak zichtbaar is voordat de code probeert het zoekwoord in te toetsen.
We slaan de zoekreeks ook op in een privéveld zoeken Sleutelwoord. Dit wordt gedaan zodat het searchKeyword ook in andere Step-implementaties kan worden gebruikt.
Tip - Gegevens doorgeven over de stappen
Het doorgeven / opslaan van gegevens via deze benadering (d.w.z. via klassevariabelen) is een van de manieren waarop gegevens kunnen worden gedeeld tussen Step-bindingen.
Er zijn ook andere manieren om dit te doen, zoals Specflow zelf biedt een dynamisch woordenboekobject met de naam ScenarioContext. We zullen hier meer details over zien in de komende artikelen.
# 2) Act Stap
Laten we nu eens kijken naar de daadwerkelijke actie, namelijk klikken op de knop Zoeken. Het implementatiebestand van de stap zoekt naar de zoekknop en klikt erop om de scenariostap uit te voeren.
De code voor deze stap ziet er uit zoals hieronder weergegeven:
# 3) Eindelijk de Assert-stap:
In deze stap verifiëren we alleen aan de hand van de Driver-eigenschappen of de URL en de paginatitel het zoekwoord bevatten of niet.
De code voor deze stap wordt hieronder weergegeven:
Uitvoering
Laten we nu proberen het scenario uit te voeren en de resultaten te zien. Zodra het scenario is uitgevoerd, worden alle scenariostappen opeenvolgend uitgevoerd. De test opent een browser, navigeert naar een website en voert vervolgens een actie uit.
De output van de test kan worden bekeken door op de knop 'Output' te klikken in het testsamenvatting, die het succes / mislukken van elke afzonderlijke stap laat zien.
Tips
Tussenliggende falende stappen
In het geval dat een scenario met tussenliggende stappen mislukt, houd er dan rekening mee dat Specflow in die scenario's eenvoudigweg de resterende stappen van dat scenario niet zal uitvoeren en het resultaat van de test als mislukt zal markeren.
goede mp3-downloader voor Android gratis
Tests uitvoeren met NUnit Adapter
Voor dit voorbeeld hebben we onze tests uitgevoerd met behulp van de Specflow.NUnit-testrunner (die we hadden geïnstalleerd via Nuget Package Manager).
Dit is op een aantal manieren anders, zoals hieronder wordt getoond, van de Specrun-runner die we in het eerdere artikel hadden gebruikt.
- Specflow.NUnit-runner is open source.
- Het introduceert geen vertraging bij het uitvoeren van de tests.
Gevolgtrekking
In dit artikel zagen we een end-to-end voorbeeld van het integreren van selenium met het Specflow-framework door middel van een eenvoudig testscenario van een videozoekopdracht in de YouTube-applicatie.
Bij het integreren van Selenium hebben we ook besproken hoe we gegevens over verschillende bindingen kunnen delen via velden van privéklassen. We hebben ook het uitvoeren van de test op NUnit-runner versus de Specrun-runner besproken en beide in detail vergeleken.
Code bestanden
YoutubeSearchFeature.feature
YoutubeSearchFeatureSteps.cs
Bekijk onze aanstaande tutorial om meer te weten te komen over Shared & Scoped Bindings, Hooks en Step Reuse in Specflow!
PREV-zelfstudie VOLGENDE zelfstudie
Aanbevolen literatuur
- Cucumber Selenium Tutorial: Cucumber Java Selenium WebDriver Integration
- Inleiding tot Selenium WebDriver - Selenium Tutorial # 8
- Integratie van Jenkins met Selenium WebDriver: stapsgewijze zelfstudie
- Implementatie van ons eerste WebDriver-script - Selenium WebDriver-zelfstudie # 10
- Omgaan met waarschuwingen / pop-ups in Selenium WebDriver - Selenium Tutorial # 16
- WebDriver Volledige installatie en installatie met Eclipse - Selenium Tutorial # 9
- Controleer de zichtbaarheid van webelementen met behulp van verschillende typen WebDriver-opdrachten - Selenium Tutorial # 14
- GeckoDriver Selenium-zelfstudie: Hoe GeckoDriver te gebruiken in Selenium-projecten