Vodič za selen s JUnit / TestNG

1. Uvod

Ovaj je članak kratki, praktični uvod u rad sa selenom i pisanje testova s ​​JUnit i TestNG.

2. Integracija selena

U ovom ćemo odjeljku započeti s jednostavnim scenarijem - otvaranjem prozora preglednika, navigacijom do određenog URL-a i traženjem željenog sadržaja na stranici.

2.1. Ovisnosti Mavena

U pom.xml datoteku, dodajte sljedeću ovisnost:

 org.seleniumhq.selenium selen-java 3.4.0 

Najnoviju verziju možete pronaći u središnjem spremištu Maven.

2.2. Konfiguracija selena

Prvo stvorite novu datoteku Java klase pod nazivom SeleniumConfig:

javna klasa SeleniumConfig {privatni upravljački program WebDriver; // ...}

S obzirom da koristimo verziju Selenium 3.x, moramo odrediti put izvršne datoteke GeckoDriver datoteku (na temelju vašeg OS-a) pomoću sistemskog svojstva tzv webdriver.gecko.driver Najnovija verzija GeckoDriver može se preuzeti s Github Geckodriver izdanja.

Ajmo sada inicijalizirati WebDriver u konstruktoru ćemo također postaviti 5 sekundi kao time-out za WebDriver da pričekate da se pojavi element na stranici:

public SeleniumConfig () {Sposobnosti sposobnosti = DesiredCapabilities.firefox (); upravljački program = novi FirefoxDriver (mogućnosti); driver.manage (). timeouts (). implicitnoWait (5, TimeUnit.SECONDS); } static {System.setProperty ("webdriver.gecko.driver", findFile ("geckodriver.mac")); } statički privatni niz findFile (naziv datoteke niza) {Putovi niza [] = {"", "bin /", "target / classes"}; za (Staza niza: staze) {if (nova Datoteka (staza + naziv datoteke) .postoje ()) povratna staza + naziv datoteke; } povratak ""; }

Ova konfiguracijska klasa sadrži nekoliko metoda koje ćemo zasad zanemariti, ali o njima ćemo vidjeti više u drugom dijelu ove serije.

Dalje, trebat ćemo implementirati a Primjer selena razred:

javna klasa SeleniumExample {private SeleniumConfig config; private String url = "//www.baeldung.com/"; javni SeleniumExample () {config = new SeleniumConfig (); config.getDriver (). get (url); } // ...}

Ovdje ćemo inicijalizirati SeleniumConfig i postavite željeni URL za navigaciju. Slično tome, implementirat ćemo jednostavan API za zatvaranje preglednika i dobivanje naslova stranice:

javna void closeWindow () {this.config.getDriver (). close (); } javni String getTitle () {return this.config.getDriver (). getTitle (); }

Da bismo došli do odjeljka O baeldung.com, moramo stvoriti closeOverlay () metoda koja provjerava i zatvara sloj pri učitavanju početne stranice. Nakon toga idemo na stranicu About Baeldung koristeći getAboutBaeldungPage () metoda:

javna praznina getAboutBaeldungPage () {closeOverlay (); clickAboutLink (); clickAboutUsLink (); } private void closeOverlay () {Popis webElementList = this.config.getDriver () .findElements (By.tagName ("a")); if (webElementList! = null) {webElementList.stream () .filter (webElement -> "Zatvori" .equalsIgnoreCase (webElement.getAttribute ("title"))) .filter (WebElement :: isDisplayed) .findAny () .ifPresent ( WebElement :: klik); }} private void clickAboutLink () {Action actions = nove akcije (config.getDriver ()); WebElement aboutElement = this.config.getDriver () .findElement (By.id ("item-item-6138")); actions.moveToElement (aboutElement) .perform (); } private void clickAboutUsLink () {WebElement element = this.config.getDriver () .findElement (By.partialLinkText ("About Baeldung.")); element.click (); }

Možemo provjeriti jesu li traženi podaci dostupni na prikazanoj stranici:

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

Dalje ćemo testirati ovu klasu s JUnit i TestNG.

3. Uz JUnit

Stvorimo novu test klasu kao Ispitivanje selena saJUnitLiveTest:

javna klasa SeleniumWithJUnitLiveTest privatni statički SeleniumExample seleniumExample; private String očekivanoTitle = "O Baeldungu 

Koristit ćemo @BeforeClass bilješka od org.junit.BeforeClass za početno postavljanje. U ovome postaviti() metodu koju ćemo inicijalizirati Primjer selena objekt:

@BeforeClass javna statička void setUp () {seleniumExample = new SeleniumExample (); }

Na sličan način, kada naš testni slučaj završi, trebali bismo zatvoriti novootvoreni preglednik. Učinit ćemo ovo sa @Nakon nastave napomena - za čišćenje postavki po završetku test slučaja:

@AfterClass javna statička praznina tearDown () {seleniumExample.closeWindow (); }

Imajte na umu statički modifikator na našem Primjer selena varijabla member - jer ovu varijablu moramo koristiti u postaviti() i srušiti() statičke metode - @BeforeClass i @Nakon nastave može se pozvati samo na statičkim metodama.

Konačno, možemo stvoriti naš puni test:

@Test public void whenAboutBaeldungIsLoaded_thenAboutEugenIsMentionaryOnPage () {seleniumExample.get AboutBaeldungPage (); String actualTitle = seleniumExample.getTitle (); assertNotNull (actualTitle); assertEquals (očekivani naslov, stvarni naslov); assertTrue (seleniumExample.isAuthorInformationAvailable ()); }

Ova metoda ispitivanja tvrdi da naslov web stranice nije null i postavljen je prema očekivanjima. Osim toga, provjeravamo sadrži li stranica očekivane informacije.

Kada se test pokrene, on jednostavno otvori URL u Firefoxu i potom ga zatvori nakon što su naslov web stranice i sadržaj provjereni.

4. Uz TestNG

Upotrijebimo sada TestNG za pokretanje našeg test slučaja / paketa.

Imajte na umu da ako koristite Eclipse, dodatak TestNG može se preuzeti i instalirati s Eclipse Marketplace.

Prvo, kreirajmo novu testnu klasu:

javna klasa SeleniumWithTestNGLiveTest privatni SeleniumExample seleniumExample; private String očekivanoTitle = "O Baeldungu 

Koristit ćemo a @BeforeSuite bilješka od org.testng.annotations.BeforeSuite za instanciranje našeg Klasa SeleniumExample. The postaviti() metoda će se pokrenuti neposredno prije aktiviranja paketa za testiranje:

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

Slično tome, koristit ćemo @AfterSuite bilješka od org.testng.annotations.AfterSuite za zatvaranje našeg otvorenog preglednika nakon završetka test paketa:

@AfterSuite javna praznina tearDown () {seleniumExample.closeWindow (); }

Na kraju, provedimo naš test:

@Test public void whenAboutBaeldungIsLoaded_thenAboutEugenIsMentionaryOnPage () {seleniumExample.get AboutBaeldungPage (); String actualTitle = seleniumExample.getTitle (); assertNotNull (actualTitle); assertEquals (očekivani naslov, stvarni naslov); assertTrue (seleniumExample.isAuthorInformationAvailable ()); }

Nakon uspješnog završetka paketa za testiranje, nalazimo HTML i XML izvješća u test-izlaz mapa projekta. Ova izvješća rezimiraju rezultate ispitivanja.

5. Zaključak

U ovom smo se kratkom članku usredotočili na kratko uvođenje u pisanje testova Selenium 3 s JUnit i TestNG.

Kao i uvijek, izvor članka dostupan je na GitHubu.