12 november 2020

UI tests met Selenium

Het schrijven van geautomatiseerde UI tests is geen gemakkelijke taak. Het schrijven van onderhoudbare en betrouwbare tests is nog moeilijker. Iedereen die voor deze uitdaging heeft gestaan, weet dat. In dit artikel duiken we snel in een van de best practices waarbij we het ontwerppatroon van het Page Object Model gebruiken.

Page Object Model patroon

Page Object Model is door de Selenium-gemeenschap het meest gebruikte ontwerppatroon in testautomatisering voor het verbeteren van testonderhoud en het verminderen van code duplicatie
Een pagina object is een objectgeoriënteerde klasse die dient als interface naar een echte pagina/scherm van uw applicatie. In een notendop houdt het patroon in dat een pagina-objectklasse wordt gemaakt voor elke toepassingspagina die u wilt testen en dat de tests de leden van deze klasse moeten gebruiken wanneer ze interactie met de gebruikersinterface nodig hebben. Naarmate we meer en meer functies aan een project toevoegen of de dekking van geautomatiseerde tests vergroten door meer tests toe te voegen, neemt het risico op een moeilijk te onderhouden testproject toe.

Op de startpagina van een website bijvoorbeeld hebben we een menubalk met navigatielinks naar verschillende modules. Veel geautomatiseerde testscenario’s klikken op deze menuknoppen en voeren specifieke testvalidatielogica uit. Stel je voor dat de gebruikersinterface is vernieuwd end at de menuknoppen naar een andere positive op de startpagina zijn verplaatst. Dit zal resulteren in mislukte tests, omdat scripts bepaalde element-locators niet kunnen vinden om de vereiste acties uit te voeren. Om die tests op te lossen, moeten we de volledige testcode doorlopen om locators waar nodig bij te werken. Het updaten van element-locators in gedupliceerde testcode zal veel tijd kosten die anders beter kan worden gebruikt om de testdekking te vergroten. En dit is slechts een van de scenario’s die gemakkelijker te hanteren is.

Om het punt beter te bewijzen, stelt u zich voor wat er moet worden gewijzigd als een lijst wordt vervangen door een raster, of als een pagina volledig opnieuw wordt ontworpen. In al deze gevallen, als de tests worden uitgevoerd tegen een pagina-objectklasse, hoeft alleen die klasse te worden aangepast.

Als we de voordelen van het gebruik van het POM-patroon zouden samenvatten, zou dit neerkomen op het volgende:

  • Makkelijk te onderhouden. Als u eenmaal uw ontwerp hebt gemaakt en als er een locator of functionaliteit op de webpagina verandert, weet u precies waar u uw code moet wijzigen.
  • Clean en begrijpelijke code. In plaats van dezelfde code te gebruiken voor al uw testklassen, worden veel functies gedefinieerd binnen de pagina-objecten. Daarom wordt het aantal geschreven regels code verminderd en wordt uw testcode gemakkelijker te begrijpen.
  • Helpt u te wijzen op de gebruikersinterface. Aangezien u paginaklassen maakt voor bijna elke pagina van uw webtoepassing, is het gemakkelijk om de functionaliteit en het model van uw webtoepassing in één oogopslag te begrijpen in uw testframework.
  • Betere test scripts. Uw testscripts bevatten beschijvende en gemakkelijk te begrijpen code (bijv. Homepage.goToLoginPage()) in plaats van onbegrijpelijke en hardgecodeerde code (bijv. Driver.findElement(By.id (“login”)). Click()).
  • Het schrijven van tests

    Een eenvoudig voorbeeldscenario voor een geautomatiseerde test is het succesvol inloggen van de gebruiker in de applicatie. Wanneer de gebruiker geldige inloggegevens invoert, wordt de applicatie doorgestuurd naar de startpagina door op de aanmeldknop te drukken. Op basis van het hierboven beschreven POM-patroon zou de testmethode die dit scenario valideert er uitkomen te zien zoals de afbeelding hiernaast. We hoefden alleen maar een deel van de inlogpagina te maken en methoden voor dit object aan te reopen om deze test te schrijven.

    Dit zijn slechts een paar alinea's van 'Geautomatiseerde UI tests met Selenium

      Wilt u het hele artikel ontvangen? Mail dan naar netrom@netrom.nl.

    Ontvang het hele artikel in uw mail!
    Contact ronald@netrom.nl
    of bel naar+31 (0)30 782 0111.