Z uporabo razreda Java "myclass", ki smo ga ustvarili v prejšnji vadnici, poskusimo ustvariti skript WebDriver, ki bi:
- prinesi domačo stran Mercury Tours
- preverite njegov naslov
- natisnite rezultat primerjave
- zaprite pred zaključkom celotnega programa.
Koda WebDriver
Spodaj je dejanska koda WebDriver za logiko, predstavljeno v zgornjem scenariju
Opomba: Če zaženete Firefox 35, morate za uporabo spletnega gonilnika uporabiti gonilnik gecko, ki ga je ustvarila Mozilla. Selenium 3.0, gecko in firefox ima težave z združljivostjo in njihova pravilna nastavitev bi lahko postala težka naloga. Če koda ne deluje, jo prenesite na različico Firefox 47 ali starejšo. Skripte lahko zaženete tudi v Chromu. Selen deluje v škatli za Chrome. Spremeniti morate samo tri vrstice kode, da bo vaš skript deloval s Chromom ali Firefoxom
paket newproject;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;// komentiraj zgornjo vrstico in razkomentiraj spodnjo vrstico, če želiš uporabljati Chrome// uvoz org.openqa.selenium.chrome.ChromeDriver;javni razred PG1 {public static void main (String [] args) {// deklaracija in instanciranje objektov / spremenljivkSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Gonilnik WebDriver = novi FirefoxDriver ();// komentiraj zgornji dve vrstici in komentiraj pod dvema vrsticama, če želiš uporabljati Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// gonilnik WebDriver = nov ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";String očekujeTitle = "Dobrodošli: Mercury Tours";String actualTitle = "";// zaženimo Fire fox in ga usmerimo na osnovni URLdriver.get (baseUrl);// dobimo dejansko vrednost naslovaactualTitle = driver.getTitle ();/ ** primerjajte dejanski naslov strani s pričakovanim in natisnite* rezultat kot "uspešno opravljen" ali "neuspešen"* /če (actualTitle.contentEquals (pričakovanTitle)) {System.out.println ("Test je opravljen!");} še {System.out.println ("Test ni uspel");}// zapremo Fire foxdriver.close ();}}
Pojasnilo kode
Uvoz paketov
Za začetek morate uvoziti naslednja dva paketa:
- org.openqa.selenium. * - vsebuje razred WebDriver, potreben za instanciranje novega brskalnika, naloženega z določenim gonilnikom
- org.openqa.selenium.firefox.FirefoxDriver - vsebuje razred FirefoxDriver, potreben za instanciranje gonilnika, specifičnega za Firefox, v brskalnik, ki ga ustvari razred WebDriver
Če vaš test potrebuje bolj zapletena dejanja, kot je dostop do drugega razreda, posnetek zaslona brskalnika ali manipulacija z zunanjimi datotekami, boste zagotovo morali uvoziti več paketov.
Instanciranje predmetov in spremenljivk
Običajno se tako ustvari objekt gonilnika.
Razred FirefoxDriver brez parametrov pomeni, da bo privzeti profil Firefox zagnal naš program Java. Privzeti profil Firefox je podoben zagonu Firefoxa v varnem načinu (razširitve niso naložene).
Za lažje smo osnovni URL in pričakovani naslov shranili kot spremenljivki.
Zagon seje brskalnika
Metoda get () WebDriverja se uporablja za zagon nove seje brskalnika in jo usmeri na URL, ki ste ga določili kot njegov parameter.
Pridobite dejanski naslov strani
Razred WebDriver ima metodo getTitle (), ki se vedno uporablja za pridobitev naslova strani trenutno naložene strani.
Primerjajte pričakovane in dejanske vrednosti
Ta del kode preprosto uporablja osnovno strukturo Java if-else za primerjavo dejanskega naslova s pričakovanim.
Prekinitev seje brskalnika
Za zapiranje okna brskalnika se uporablja metoda " close () ".
Ukinitev celotnega programa
Če uporabite ta ukaz, ne da bi prej zaprli vsa okna brskalnika, se bo celoten program Java končal, medtem ko bo okno brskalnika ostalo odprto.
Izvajanje testa
Obstajata dva načina za izvajanje kode v Eclipse IDE.
- V menijski vrstici Eclipse kliknite Zaženi> Zaženi.
- Pritisnite Ctrl + F11, da zaženete celotno kodo.
Če ste vse naredili pravilno, bo Eclipse izpisal "Test Passed!"
Iskanje elementov GUI
Iskanje elementov v WebDriverju poteka z uporabo metode " findElement (By. Locator ()) ". Del kode "lokator" je enak kateremu koli od lokatorjev, o katerih smo že razpravljali v poglavjih Selenium IDE v teh vadnicah. Dejansko je priporočljivo, da poiščete elemente grafičnega uporabniškega vmesnika s pomočjo IDE in ko uspešno identificirate, izvozite kodo v WebDriver.
Tu je vzorčna koda Selenium, ki poišče element po njegovem id. Facebook se uporablja kot osnovni URL.
paket newproject;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;javni razred PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Gonilnik 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);}}
Z metodo getTagName () smo izvlekli ime oznake določenega elementa, katerega id je "email". Ob zagonu mora biti ta koda sposobna pravilno prepoznati ime oznake "input" in jo bo natisnila v okno konzole Eclipse.
Povzetek za iskanje elementov
Sprememba | Opis | Vzorec |
---|---|---|
Avtor. className | najde elemente na podlagi vrednosti atributa "class" | findElement (By.className ("someClassName")) |
Avtor. cssSelector | najde elemente na podlagi voznikovega osnovnega motorja CSS Selector | findElement (By.cssSelector ("input # email")) |
Avtor. id | poišče elemente po vrednosti njihovega atributa "id" | findElement (By.id ("someId")) |
Avtor. linkText | najde element povezave po natančnem besedilu, ki ga prikaže | findElement (By.linkText ("REGISTRACIJA")) |
Avtor. ime | poišče elemente po vrednosti atributa "name" | findElement (By.name ("someName")) |
Avtor. delnoLinkText | poišče elemente, ki vsebujejo dano besedilo povezave | findElement (By.partialLinkText ("REG")) |
Avtor. tagName | poišče elemente po imenu oznake | findElement (By.tagName ("div")) |
Avtor. xpath | poišče elemente prek XPath | 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] ")) |
Opomba o uporabi findElement (By.cssSelector ())
By.cssSelector () ne podpira funkcije "vsebuje" . Upoštevajte spodnjo kodo IDE Selenium -
V zgoraj navedenem IDE-ju Selenium je celoten test opravil. Vendar pa je v spodnjem skriptu Selenium WebDriver isti test ustvaril napako, ker WebDriver ne podpira ključne besede "vsebuje", kadar se uporablja v metodi By.cssSelector ().
Skupni ukazi
Prenos spletnih elementov
Namesto da uporabimo dolgo sintakso "driver.findElement (By.locator ())" vsakič, ko dostopate do določenega elementa, lahko zanj ustvarimo objekt WebElement. Razred WebElement je vsebovan v paketu "org.openqa.selenium. *".
Klik na element
Klik je morda najpogostejši način interakcije s spletnimi elementi . Način click () se uporablja za simulacijo klika katerega koli elementa. Naslednji primer selenium Java prikazuje, kako je bil klik () uporabljen za klik gumba Mercury Tours "Prijava".
Pri uporabi metode click () je treba upoštevati naslednje stvari.
- Ne potrebuje nobenega parametra / argumenta.
- Metoda samodejno čaka, da se naloži nova stran, če je primerno.
- Element, na katerega želite klikniti, mora biti viden (višina in širina ne smeta biti enaki nič).
Pridobite ukaze
Ukazi Get pridobijo različne pomembne informacije o strani / elementu. Tu je nekaj pomembnih ukazov "get", ki jih morate poznati.
Ukazi | Uporaba |
---|---|
get () Vzorec uporabe: |
|
getTitle () Vzorec uporabe: |
|
getPageSource () Vzorec uporabe: |
|
getCurrentUrl () Vzorec uporabe: |
|
getText () Vzorec uporabe: |
|
Krmarite po ukazih
Ti ukazi vam omogočajo osvežitev, vstop in preklapljanje med različnimi spletnimi stranmi.
navigate (). do () Vzorec uporabe: |
|
navigate (). refresh () Vzorec uporabe: |
|
navigate (). back () Vzorec uporabe: |
|
navigate (). forward () Vzorec uporabe: |
|
Zapiranje in zapiranje brskalnika Windows
close () Vzorec uporabe: |
|
quit () Vzorec uporabe: |
|
Če želite nazorno ponazoriti razliko med close () in quit (), poskusite izvesti spodnjo kodo. Uporablja spletno stran, ki samodejno odpre okno ob nalaganju strani in po izhodu odpre drugo.
Upoštevajte, da je bilo zaprto le okno nadrejenega brskalnika in ne dve pojavni okni.
Če pa uporabite quit (), bodo zaprta vsa okna - ne le nadrejena. Poskusite zagnati spodnjo kodo in opazili boste, da se bosta tudi zgornja pojavna okna samodejno zaprli.
paket newproject;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;javni razred PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Gonilnik WebDriver = novi FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // z uporabo QUIT se bodo vsa okna zaprla}}
Preklapljanje med okvirji
Za dostop do elementov GUI v okvirju moramo najprej usmeriti WebDriver, da se najprej osredotoči na okvir ali pojavno okno, preden lahko dostopamo do elementov v njih. Vzemimo na primer spletno stran http://demo.guru99.com/selenium/deprecated.html
Na tej strani so 3 okviri, katerih atributi "name" so navedeni zgoraj. Želimo dostopati do zgornje rumeno obkrožene povezave "Zastarelo". Da bi to naredili, moramo WebDriverju najprej naročiti, naj s pomočjo metode "switchTo (). Frame ()" preklopi na okvir "classFrame" . Kot parameter za del "frame ()" bomo uporabili atribut name okvirja.
paket newproject;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;javni razred PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Gonilnik WebDriver = novi FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Zastarelo")). click ();driver.close ();}}
Po izvedbi te kode boste videli, da se okvir "classFrame" preusmeri na stran "Zastareli API", kar pomeni, da je naša koda uspešno lahko dostopala do povezave "Zastarelo".
Preklapljanje med pojavnimi okni
WebDriver omogoča prikaz pojavnih oken, kot so opozorila, v nasprotju s programom Selenium IDE. Za dostop do elementov v opozorilu (na primer do sporočila, ki ga vsebuje) moramo uporabiti metodo "switchTo (). Alert ()" . V spodnji kodi bomo s to metodo dostopali do opozorilnega polja in nato z metodo "getText ()" pridobili njegovo sporočilo , nato pa samodejno zaprli opozorilno polje s pomočjo "switchTo (). Alert (). Accept () " metoda.
Najprej pojdite na http://jsbin.com/usidix/1 in ročno kliknite »Pojdi!« in si oglejte besedilo sporočila.
Oglejmo si primer kode Selenium za to -
paket mojega paketa;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;javni razred myclass {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Gonilnik 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 opazite, da je natisnjeno opozorilno sporočilo:
Čaka
Obstajata dve vrsti čakanja.
- Implicitno čakanje - uporablja se za nastavitev privzetega čakalnega časa v celotnem programu
- Izrecno čakanje - uporablja se za nastavitev čakalnega časa samo za določen primerek
Implicitno počakajte
- Kodiranje je preprostejše kot eksplicitno čakanje.
- Običajno je naveden v instancijskem delu kode.
- Za uvoz boste potrebovali le en dodaten paket.
Če želite začeti uporabljati implicitno čakanje, morate ta paket uvoziti v kodo.
Nato v instancijskem delu kode dodajte to.
Izrecno počakajte
Izrecna čakanja se izvedejo z uporabo razredov WebDriverWait in ExpectedCondition . Za naslednji primer Selenium WebDriver bomo počakali do 10 sekund, da bo element, katerega id je "uporabniško ime", viden, preden nadaljujemo z naslednjim ukazom. Tu so koraki.
Korak 1
Uvozi ta dva paketa:
2. korak
Navedite spremenljivko WebDriverWait. V tem primeru bomo kot ime spremenljivke uporabili "myWaitVar".
3. korak
Uporabite myWaitVar z ExpectedConditions na delih, kjer potrebujete izrecno čakanje. V tem primeru bomo uporabili izrecno čakanje na vnos "uporabniško ime" (Mercury Tours HomePage), preden vanj vtipkamo besedilo "tutorial".
Pogoji
Pri pogojnih operacijah in ciklih se uporabljajo naslednje metode -
- isEnabled () se uporablja, kadar želite pred izvajanjem ukaza preveriti, ali je določen element omogočen ali ne.
- isDisplayed () se uporablja, kadar želite pred izvajanjem ukaza preveriti, ali je določen element prikazan ali ne.
- isSelected () se uporablja, ko želite preveriti, ali je v spustnem polju izbrano določeno potrditveno polje, izbirni gumb ali možnost . Pri drugih elementih ne deluje.
Uporaba pričakovanih pogojev
Razred ExpectedConditions ponuja širši nabor pogojev, ki jih lahko uporabite skupaj z metodo WebDriverWait's till ().
Spodaj je nekaj najpogostejših metod ExpectedConditions.
- alertIsPresent () - počaka, dokler se ne prikaže opozorilno polje.
- elementToBeClickable () - Počaka, da je element viden in hkrati omogočen. Spodnji vzorec kode selena bo počakal, da bo element s najprej viden in omogočen, preden bo elementu dodelil spremenljivko WebElement z imenom "txtUserName".
- frameToBeAvailableAndSwitchToIt () - Počaka, da je določen okvir že na voljo, in se nato samodejno preklopi nanj.
Ulov izjem
Pri uporabi isEnabled (), isDisplayed () in isSelected () WebDriver predpostavlja, da element že obstaja na strani. V nasprotnem primeru bo vrgel NoSuchElementException . Da bi se temu izognili, moramo uporabiti blok try-catch, da program ne bo prekinjen.
WebElement txtbox_username = driver.findElement (By.id ("uporabniško ime"));poskusite {if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("vadnica");}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}
Če uporabljate eksplicitna čakanja, je izjema, ki jo morate ujeti, "TimeoutException".
Povzetek
- Če želite začeti uporabljati API WebDriver, morate uvoziti vsaj ta dva paketa.
- org.openqa.selenium. *
- org.openqa.selenium.firefox.FirefoxDriver
- Metoda get () je enakovredna ukazu "odpri" IDE programa Selenium.
- Iskanje elementov v WebDriverju poteka z uporabo metode findElement () .
- Spodaj so na voljo možnosti za iskanje elementov v WebDriverju:
- Avtor. className
- Avtor. cssSelector
- Avtor. id
- Avtor. linkText
- Avtor. ime
- Avtor. delnoLinkText
- Avtor. tagName
- Avtor. xpath
- By.cssSelector () ne podpira funkcije "vsebuje" .
- Element lahko ustvarite z uporabo razreda WebElement .
- Klik na element se izvede z uporabo metode click () .
- WebDriver ponuja te koristne ukaze za pridobivanje :
- dobili ()
- getTitle ()
- getPageSource ()
- getCurrentUrl ()
- getText ()
- WebDriver ponuja te uporabne navigacijske ukaze
- navigate (). naprej ()
- navigate (). nazaj ()
- navigate (). do ()
- navigate (). refresh ()
- Metodi close () in quit () se uporabljata za zapiranje oken brskalnika. Close () se uporablja za zapiranje enega samega okna; medtem ko se quit () uporablja za zapiranje vseh oken, povezanih s starševskim oknom, ki ga je nadziral objekt WebDriver.
- SWITCHTO (). Okvir () in SWITCHTO (). Alert () metode, ki se uporabljajo za poudarek neposrednega WebDriver je na okvir ali razpis ukrepa, oz.
- Implicitna čakanja se uporabljajo za nastavitev čakalnega časa v celotnem programu, eksplicitna čakanja pa samo na določenih delih.
- Pri preverjanju stanja elementa lahko uporabite metode isEnabled (), isDisplayed (), isSelected () in kombinacijo metod WebDriverWait in ExpectedConditions . Ne preverijo pa, ali element ne obstaja.
- Ko je klican isEnabled (), isDisplayed () ali isSelected (), medtem ko element ni obstajal, bo WebDriver vrgel NoSuchElementException .
- Ko sta bili klicani metodi WebDriverWait in ExpectedConditions, medtem ko element še ni obstajal, bi WebDriver vrgel TimeoutException .
Opomba:
driver.get (): Uporablja se za obisk določenega spletnega mesta, vendar ne vzdržuje zgodovine brskalnika in piškotkov, zato ne moremo uporabiti gumba naprej in nazaj, če kliknemo na to, stran ne bo dobila urnika
driver.navigate (): uporablja se za obisk določenega spletnega mesta, vendar ohranja zgodovino brskalnika in piškotke, tako da lahko med kodiranjem strani med kodiranjem Testcase uporabljamo gumb za naprej in nazaj.