Gids voor selenium met JUnit / TestNG

1. Inleiding

Dit artikel is een snelle, praktische inleiding tot het werken met Selenium en het schrijven van tests met JUnit en TestNG.

2. Selenium-integratie

In dit gedeelte beginnen we met een eenvoudig scenario: een browservenster openen, naar een bepaalde URL navigeren en zoeken naar gewenste inhoud op de pagina.

2.1. Afhankelijkheden van Maven

In de pom.xml bestand, voeg de volgende afhankelijkheid toe:

 org.seleniumhq.selenium selenium-java 3.4.0 

De laatste versie is te vinden in de Maven Central Repository.

2.2. Selenium-configuratie

Maak eerst een nieuw Java-klassebestand met de naam SeleniumConfig:

openbare klasse SeleniumConfig {privé WebDriver-stuurprogramma; // ...}

Aangezien we een Selenium 3.x-versie gebruiken, moeten we het pad van een uitvoerbaar bestand specificeren GeckoDriver bestand (gebaseerd op uw besturingssysteem) met een systeemeigenschap genaamd webdriver.gecko.driver De nieuwste versie van de GeckoDriver kan worden gedownload van Github Geckodriver Releases.

Laten we nu het WebDriver in de constructor zullen we ook 5 seconden instellen als een time-out voor WebDriver wachten tot een element op de pagina verschijnt:

openbare SeleniumConfig () {Mogelijkheden mogelijkheden = DesiredCapabilities.firefox (); driver = nieuwe FirefoxDriver (mogelijkheden); driver.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS); } statisch {System.setProperty ("webdriver.gecko.driver", findFile ("geckodriver.mac")); } statische privé String findFile (String bestandsnaam) {String paden [] = {"", "bin /", "target / classes"}; for (String path: path) {if (new File (path + filename) .exists ()) return path + filename; } return ""; }

Deze configuratieklasse bevat een aantal methoden die we voorlopig zullen negeren, maar we zullen er meer over zien in het tweede deel van deze serie.

Vervolgens moeten we een Selenium Voorbeeld klasse:

