Prva skripta za selenov webdriver: Primjer JAVA uzorka koda

Sadržaj:

Anonim

Koristeći Java klasu "myclass" koju smo kreirali u prethodnom vodiču, pokušajmo stvoriti WebDriver skriptu koja bi:

  1. dohvatiti početnu stranicu Mercury Toursa
  2. provjeriti njegov naslov
  3. ispišite rezultat usporedbe
  4. 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:

  1. org.openqa.selenium. * - sadrži klasu WebDriver potrebnu za instanciranje novog preglednika učitan s određenim upravljačkim programom
  2. 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.

  1. Na traci izbornika Eclipsea kliknite Run> Run.
  2. 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:
  • Automatski otvara novi prozor preglednika i dohvaća stranicu koju navedete u zagradama.
  • To je pandan naredbe "open" programa Selenium IDE.
  • Parametar mora biti objekt String .
getTitle () Primjer upotrebe:
  • Ne treba parametre
  • Dohvaća naslov trenutne stranice
  • Vodeći i prateći razmaci su obrezani
  • Vraća null niz ako stranica nema naslov
getPageSource () Primjer upotrebe:
  • Ne treba parametre
  • Vraća izvorni kod stranice kao vrijednost Stringa
getCurrentUrl () Primjer upotrebe:
  • Ne treba parametre
  • Dohvaća niz koji predstavlja trenutni URL koji preglednik gleda
getText () Primjer upotrebe:
  • Dohvaća unutarnji tekst elementa koji ste naveli

Navigacijske naredbe

Ove vam naredbe omogućuju osvježavanje, ulazak i prebacivanje između različitih web stranica.

navigate (). to () Uzorak upotrebe:
  • Automatski otvara novi prozor preglednika i dohvaća stranicu koju navedete u zagradama.
  • Radi točno isto što i metoda get ().
navigate (). refresh () Uzorak upotrebe:
  • Ne treba parametre.
  • Ona osvježava trenutnu stranicu.
navigate (). back () Uzorak upotrebe:
  • Ne treba parametre
  • Vrati vas za jednu stranicu povijesti preglednika.
navigate (). forward () Uzorak upotrebe:
  • Ne treba parametre
  • Vodi vas za jednu stranicu povijesti pretraživača.

Zatvaranje i napuštanje preglednika Windows

close () Uzorak upotrebe:
  • Ne treba parametre
  • Zatvara samo prozor preglednika koji WebDriver trenutno kontrolira .
quit () Uzorak upotrebe:
  • Ne treba parametre
  • Zatvara sve prozore koje je otvorio WebDriver.

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.

  1. Implicitno čekanje - koristi se za postavljanje zadanog vremena čekanja tijekom programa
  2. 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