Veiledning til selen med JUnit / TestNG

1. Introduksjon

Denne artikkelen er en rask, praktisk introduksjon til å jobbe med Selen og skrive tester med JUnit og TestNG.

2. Selenintegrasjon

I denne delen starter vi med et enkelt scenario - å åpne et nettleservindu, navigere til en gitt URL og se etter ønsket innhold på siden.

2.1. Maven avhengigheter

I pom.xml fil, legg til følgende avhengighet:

 org.seleniumhq.selenium selen-java 3.4.0 

Den siste versjonen finner du i Maven Central Repository.

2.2. Selen konfigurasjon

Først oppretter du en ny Java-klassefil som heter SelenConfig:

offentlig klasse SeleniumConfig {privat WebDriver-driver; // ...}

Gitt at vi bruker en Selenium 3.x-versjon, må vi spesifisere banen til en kjørbar GeckoDriver fil (basert på operativsystemet ditt) ved hjelp av en systemegenskap som heter webdriver.gecko.driver Den siste versjonen av GeckoDriver kan lastes ned fra Github Geckodriver Releases.

La oss nå initialisere WebDriver i konstruktøren, vil vi også sette 5 sekunder som en time-out for WebDriver å vente på at et element på siden skal vises:

offentlige SeleniumConfig () {Capabilities-muligheter = DesiredCapabilities.firefox (); driver = ny FirefoxDriver (evner); driver.manage (). timeouts (). implicitWait (5, TimeUnit.SECONDS); } statisk {System.setProperty ("webdriver.gecko.driver", findFile ("geckodriver.mac")); } statisk privat String findFile (String filnavn) {Strengstier [] = {"", "bin /", "target / classes"}; for (Strengsti: stier) {hvis (ny fil (sti + filnavn). eksisterer ()) retursti + filnavn; } komme tilbake ""; }

Denne konfigurasjonsklassen inneholder et par metoder som vi vil ignorere for nå, men vi vil se mer om disse på den andre delen av denne serien.

Deretter må vi implementere en Selen Eksempel klasse:

public class SeleniumExample {private SeleniumConfig config; privat streng url = "//www.baeldung.com/"; public SeleniumExample () {config = new SeleniumConfig (); config.getDriver (). get (url); } // ...}

Her vil vi initialisere SelenConfig og angi ønsket URL å navigere til. På samme måte implementerer vi et enkelt API for å lukke nettleseren og få tittelen på siden:

offentlig ugyldig closeWindow () {this.config.getDriver (). lukk (); } offentlig String getTitle () {returner this.config.getDriver (). getTitle (); }

For å navigere til Om-delen på baeldung.com, må vi opprette en closeOverlay () metode som sjekker og lukker overlegget på en startside. Deretter navigerer vi til About Baeldung-siden ved hjelp av getAboutBaeldungPage () metode:

offentlig ugyldighet getAboutBaeldungPage () {closeOverlay (); clickAboutLink (); clickAboutUsLink (); } privat tomrom closeOverlay () {List webElementList = this.config.getDriver () .findElements (By.tagName ("a")); hvis (webElementList! = null) {webElementList.stream () .filter (webElement -> "Close" .equalsIgnoreCase (webElement.getAttribute ("title"))) .filter (WebElement :: isDisplayed) .findAny () .ifPresent ( WebElement :: klikk); }} privat ugyldig clickAboutLink () {Handlinger handlinger = nye handlinger (config.getDriver ()); WebElement aboutElement = this.config.getDriver () .findElement (By.id ("menu-item-6138")); actions.moveToElement (aboutElement) .perform (); } privat ugyldig clickAboutUsLink () {WebElement element = this.config.getDriver () .findElement (By.partialLinkText ("Om Baeldung.")); element.click (); }

Vi kan sjekke om nødvendig informasjon er tilgjengelig på den viste siden:

public boolean isAuthorInformationAvailable () {return this.config.getDriver () .getPageSource () .contains ("Hei! Jeg er Eugen"); }

Deretter skal vi teste denne klassen med både JUnit og TestNG.

3. Med JUnit

La oss lage en ny testklasse som SelenWithJUnitLiveTest:

offentlig klasse SeleniumWithJUnitLiveTest privat statisk Selenium Eksempel selen Eksempel; private String expectTitle = "Om Baeldung 

Vi skal bruke @BeforeClass kommentar fra org.junit.BeforeClass for å gjøre et første oppsett. I dette setUp () metoden vi skal initialisere Selen Eksempel gjenstand:

@BeforeClass offentlig statisk ugyldig setUp () {seleniumeksempel = nytt Seleneksempel (); }

På en lignende måte bør vi lukke den nylig åpnede nettleseren når testsaken vår er ferdig. Vi skal gjøre dette med @Etter timen kommentar - for å rydde opp i innstillingene når kjøring av testtilfelle er ferdig:

@AfterClass offentlig statisk ugyldighet tearDown () {seleniumExample.closeWindow (); }

Vær oppmerksom på statisk modifikator på vår Selen Eksempel medlemsvariabel - fordi vi trenger å bruke denne variabelen i setUp () og rive ned() statiske metoder - @BeforeClass og @Etter timen kan bare påberopes på statiske metoder.

Til slutt kan vi lage vår fulle test:

@Test offentlig ugyldig nårAboutBaeldungIsLoaded_thenAboutEugenIsMentionedOnPage () {seleniumExample.getAboutBaeldungPage (); Streng actualTitle = seleniumeksempel.getTitle (); assertNotNull (actualTitle); assertEquals (forventet tittel, faktisk tittel); assertTrue (seleniumExample.isAuthorInformationAvailable ()); }

Denne testmetoden hevder at tittelen på nettsiden ikke er null og er satt som forventet. I tillegg til det, sjekker vi at siden inneholder forventet informasjon.

Når testen kjører, åpner den bare URL-en i Firefox og lukker den deretter etter at tittelen på websiden og innholdet er bekreftet.

4. Med TestNG

La oss nå bruke TestNG til å kjøre vår test case / suite.

Merk at hvis du bruker Eclipse, kan TestNG-pluginet lastes ned og installeres fra Eclipse Marketplace.

La oss først lage en ny testklasse:

offentlig klasse SeleniumWithTestNGLiveTest privat Selenium Eksempel selen Eksempel; private String expectTitle = "Om Baeldung 

Vi bruker en @BeforeSuite kommentar fra org.testng.annotations.BeforeSuite å instansiere vår Selen Eksempelklasse. De setUp () metoden vil bli lansert like før testpakken aktiveres:

@BeforeSuite offentlig ugyldig setUp () {seleniumeksempel = nytt Seleneksempel (); }

På samme måte bruker vi @AfterSuite kommentar fra org.testng.annotations.AfterSuite for å lukke den åpnede nettleseren vår når testpakken er fullført:

@AfterSuite public void tearDown () {seleniumExample.closeWindow (); }

Til slutt, la oss implementere testen vår:

@Test offentlig ugyldig nårAboutBaeldungIsLoaded_thenAboutEugenIsMentionedOnPage () {seleniumExample.getAboutBaeldungPage (); Streng actualTitle = seleniumeksempel.getTitle (); assertNotNull (actualTitle); assertEquals (forventet tittel, faktisk tittel); assertTrue (seleniumExample.isAuthorInformationAvailable ()); }

Etter en vellykket gjennomføring av testpakken finner vi HTML- og XML-rapporter i test-utgang mappen til prosjektet. Disse rapportene oppsummerer testresultatene.

5. Konklusjon

I denne raske artikkelen har vi fokusert på en rask introduksjon til å skrive Selenium 3-tester med både JUnit og TestNG.

Som alltid er kilden til artikkelen tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found