Koristeći Java klasu "myclass" koju smo kreirali u prethodnom vodiču, pokušajmo stvoriti WebDriver skriptu koja bi:
- dohvatiti početnu stranicu Mercury Toursa
- provjeriti njegov naslov
- ispišite rezultat usporedbe
- zatvorite ga prije završetka cijelog programa.
WebDriver kod
Ispod je stvarni WebDriver kôd za logiku predstavljenu gornjim scenarijem
Napomena: Pokrećući Firefox 35, za korištenje web upravljačkog programa morate koristiti upravljački program gecko kojeg je kreirala Mozilla. Selenium 3.0, gecko i firefox imaju problema s kompatibilnošću i njihovo pravilno postavljanje moglo bi postati težak zadatak. Ako kôd ne radi, vratite se na Firefox verziju 47 ili nižu. Svoje skripte možete pokrenuti i na Chromeu. Selen djeluje izvan okvira za Chrome. Samo trebate promijeniti 3 retka koda da bi vaša skripta radila s Chromeom ili Firefoxom
paket noviprojekt;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;// komentirajte gornji redak i pokomentirajte donji redak da biste koristili Chrome// uvoz org.openqa.selenium.chrome.ChromeDriver;javna klasa PG1 {javna statička void glavna (String [] args) {// deklaracija i instancija objekata / varijabliSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Upravljački program za WebDriver = novi FirefoxDriver ();// komentirajte gornja 2 retka i komentirajte ispod 2 retka da biste koristili Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// pogonitelj WebDrivera = novi ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";String očekujeTitle = "Dobrodošli: Mercury Tours";String actualTitle = "";// pokrenimo Fire fox i usmjerimo ga na osnovni URLdriver.get (baseUrl);// dobivanje stvarne vrijednosti naslovaactualTitle = driver.getTitle ();/ ** usporedite stvarni naslov stranice s očekivanim i ispišite* rezultat kao "prošao" ili "nije uspio"* /if (actualTitle.contentEquals (očekuje se Naslov)) {System.out.println ("Test je položen!");} ostalo {System.out.println ("Test nije uspio");}// zatvori Vatrena lisicadriver.close ();}}
Objašnjavanje koda
Uvoz paketa
Da biste započeli, morate uvesti sljedeća dva paketa:
- org.openqa.selenium. * - sadrži klasu WebDriver potrebnu za instanciranje novog preglednika učitan s određenim upravljačkim programom
- org.openqa.selenium.firefox.FirefoxDriver - sadrži klasu FirefoxDriver potrebnu za instanciranje upravljačkog programa specifičnog za Firefox u preglednik instanciran od strane klase WebDriver
Ako vašem testu trebaju složenije radnje, poput pristupa drugoj klasi, snimanja zaslona preglednika ili manipuliranja vanjskim datotekama, definitivno ćete trebati uvesti više paketa.
Instanciranje objekata i varijabli
Obično se tako instancira objekt upravljačkog programa.
Klasa FirefoxDriver bez parametara znači da će zadani profil Firefox pokrenuti naš program Java. Zadani profil Firefoxa sličan je pokretanju Firefoxa u sigurnom načinu (nisu učitana proširenja).
Radi praktičnosti osnovni URL i očekivani naslov spremili smo kao varijable.
Pokretanje sesije preglednika
WebDriverova metoda get () koristi se za pokretanje nove sesije preglednika i usmjerava je na URL koji navedete kao njegov parametar.
Dohvatite stvarni naslov stranice
Klasa WebDriver ima metodu getTitle () koja se uvijek koristi za dobivanje naslova stranice trenutno učitane stranice.
Usporedite očekivane i stvarne vrijednosti
Ovaj dio koda jednostavno koristi osnovnu Java-if-else strukturu za usporedbu stvarnog naslova s očekivanim.
Završavanje sesije preglednika
Za zatvaranje prozora preglednika koristi se metoda " close () ".
Prekid cijelog programa
Ako ovu naredbu upotrijebite bez prethodnog zatvaranja svih prozora preglednika, cijeli će se program Java završiti dok će prozor preglednika biti otvoren.
Pokretanje testa
Postoje dva načina za izvršavanje koda u Eclipse IDE-u.
- Na traci izbornika Eclipsea kliknite Run> Run.
- Pritisnite Ctrl + F11 za pokretanje cijelog koda.
Ako ste sve učinili ispravno, Eclipse će prikazati "Test Passed!"
Lociranje GUI elemenata
Lociranje elemenata u WebDriveru vrši se metodom " findElement (By. Locator ()) ". Dio koda "lokator" jednak je bilo kojem od lokatora koji su prethodno razmatrani u poglavljima Selenium IDE ovih vodiča. U stvari, preporučuje se da locirate GUI elemente pomoću IDE-a i nakon što uspješno identificirate izvozite kôd u WebDriver.
Evo uzorka koda Selenium koji locira element prema njegovom id-u. Facebook se koristi kao osnovni URL.
paket noviprojekt;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;javna klasa PG2 {javna statička void glavna (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Upravljački program za WebDriver = novi FirefoxDriver ();String baseUrl = "http://www.facebook.com";Oznaka niza = "";driver.get (baseUrl);tagName = driver.findElement (By.id ("email")). getTagName ();System.out.println (tagName);driver.close ();System.exit (0);}}
Koristili smo metodu getTagName () za izdvajanje naziva oznake određenog elementa čiji je id "e-pošta". Kada se pokrene, ovaj bi kôd trebao moći ispravno prepoznati naziv oznake "input" i ispisat će ga na prozoru Eclipseove konzole.
Sažetak za lociranje elemenata
Varijacija | Opis | Uzorak |
---|---|---|
Po. className | pronalazi elemente na temelju vrijednosti atributa "class" | findElement (By.className ("someClassName")) |
Po. cssSelector | pronalazi elemente na temelju vozačevog osnovnog CSS Selector motora | findElement (By.cssSelector ("input # email")) |
Po. iskaznica | locira elemente prema vrijednosti njihovog atributa "id" | findElement (By.id ("someId")) |
Po. linkText | pronalazi element veze prema točnom tekstu koji prikazuje | findElement (By.linkText ("REGISTRACIJA")) |
Po. Ime | locira elemente vrijednosti atributa "name" | findElement (By.name ("someName")) |
Po. djelomičniLinkText | pronalazi elemente koji sadrže zadani tekst veze | findElement (By.partialLinkText ("REG")) |
Po. tagName | locira elemente prema imenu oznake | findElement (By.tagName ("div")) |
Po. xpath | pronalazi 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" . Razmislite o IDE-u selenijskog koda u nastavku -
U gore navedenom Selenium IDE-u prošao je cijeli test. Međutim, u skripti Selenium WebDriver u nastavku, isti test generirao je 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 da koristimo dugu sintaksu "driver.findElement (By.locator ())" svaki put kada pristupite određenom elementu, mi možemo za njega stvoriti objekt WebElement. Klasa WebElement sadržana je u paketu "org.openqa.selenium. *".
Klik na element
Klik je možda najčešći način interakcije s web elementima . Metoda click () koristi se za simuliranje klikanja bilo kojeg elementa. Sljedeći primjer Selenium Java pokazuje kako je click () korišten za klik na gumb "Prijava" tvrtke Mercury Tours.
Pri upotrebi metode click () morate imati na umu sljedeće.
- Ne uzima nijedan parametar / argument.
- Metoda automatski čeka učitavanje nove stranice, ako je primjenjivo.
- Element na koji se klikne mora biti vidljiv (visina i širina ne smiju biti jednake nuli).
Dobijte naredbe
Naredbe Get dohvaćaju razne važne informacije o stranici / elementu. Evo nekoliko važnih naredbi "get" koje vam moraju biti poznate.
Naredbe | Upotreba |
---|---|
get () Uzorak upotrebe: |
|
getTitle () Primjer upotrebe: |
|
getPageSource () Primjer upotrebe: |
|
getCurrentUrl () Primjer upotrebe: |
|
getText () Primjer upotrebe: |
|
Navigacijske naredbe
Ove vam naredbe omogućuju osvježavanje, ulazak i prebacivanje između različitih web stranica.
navigate (). to () Uzorak upotrebe: |
|
navigate (). refresh () Uzorak upotrebe: |
|
navigate (). back () Uzorak upotrebe: |
|
navigate (). forward () Uzorak upotrebe: |
|
Zatvaranje i napuštanje preglednika Windows
close () Uzorak upotrebe: |
|
quit () Uzorak upotrebe: |
|
Da biste jasno ilustrirali razliku između close () i quit (), pokušajte izvršiti donji kod. Koristi web stranicu koja automatski otvara prozor nakon učitavanja stranice i otvara drugu nakon izlaska.
Primijetite da je zatvoren samo prozor roditeljskog preglednika, a ne i dva skočna prozora.
Ali ako koristite quit (), svi će prozori biti zatvoreni, a ne samo nadređeni. Pokušajte pokrenuti donji kod i primijetit ćete da će se i gornja dva skočna prozora automatski zatvoriti.
paket noviprojekt;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;javna klasa PG3 {javna statička void glavna (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Upravljački program za WebDriver = novi FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // pomoću QUIT-a svi će se prozori zatvoriti}}
Prebacivanje između okvira
Da bismo pristupili GUI elementima u okviru, prvo bismo trebali usmjeriti WebDriver da se prvo usredotoči na okvir ili skočni prozor prije nego što pristupimo elementima u njima. Uzmimo, na primjer, web stranicu http://demo.guru99.com/selenium/deprecated.html
Ova stranica ima 3 okvira čiji su atributi "name" navedeni gore. Želimo pristupiti gore prikazanoj žutom zaokruženoj vezi "Zastarelo". Da bismo to učinili, prvo moramo uputiti WebDriver da se prebaci na okvir "classFrame" pomoću metode "switchTo (). Frame ()" . Atribut okvira koristit ćemo kao parametar za dio "frame ()".
paket noviprojekt;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;javna klasa PG4 {javna statička void glavna (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Upravljački program za WebDriver = novi FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Zastarelo")). click ();driver.close ();}}
Nakon izvršavanja ovog koda, vidjet ćete da je okvir "classFrame" prebačen na stranicu "Zastarjeli API", što znači da je naš kôd uspješno mogao pristupiti poveznici "Zastarjelo".
Prebacivanje između skočnih prozora
WebDriver omogućuje prikazivanje skočnih prozora poput upozorenja, za razliku od Selenium IDE. Da bismo pristupili elementima unutar upozorenja (poput poruke koju sadrži), moramo koristiti metodu "switchTo (). Alert ()" . U donjem kodu koristit ćemo ovu metodu za pristup okviru upozorenja, a zatim ćemo dohvatiti njegovu poruku metodom "getText ()" , a zatim automatski zatvoriti okvir upozorenja pomoću "switchTo (). Alert (). Accept () " metoda.
Prvo idite na http://jsbin.com/usidix/1 i ručno kliknite "Go!" tamo i uvjerite se sami u tekst poruke.
Pogledajmo primjer primjera selena da bismo to učinili -
paket mog paketa;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;javna klasa myclass {javna statička void glavna (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Upravljački program za WebDriver = novi 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 konzoli Eclipse primijetite da je ispisana poruka upozorenja:
Čeka
Dvije su vrste čekanja.
- Implicitno čekanje - koristi se za postavljanje zadanog vremena čekanja tijekom programa
- Eksplicitno čekanje - koristi se za postavljanje vremena čekanja samo za određenu instancu
Implicitno čekanje
- Jednostavnije je kodirati od eksplicitnih čeka.
- Obično se deklarira u instancijskom dijelu koda.
- Za uvoz će vam trebati samo jedan dodatni paket.
Da biste počeli koristiti implicitno čekanje, morat ćete uvesti ovaj paket u svoj kôd.
Zatim u instancijski dio koda dodajte ovo.
Eksplicitno pričekajte
Eksplicitna čekanja obavljaju se pomoću klasa WebDriverWait i ExpectedCondition . Za sljedeći primjer Selenium WebDriver, pričekat ćemo do 10 sekundi da element čiji je id "korisničko ime" postane vidljiv prije nego što prijeđemo na sljedeću naredbu. Evo koraka.
Korak 1
Uvezite ova dva paketa:
Korak 2
Proglasite varijablu WebDriverWait. U ovom ćemo primjeru koristiti "myWaitVar" kao ime varijable.
3. korak
Koristite myWaitVar s ExpectedConditions na dijelovima na kojima trebate izričito pričekati. U ovom ćemo slučaju upotrijebiti eksplicitno čekanje na "korisničko ime" (Mercury Tours HomePage) prije nego što na njega upišemo tekst "tutorial".
Uvjeti
Sljedeće se metode koriste u uvjetnim operacijama i operacijama petlje -
- isEnabled () koristi se kada želite provjeriti je li određeni element omogućen ili ne prije izvršavanja naredbe.
- isDisplayed () koristi se kada želite provjeriti prikazuje li se određeni element prije izvršavanja naredbe.
- isSelected () koristi se kada želite provjeriti je li odabran određeni potvrdni okvir, radio gumb ili opcija u padajućem okviru . Ne djeluje na druge elemente.
Korištenje ExpectedConditions
Klasa ExpectedConditions nudi širi skup uvjeta koje možete koristiti zajedno s metodom WebDriverWait's till ().
Ispod su neke od najčešćih metoda ExpectedConditions.
- alertIsPresent () - čeka dok se ne prikaže okvir upozorenja.
- elementToBeClickable () - Pričeka dok element ne bude vidljiv i istovremeno omogućen. Uzorak selenijskog koda u nastavku pričekat će dok element s postane prvo vidljiv i omogućen prije nego što taj element dodijelite kao varijablu WebElement pod nazivom "txtUserName".
- frameToBeAvailableAndSwitchToIt () - Pričeka dok zadani okvir već bude dostupan, a zatim se automatski prebacuje na njega.
Hvatanje iznimaka
Kada se koristi isEnabled (), isDisplayed () i isSelected (), WebDriver pretpostavlja da element već postoji na stranici. U suprotnom, bacit će NoSuchElementException . Da bismo to izbjegli, trebali bismo upotrijebiti blok try-catch kako program ne bi bio prekinut.
WebElement txtbox_username = driver.findElement (By.id ("korisničko ime"));probati{if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("vodič");}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}
Ako koristite eksplicitna čekanja, vrsta iznimke koju biste trebali uhvatiti je "TimeoutException".
Sažetak
- Da biste počeli koristiti WebDriver API, morate uvesti barem ova dva paketa.
- org.openqa.selenium. *
- org.openqa.selenium.firefox.FirefoxDriver
- Metoda get () ekvivalentna je naredbi "open" programa Selenium IDE.
- Lociranje elemenata u WebDriveru vrši se pomoću metode findElement () .
- Sljedeće su dostupne opcije za pronalaženje elemenata u WebDriveru:
- Po. className
- Po. cssSelector
- Po. iskaznica
- Po. linkText
- Po. Ime
- Po. djelomičniLinkText
- Po. tagName
- Po. xpath
- By.cssSelector () ne podržava značajku "sadrži" .
- Element možete instancirati pomoću klase WebElement .
- Klik na element vrši se uporabom metode click () .
- WebDriver pruža ove korisne naredbe za dobivanje :
- dobiti()
- getTitle ()
- getPageSource ()
- getCurrentUrl ()
- getText ()
- WebDriver pruža ove korisne navigacijske naredbe
- navigate (). forward ()
- navigate (). back ()
- navigate (). to ()
- navigate (). refresh ()
- Metode close () i quit () koriste se za zatvaranje prozora preglednika. Close () koristi se za zatvaranje jednog prozora; dok se quit () koristi za zatvaranje svih prozora povezanih s roditeljskim prozorom kojim je objekt WebDriver upravljao.
- SWITCHTO (). Okvir () i SWITCHTO (). Upozorenja () metode se koriste za usmjeravanje WebDriver usredotočiti na okvir ili obavijesti, respektivno.
- Implicitna čekanja koriste se za postavljanje vremena čekanja tijekom programa, dok se eksplicitna čekanja koriste samo na određenim dijelovima.
- Prilikom provjere stanja elementa možete koristiti metode isEnabled (), isDisplayed (), isSelected () i kombinaciju metoda WebDriverWait i ExpectedConditions . Međutim, oni ne provjeravaju postoji li element.
- Kada je pozvan isEnabled (), isDisplayed () ili isSelected () dok element nije postojao, WebDriver će izbaciti NoSuchElementException .
- Kada su pozvane metode WebDriverWait i ExpectedConditions dok element nije postojao, WebDriver bi bacio TimeoutException .
Bilješka:
driver.get (): Koristi se za odlazak na određeno web mjesto, ali ne održava povijest preglednika i kolačiće, tako da ne možemo koristiti gumb za naprijed i natrag, ako kliknemo na to, stranica neće dobiti raspored
driver.navigate (): koristi se za odlazak na određeno web mjesto, ali održava povijest preglednika i kolačiće, tako da možemo koristiti tipke za naprijed i natrag za navigaciju između stranica tijekom kodiranja Testcasea