openbare klasse SeleniumExample {privé SeleniumConfig-configuratie; private String url = "//www.baeldung.com/"; openbare SeleniumExample () {config = nieuwe SeleniumConfig (); config.getDriver (). get (url); } // ...}

Hierin initialiseren we de SeleniumConfig en stel de gewenste URL in om naartoe te navigeren. Evenzo implementeren we een eenvoudige API om de browser te sluiten en de titel van de pagina te krijgen:

openbare leegte closeWindow () {this.config.getDriver (). close (); } public String getTitle () {retourneer this.config.getDriver (). getTitle (); }

Om naar het gedeelte Over van baeldung.com te navigeren, moeten we een closeOverlay () methode die de overlay bij het laden van een homepage controleert en sluit. Daarna navigeren we naar de About Baeldung-pagina met behulp van de getAboutBaeldungPage () methode:

openbare ongeldige getAboutBaeldungPage () {closeOverlay (); clickAboutLink (); clickAboutUsLink (); } private void closeOverlay () {Lijst webElementList = this.config.getDriver () .findElements (By.tagName ("a")); if (webElementList! = null) {webElementList.stream () .filter (webElement -> "Sluiten" .equalsIgnoreCase (webElement.getAttribute ("title"))) .filter (WebElement :: isDisplayed) .findAny () .ifPresent ( WebElement :: klik); }} private void clickAboutLink () {Actions actions = new Actions (config.getDriver ()); WebElement aboutElement = this.config.getDriver () .findElement (By.id ("menu-item-6138")); actions.moveToElement (aboutElement) .perform (); } private void clickAboutUsLink () {WebElement-element = this.config.getDriver () .findElement (By.partialLinkText ("Over Baeldung.")); element.click (); }

We kunnen controleren of de vereiste informatie beschikbaar is op de weergegeven pagina:

openbare boolean isAuthorInformationAvailable () {retourneer this.config.getDriver () .getPageSource () .contains ("Hé! Ik ben Eugen"); }

Vervolgens gaan we deze klasse testen met zowel JUnit als TestNG.

3. Met JUnit

Laten we een nieuwe testklasse maken als SeleniumWithJUnitLiveTest:

openbare klasse SeleniumWithJUnitLiveTest privé statisch SeleniumExample seleniumExample; private String verwachteTitle = "Over Baeldung 

We gaan de @Voor klas annotatie van org.junit.BeforeClass om een ​​eerste installatie uit te voeren. In deze opstelling() methode gaan we de Selenium Voorbeeld voorwerp:

@BeforeClass openbare statische leegte setUp () {seleniumExample = nieuwe SeleniumExample (); }

Op een vergelijkbare manier, wanneer onze testcase is voltooid, moeten we de nieuw geopende browser sluiten. We gaan dit doen met @Na de les annotatie - om de instellingen op te schonen wanneer de uitvoering van de testcase is voltooid:

@AfterClass openbare statische leegte tearDown () {seleniumExample.closeWindow (); }

Let op de statisch modifier op onze Selenium Voorbeeld lidvariabele - omdat we deze variabele in de opstelling() en scheuren() statische methoden - @Voor klas en @Na de les kan alleen worden aangeroepen op statische methoden.

Eindelijk kunnen we onze volledige test maken:

@Test openbare leegte whenAboutBaeldungIsLoaded_thenAboutEugenIsMentionedOnPage () {seleniumExample.getAboutBaeldungPage (); String actualTitle = seleniumExample.getTitle (); assertNotNull (actualTitle); assertEquals (verwachteTitle, actualTitle); assertTrue (seleniumExample.isAuthorInformationAvailable ()); }

Deze testmethode stelt dat de titel van de webpagina dat niet is nul en is ingesteld zoals verwacht. Daarnaast controleren we of de pagina de verwachte informatie bevat.

Wanneer de test wordt uitgevoerd, wordt eenvoudig de URL in Firefox geopend en vervolgens gesloten nadat de titel van de webpagina en de inhoud zijn geverifieerd.

4. Met TestNG

Laten we nu TestNG gebruiken om onze testcase / suite uit te voeren.

Merk op dat als u Eclipse gebruikt, de TestNG-plug-in kan worden gedownload en geïnstalleerd vanaf de Eclipse Marketplace.

Laten we eerst een nieuwe testklasse maken:

openbare klasse SeleniumWithTestNGLiveTest privé SeleniumExample seleniumExample; private String verwachteTitle = "Over Baeldung 

We gebruiken een @BeforeSuite annotatie van org.testng.annotations.BeforeSuite om onze Selenium Voorbeeld klasse. De opstelling() methode wordt gestart net voordat de testsuite wordt geactiveerd:

@BeforeSuite public void setUp () {seleniumExample = nieuw SeleniumExample (); }

Op dezelfde manier gebruiken we de @AfterSuite annotatie van org.testng.annotations.AfterSuite om onze geopende browser te sluiten zodra de testsuite is voltooid:

@AfterSuite openbare leegte tearDown () {seleniumExample.closeWindow (); }

Laten we tot slot onze test implementeren:

@Test openbare leegte whenAboutBaeldungIsLoaded_thenAboutEugenIsMentionedOnPage () {seleniumExample.getAboutBaeldungPage (); String actualTitle = seleniumExample.getTitle (); assertNotNull (actualTitle); assertEquals (verwachteTitle, werkelijkeTitle); assertTrue (seleniumExample.isAuthorInformationAvailable ()); }

Na een succesvolle afronding van de testsuite vinden we HTML- en XML-rapporten in het test-output map van het project. Deze rapporten vatten de testresultaten samen.

5. Conclusie

In dit korte artikel hebben we ons geconcentreerd op een korte introductie tot het schrijven van Selenium 3-tests met zowel JUnit als TestNG.

Zoals altijd is de bron voor het artikel beschikbaar op GitHub.