Selenium Webdriver Java Primjer programa
โก Pametni saลพetak
Selenium webdriver Java Primjer programa vodi vas kroz vaลก prvi skript za automatizaciju od poฤetka do kraja. LessObuhvaฤaju postavljanje okruลพenja, lociranje elemenata, slanje ulaza, navigaciju, validaciju, ฤekanja, rukovanje iznimkama i najbolje prakse za pouzdane WebDriver testove.

Selenium Java Primjer
Koriลกtenje Java klase โmyclassโ koju smo stvorili u prethodnom vodiฤu, pokuลกajmo stvoriti skriptu WebDriver koja bi:
Korak 1: donijeti Mercury Poฤetna stranica Tours
Korak 2: potvrdite njegov naslov
Korak 3: ispisati rezultat usporedbe
Korak 4: zatvorite prije zavrลกetka cijelog programa.
Selenium Primjer webdrivera Code
Ispod je stvarni WebDriver kod za logiku predstavljenu gornjim scenarijem
package newproject; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; //comment the above line and uncomment below line to use Chrome //import org.openqa.selenium.chrome.ChromeDriver; public class PG1 { public static void main(String[] args) { // declaration and instantiation of objects/variables System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); //comment the above 2 lines and uncomment below 2 lines to use Chrome //System.setProperty("webdriver.chrome.">driver","G:\\chromedriver.exe"); //WebDriver driver = new ChromeDriver(); String baseUrl = "https://demo.guru99.com/test/newtours/"; String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = ""; // launch Fire fox and direct it to the Base URL driver.get(baseUrl); // get the actual value of the title actualTitle = driver.getTitle(); /* * compare the actual title of the page with the expected one and print * the result as "Passed" or "Failed" */ if (actualTitle.contentEquals(expectedTitle)){ System.out.println("Test Passed!"); } else { System.out.println("Test Failed"); } //close Fire fox driver.close(); } }
Napomena: Poฤinje Firefox 35, trebate koristiti gecko driver koji je izradila Mozilla da biste koristili Web Driver. Selenium 3.0, gecko i firefox imaju problema s kompatibilnoลกฤu i njihovo ispravno postavljanje moglo bi postati teลพak zadatak. Ako kod ne radi, vratite se na Firefox verzija 47 ili niลพa. Alternativno, svoje skripte moลพete pokrenuti na Chromeu. Selenium radi izvan okvira za Chrome. Trebate samo promijeniti 3 retka koda kako bi vaลกa skripta radila s Chromeom ili Firefox
Objaลกnjavajuฤi ลกifru
Uvoz paketa
Za poฤetak morate uvesti sljedeฤa dva paketa:
- org.openqa.selenium.*โ sadrลพi klasu WebDriver potrebnu za instanciranje novog preglednika uฤitanog s odreฤenim upravljaฤkim programom
- org.openqa.selenium.firefox.Firefoxvozaฤ โ sadrลพi FirefoxKlasa vozaฤa potrebna za instanciranje a Firefox-specifiฤni upravljaฤki program na preglednik koji instancira klasa WebDriver
Ako vaลก test zahtijeva kompliciranije radnje kao ลกto je pristup drugoj klasi, snimanje zaslona preglednika ili manipuliranje vanjskim datotekama, svakako ฤete morati uvesti viลกe paketa.
Instanciranje objekata i varijabli
Obiฤno se ovako instancira pogonski objekt.
WebDriver driver = new FirefoxDriver();
A FirefoxKlasa vozaฤa bez parametara znaฤi da je zadana Firefox profil ฤe pokrenuti naลก Java program. Zadana vrijednost Firefox profil je sliฤan pokretanju Firefox u sigurnom naฤinu rada (nisu uฤitana proลกirenja).
Radi praktiฤnosti, spremili smo bazu URL i oฤekivani naslov kao varijable.
Pokretanje sesije preglednika
WebDriver's dobiti() Metoda se koristi za pokretanje nove sesije preglednika i usmjerava je na URL koji navedete kao njegov parametar.
driver.get(baseUrl);
Dobijte stvarni naslov stranice
Klasa WebDriver ima getTitle() metoda koja se uvijek koristi za dobivanje naslova trenutno uฤitane stranice.
actualTitle = driver.getTitle();
Usporedite oฤekivane i stvarne vrijednosti
Ovaj dio koda jednostavno koristi osnovni Java strukturu if-else za usporedbu stvarnog naslova s โโoฤekivanim.
if (actualTitle.contentEquals(expectedTitle)){ System.out.println("Test Passed!"); } else { System.out.println("Test Failed"); }
Prekid sesije preglednika
"Zatvoriti()โ koristi se za zatvaranje prozora preglednika.
driver.close();
Prekid cijelog programa
Ako koristite ovu naredbu bez prethodnog zatvaranja svih prozora preglednika, cijeli Java program ฤe zavrลกiti dok je prozor preglednika otvoren.
System.exit(0);
Izvoฤenje testa
Postoje dva naฤina za izvrลกavanje koda Eclipse SDI.
- On Eclipsena traci izbornika, kliknite Trฤi > Trฤi.
- Press Ctrl + F11 za pokretanje cijelog koda.
Ako ste sve napravili kako treba, Eclipse ispisao bi "Test proลกao!"
Lociranje GUI elemenata
Lociranje elemenata u WebDriver-u vrลกi se pomoฤu "pronaฤiElement(Po.lokator())โ metoda. Dio koda "lokator" isti je kao bilo koji od lokatora o kojima se prethodno raspravljalo u Selenium IDE poglavlja ovih udลพbenika. Zapravo, preporuฤuje se da locirate GUI elemente pomoฤu IDE-a i nakon uspjeลกne identifikacije izvezete kod u WebDriver.
Ovdje je Selenium primjer koda koji locira element prema njegovom ID-u. Facebook se koristi kao baza URL.
package newproject; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class PG2 { public static void main(String[] args) { System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); String baseUrl = "http://www.facebook.com"; String tagName = ""; driver.get(baseUrl); tagName = driver.findElement(By.id("email")).getTagName(); System.out.println(tagName); driver.close(); System.exit(0); } }
Koristili smo getTagName() metoda za bivลกitracnaziv oznake tog odreฤenog elementa ฤiji je ID "email". Kada se pokrene, ovaj kod bi trebao moฤi ispravno identificirati naziv oznake "input" i ispisati ga na EclipseProzor konzole korisnika.
Saลพetak za lociranje elemenata
| varijacija | Description | Uzorak |
|---|---|---|
| By.className | pronalazi elemente na temelju vrijednosti atributa โclassโ. | findElement(By.className(โsomeClassNameโ)) |
| By.cssSelector | pronalazi elemente na temelju pogonskog CSS Selector motora | findElement(By.cssSelector(โinput#emailโ)) |
| By.id | locira elemente prema vrijednosti njihovog "id" atributa |
findElement(By.id(โsomeIdโ)) |
| By.linkText | pronalazi element veze prema toฤnom tekstu koji prikazuje |
findElement(By.linkText(โREGISTRACIJAโ)) |
| Imenom | locira elemente prema vrijednosti atributa โnameโ. |
findElement(By.name(โsomeNameโ)) |
| By.partialLinkText | locira elemente koji sadrลพe zadani tekst veze |
findElement(By.partialLinkText(โREGโ)) |
| By.tagName | locira elemente prema njihovom nazivu oznake |
findElement(By.tagName(โdivโ)) |
| By.xpath | locira elemente putem XPath-a |
findElement(By.xpath(โ//html/body/div/table/tbody/tr/td[2]/table/ tbody/tr[4]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[3]/ form/table/tbody/tr[5]โ)) |
Napomena o koriลกtenju findElement(By.cssSelector())
By.cssSelector() ne podrลพava znaฤajku "sadrลพi". Razmotrite Selenium IDE kod ispod โ
In Selenium IDE iznad, cijeli je test proลกao. Meฤutim u Selenium WebDriver skripta u nastavku, isti je test generirao pogreลกku jer WebDriver ne podrลพava kljuฤnu rijeฤ "contains" kada se koristi u metodi By.cssSelector().
Uobiฤajene naredbe
Instanciranje web elemenata
Umjesto koriลกtenja duge sintakse "driver.findElement(By.locator())" svaki put kada pristupite odreฤenom elementu, moลพemo instancirati WebElement objekt za njega. Klasa WebElement sadrลพana je u paketu โorg.openqa.selenium.*โ.
Klikom na element
Klikanje je moลพda najฤeลกฤi naฤin interakcije s web elementima. The click() Metoda se koristi za simulaciju klika bilo kojeg elementa. Sljedeฤe Selenium Java primjer pokazuje kako click() koristio se za klikanje Mercury Toursov gumb โPrijavaโ.
Kada koristite metodu click(), potrebno je obratiti pozornost na sljedeฤe stvari.
- Ne uzima nikakav parametar/argument.
- Metoda automatski ฤeka da se uฤita nova stranica ako je primjenjiva.
- Element na koji se klikne mora biti vidljiv (visina i ลกirina ne smiju biti jednake nuli).
Nabavite naredbe
Naredbe Get dohvaฤaju razne vaลพne informacije o stranici/elementu. Evo nekoliko vaลพnih naredbi "get" s kojima morate biti upoznati.
| Naredbe | Upotreba |
|---|---|
| dobiti()
Primjer upotrebe: |
|
| getTitle()
Primjer upotrebe: |
|
| getPageSource()
Primjer upotrebe: |
|
| getCurrentUrl()
Primjer upotrebe: |
|
| getText()
Primjer upotrebe: |
|
Navigacijske naredbe
Ove vam naredbe omoguฤuju osvjeลพavanje, ulaลพenje i prebacivanje izmeฤu razliฤitih web stranica.
| navigacija().do()
Primjer upotrebe: |
|
| navigacija().refresh()
Primjer upotrebe: |
|
| navigacija().natrag()
Primjer upotrebe: |
|
| navigacija().naprijed()
Primjer upotrebe: |
|
Zatvaranje i izlazak iz preglednika Windows
| Zatvoriti()
Primjer upotrebe: |
|
| prestati()
Primjer upotrebe: |
|
Da bi se jasno ilustrirala razlika izmeฤu close() i quit(), pokuลกajte izvrลกiti kod u nastavku. Koristi web stranicu koja automatski iskaฤe prozor nakon uฤitavanja stranice i otvara drugi nakon izlaska.
Primijetite da je zatvoren samo nadreฤeni prozor preglednika, a ne dva skoฤna prozora.
Ali ako koristite quit(), zatvorit ฤe se svi prozori โ ne samo nadreฤeni. Pokuลกajte pokrenuti kod u nastavku i primijetit ฤete da ฤe se dva skoฤna prozora iznad automatski zatvoriti.
package newproject; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class PG3 { public static void main(String[] args) { System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.get("http://www.popuptest.com/popuptest2.html"); driver.quit(); // using QUIT all windows will close } }
Prebacivanje izmeฤu okvira
Da bismo pristupili GUI elementima u Frameu, prvo trebamo uputiti WebDriver da se fokusira na okvir ili skoฤni prozor prije nego ลกto moลพemo pristupiti elementima unutar njih. Uzmimo, na primjer, web stranicu https://demo.guru99.com/selenium/deprecated.html
Ova stranica ima 3 okvira ฤiji su atributi "naziv" navedeni gore. ลฝelimo pristupiti vezi "Zastarjelo" koja je gore zaokruลพena ลพutom bojom. Da bismo to uฤinili, prvo moramo uputiti WebDriver da se prebaci na okvir "classFrame" koristeฤi โswitchTo().frame()โ metoda. Koristit ฤemo atribut name okvira kao parametar za dio "frame()".
package newproject; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class PG4 { public static void main(String[] args) { System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/selenium/deprecated.html"); driver.switchTo().frame("classFrame"); driver.findElement(By.linkText("Deprecated")).click(); driver.close(); } }
Nakon izvrลกavanja ovog koda, vidjet ฤete da je okvir โclassFrameโ prebaฤen na stranicu โDeprecated APIโ, ลกto znaฤi da je naลก kod uspjeลกno mogao pristupiti vezi โDeprecatedโ.
Prebacivanje izmeฤu skoฤnih prozora Windows
WebDriver omoguฤuje prikazivanje skoฤnih prozora poput upozorenja, za razliku od Selenium IDE. Za pristup elementima unutar upozorenja (kao ลกto je poruka koju sadrลพi), moramo koristiti "switchTo().alert()" metoda. U donjem kodu koristit ฤemo ovu metodu za pristup okviru s upozorenjem i zatim dohvatiti njegovu poruku pomoฤu "getText()" naฤin, a zatim automatski zatvorite okvir s upozorenjem pomoฤu "switchTo().alert().accept()" metoda.
Prvo prijeฤite na https://output.jsbin.com/usidix/1 i ruฤno kliknite "Kreni!" i sami pogledajte tekst poruke.
Da vidimo Selenium primjer koda za ovo-
package mypackage; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class myclass { public static void main(String[] args) { System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); String alertMessage = ""; driver.get("http://jsbin.com/usidix/1"); driver.findElement(By.cssSelector("input[value=\"Go!\"]")).click(); alertMessage = driver.switchTo().alert().getText(); driver.switchTo().alert().accept(); System.out.println(alertMessage); driver.quit(); } }
Na Eclipse konzole, primijetite da je ispisana poruka upozorenja:
ฤeka
Postoje dvije vrste ฤekanja.
- Implicitno ฤekanje โ koristi se za postavljanje zadanog vremena ฤekanja kroz cijeli program
- Eksplicitno ฤekanje โ koristi se za postavljanje vremena ฤekanja samo za odreฤenu instancu
Implicitno ฤekanje
- Jednostavnije ga je kodirati nego eksplicitna ฤekanja.
- Obiฤno se deklarira u instancijskom dijelu koda.
- Trebat ฤe vam samo jedan dodatni paket za uvoz.
Da biste poฤeli koristiti implicitno ฤekanje, morali biste uvesti ovaj paket u svoj kod.
Zatim u dijelu vaลกeg koda za instanciranje dodajte ovo.
Eksplicitno ฤekanje
Eksplicitna ฤekanja provode se pomoฤu klasa WebDriverWait i ExpectedCondition. Za sljedeฤe Selenium Primjer WebDriver-a, priฤekat ฤemo do 10 sekundi da element ฤiji je ID "korisniฤko ime" postane vidljiv prije nego ลกto preฤemo na sljedeฤu naredbu. Evo koraka.
Korak 1:
Uvezite ova dva paketa:
Korak 2:
Deklarirajte varijablu WebDriverWait. U ovom primjeru koristit ฤemo "myWaitVar" kao naziv varijable.
Korak 3:
Upotrijebite myWaitVar s ExpectedConditions na dijelovima gdje je potrebno eksplicitno ฤekanje. U ovom sluฤaju koristit ฤemo eksplicitno ฤekanje na "korisniฤko ime" (Mercury Tours HomePage) unos prije nego ลกto na njega upiลกemo tekst "tutorial".
Uvjeti
Sljedeฤe metode se koriste u uvjetnim i looping operacije โ
- isEnabled() se koristi kada ลพelite provjeriti je li odreฤeni element omoguฤen ili ne prije izvrลกavanja naredbe.
- isDisplayed() koristi se kada ลพelite provjeriti je li odreฤeni element prikazan ili ne prije izvrลกenja naredbe.
- isSelected() koristi se kada ลพelite provjeriti je li odreฤena potvrdni okvir, radio gumb ili opciju u padajuฤem okviru je odabrano. Ne radi na drugim elementima.
Koriลกtenje ExpectedConditions
Klasa ExpectedConditions nudi ลกiri skup uvjeta koje moลพete koristiti u kombinaciji s WebDriverWait metodom until().
Ispod su neke od najฤeลกฤih metoda ExpectedConditions.
- alertIsPresent() โ ฤeka dok se ne prikaลพe okvir upozorenja.
- elementToBeClickable() โ ฤeka dok element ne bude vidljiv i, u isto vrijeme, omoguฤen. Uzorak Selenium Code dolje ฤe priฤekati dok element s id=โusernameโ ne postane vidljiv i omoguฤen prije nego ลกto dodijeli taj element kao varijablu WebElement pod nazivom โtxtUserNameโ.
- frameToBeAvailableAndSwitchToIt() โ ฤeka dok zadani okvir veฤ bude dostupan, a zatim se automatski prebacuje na njega.
Hvatanje iznimaka
Kada koristite isEnabled(), isDisplayed() i isSelected(), WebDriver pretpostavlja da element veฤ postoji na stranici. U suprotnom, izbacit ฤe a NoSuchElementException. Da bismo to izbjegli, trebali bismo koristiti blok try-catch kako program ne bi bio prekinut.
WebElement txtbox_username = driver.findElement(By.id("username")); try{ if(txtbox_username.isEnabled()){ txtbox_username.sendKeys("tutorial"); } } catch(NoSuchElementException nsee){ System.out.println(nsee.toString()); }
Ako koristite eksplicitna ฤekanja, vrsta iznimke koju biste trebali uhvatiti je "TimeoutException".

.png)
.png)
.png)
.png)
.png)
.png)

.png)


.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)