Vejledning til selen med JUnit / TestNG

1. Introduktion

Denne artikel er en hurtig, praktisk introduktion til at arbejde med Selen og skrive tests med JUnit og TestNG.

2. Selenintegration

I dette afsnit starter vi med et simpelt scenario - at åbne et browservindue, navigere til en given URL og lede efter noget ønsket indhold på siden.

2.1. Maven afhængigheder

I pom.xml fil, tilføj følgende afhængighed:

 org.seleniumhq.selenium selen-java 3.4.0 

Den nyeste version kan findes i Maven Central Repository.

2.2. Selen konfiguration

Opret først en ny Java-klassefil kaldet SelenConfig:

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

Da vi bruger en Selen 3.x-version, skal vi angive stien til en eksekverbar GeckoDriver fil (baseret på dit operativsystem) ved hjælp af en systemegenskab kaldet webdriver.gecko.driver Den seneste version af GeckoDriver kan downloades fra Github Geckodriver Releases.

Lad os nu initialisere WebDriver i konstruktøren indstiller vi også 5 sekunder som en time-out til WebDriver at vente på, at et element på siden vises:

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

Denne konfigurationsklasse indeholder et par metoder, som vi vil ignorere indtil videre, men vi vil se mere om disse i anden del af denne serie.

Derefter skal vi implementere en Seleneksempel klasse:

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

Herinde initialiserer vi SelenConfig og indstil den ønskede URL til at navigere til. På samme måde implementerer vi en simpel API for at lukke browseren og få titlen på siden:

public void closeWindow () {this.config.getDriver (). close (); } offentlig String getTitle () {returner this.config.getDriver (). getTitle (); }

For at navigere til sektionen Om på baeldung.com er vi nødt til at oprette en closeOverlay () metode, der kontrollerer og lukker overlayet på en startsideindlæsning. Derefter navigerer vi til siden Om Baeldung ved hjælp af getAboutBaeldungPage () metode:

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

Vi kan kontrollere, om de krævede oplysninger er tilgængelige på den viste side:

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

Dernæst skal vi teste denne klasse med både JUnit og TestNG.

3. Med JUnit

Lad os oprette en ny testklasse som SelenMedJUnitLiveTest:

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

Vi skal bruge @BeforeClass kommentar fra org.junit.BeforeClass at foretage en indledende opsætning. Heri Opsætning() metode, vi skal initialisere Seleneksempel objekt:

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

På en lignende måde skal vi lukke den nyåbnede browser, når vores testsag er færdig. Vi skal gøre dette med @Efter skole kommentar - for at rydde op i indstillingerne, når eksekvering af testsag er afsluttet:

@AfterClass offentlig statisk ugyldighed tearDown () {seleniumeksempel.closeWindow (); }

Bemærk venligst statisk modifikator på vores Seleneksempel medlemsvariabel - fordi vi skal bruge denne variabel i Opsætning() og rive ned() statiske metoder - @BeforeClass og @Efter skole kan kun påberåbes på statiske metoder.

Endelig kan vi oprette vores fulde test:

@Test offentlig ugyldigt nårAboutBaeldungIsLoaded_thenAboutEugenIsMentionedOnPage () {seleniumExample.getAboutBaeldungPage (); String actualTitle = seleniumeksempel.getTitle (); assertNotNull (actualTitle); assertEquals (expectTitle, actualTitle); assertTrue (seleniumeksempel.isAuthorInformationAvailable ()); }

Denne testmetode hævder, at titlen på websiden ikke er nul og er indstillet som forventet. Derudover kontrollerer vi, at siden indeholder de forventede oplysninger.

Når testen kører, åbner den simpelthen URL'en i Firefox og lukker den derefter, når titlen på websiden og indholdet er blevet verificeret.

4. Med TestNG

Lad os nu bruge TestNG til at køre vores test case / suite.

Bemærk, at hvis du bruger Eclipse, kan TestNG-pluginet downloades og installeres fra Eclipse Marketplace.

Lad os først oprette en ny testklasse:

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

Vi bruger en @BeforeSuite kommentar fra org.testng.annotations.BeforeSuite at instantiere vores Selen Eksempelklasse. Det Opsætning() metoden vil blive lanceret lige før testpakken aktiveres:

@BeforeSuite offentlig ugyldighed setUp () {seleniumeksempel = ny Seleniumeksempel (); }

På samme måde bruger vi @AfterSuite kommentar fra org.testng.annotations.AfterSuite for at lukke vores åbnede browser, når testpakken er afsluttet:

@AfterSuite offentligt ugyldigt tearDown () {seleniumeksempel.closeWindow (); }

Lad os endelig implementere vores test:

@Test offentlig ugyldigt nårAboutBaeldungIsLoaded_thenAboutEugenIsMentionedOnPage () {seleniumExample.getAboutBaeldungPage (); String actualTitle = seleniumeksempel.getTitle (); assertNotNull (actualTitle); assertEquals (expectTitle, actualTitle); assertTrue (seleniumeksempel.isAuthorInformationAvailable ()); }

Efter en vellykket afslutning af testpakken finder vi HTML- og XML-rapporter i test-output projektmappe. Disse rapporter opsummerer testresultaterne.

5. Konklusion

I denne hurtige artikel har vi fokuseret på en hurtig introduktion til at skrive Selenium 3-tests med både JUnit og TestNG.

Som altid er kilden til artiklen tilgængelig på GitHub.