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.