Kasutades Java-klassi "myclass", mille lõime eelmises õpetuses, proovime luua WebDriveri skripti, mis:
- tooge Mercury Toursi koduleht
- kontrollige selle pealkirja
- printige võrdluse tulemus välja
- enne kogu programmi lõpetamist sulgege see.
Veebidraiveri kood
Allpool on ülaltoodud stsenaariumi esitatud loogika tegelik WebDriveri kood
Märkus. Firefox 35 käivitamisel peate veebidraiveri kasutamiseks kasutama Mozilla loodud geko draiverit. Selenium 3.0, gecko ja Firefoxil on ühilduvusprobleeme ja nende õige seadistamine võib saada ülesmäge. Kui kood ei tööta, minge üle Firefoxi versioonile 47 või vanemale versioonile. Teise võimalusena saate skripte Chrome'is käivitada. Seleen töötab Chrome'i jaoks karbist välja. Skripti Chrome'i või Firefoxiga töötamiseks peate lihtsalt muutma 3 koodirida
pakett uusprojekt;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// kommenteerige ülaltoodud rida ja kommenteerige rida all, et Chrome'i kasutada// import org.openqa.selenium.chrome.ChromeDriver;avalik klass PG1 {public staatiline void main (String [] args) {// objektide / muutujate deklaratsioon ja eksemplarSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriveri draiver = uus FirefoxDriver ();// kommenteerige Chrome'i kasutamiseks ülaltoodud kahte rida ja kommenteerige alla kahe rea//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// WebDriveri draiver = uus ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";String eeldatavTitle = "Tere tulemast: Merkuuri tuurid";String actualTitle = "";// käivitage Fire fox ja suunake see baasi URL-iledraiver.get (baseUrl);// saada pealkirja tegelik väärtusactualTitle = draiver.getTitle ();/ ** võrrelge lehe tegelikku pealkirja oodatuga ja printige* tulemus on "lubatud" või "ebaõnnestunud"* /if (actualTitle.contentEquals (eeldatavTitle)) {System.out.println ("Test läbitud!");} veel {System.out.println ("Test nurjus");}// sulge Tulerebanejuht.sule ();}}
Koodi selgitamine
Pakettide importimine
Alustamiseks peate importima järgmised kaks paketti:
- org.openqa.selenium. * - sisaldab WebDriveri klassi, mis on vajalik konkreetse draiveriga laaditud uue brauseri kiirendamiseks
- org.openqa.selenium.firefox.FirefoxDriver - sisaldab klassi FirefoxDriver, mis on vajalik Firefox-spetsiifilise draiveri kiirendamiseks brauserisse, mille on kiirendanud WebDriver-klass
Kui teie test vajab keerukamaid toiminguid, näiteks teise klassi juurdepääs, brauseri ekraanipiltide tegemine või väliste failidega manipuleerimine, peate kindlasti rohkem pakette importima.
Objektide ja muutujate esilekutsumine
Tavaliselt on see, kuidas draiveri objekt instantiseeritakse.
Parameetriteta klass FirefoxDriver tähendab, et Firefoxi vaikeprofiili käivitab meie Java-programm. Firefoxi vaikeprofiil sarnaneb Firefoxi käivitamisega turvarežiimis (ühtegi laiendust ei laadita).
Mugavuse huvides salvestasime muutujana põhi-URL-i ja eeldatava pealkirja.
Brauseriseansi käivitamine
WebDriveri meetodit get () kasutatakse uue brauseriseansi käivitamiseks ja see suunatakse URL-ile, mille määrate selle parameetriks.
Hankige tegeliku lehe pealkiri
Klassis WebDriver on meetod getTitle (), mida kasutatakse alati praegu laaditud lehe lehe pealkirja saamiseks.
Võrrelge eeldatavaid ja tegelikke väärtusi
See koodi osa kasutab lihtsalt Java if-else struktuuri, et võrrelda tegelikku pealkirja oodatava nimega.
Brauseriseansi lõpetamine
Brauseriakna sulgemiseks kasutatakse meetodit " close () ".
Kogu programmi lõpetamine
Kui kasutate seda käsku enne kõiki brauseriaknaid sulgemata, lõpeb kogu teie Java-programm, jättes brauseriakna avatuks.
Testi sooritamine
Eclipse IDE-s on koodi täitmiseks kaks võimalust.
- Klõpsake Eclipse'i menüüribal käsku Käivita> Käivita.
- Kogu koodi käivitamiseks vajutage klahvikombinatsiooni Ctrl + F11 .
Kui teeksite kõik õigesti, väljastaks Eclipse "Test edukalt!"
GUI elementide leidmine
Elementide leidmine WebDriveris toimub meetodi " findElement (By. Locator ()) " abil. Koodi osa "locator" on sama, mis mis tahes nende lokaatorite puhul, mida on nende õpetuste Seleeni IDE peatükkides varem käsitletud. Tegelikult on soovitatav leida GUI-elemendid IDE-ga ja kui see on edukalt tuvastatud, eksportige kood WebDriveri.
Siin on seleeni näidiskood, mis otsib elemendi ID järgi. Facebooki kasutatakse põhi-URL-ina.
pakett uusprojekt;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;avalik klass PG2 {public staatiline void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriveri draiver = uus FirefoxDriver ();String baseUrl = "http://www.facebook.com";String tagName = "";draiver.get (baseUrl);tagName = driver.findElement (By.id ("email")). getTagName ();System.out.println (tagName);juht.sule ();System.exit (0);}}
Selle konkreetse elemendi sildi nime väljavõtmiseks kasutasime meetodit getTagName (), mille ID on "email". Käivitamisel peaks see kood suutma sildi nime "sisend" õigesti tuvastada ja printib selle Eclipse'i konsooli aknasse.
Elementide asukoha kokkuvõte
Variatsioon | Kirjeldus | Proov |
---|---|---|
Kõrval. klassiNimi | leiab elemente atribuudi "klass" põhjal | findElement (By.className ("someClassName")) |
Kõrval. cssSelector | leiab elemendid juhi CSS Selectori mootori põhjal | findElement (By.cssSelector ("sisend # e-post")) |
Kõrval. id | otsib elemendid atribuudi "id" väärtuse järgi | findElement (By.id ("someId")) |
Kõrval. linkText | leiab lingi elemendi täpselt kuvatava teksti järgi | findElement (By.linkText ("REGISTREERIMINE")) |
Kõrval. nimi | otsib elemendid atribuudi "nimi" väärtuse järgi | findElement (By.name ("mingiNimi")) |
Kõrval. osaline linkText | otsib elemendid, mis sisaldavad antud lingiteksti | findElement (By.partialLinkText ("REG")) |
Kõrval. tagName | otsib elemendid nende sildi nime järgi | findElement (By.tagName ("div")) |
Kõrval. xpath | otsib elemente XPathi kaudu | 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] ")) |
Märkus findElementi kasutamise kohta (By.cssSelector ())
By.cssSelector () ei toeta funktsiooni "sisaldab" . Mõelge allpool olevale seleeni IDE koodile -
Ülaltoodud seleeni IDE-s läbis kogu testi. Allpool olevas Selenium WebDriveri skriptis tekitas sama test vea, kuna WebDriver ei toeta meetodit By.cssSelector () kasutamisel märksõna "sisaldab".
Ühised käsud
Veebielementide käivitamine
Selle asemel, et kasutada pika süntaksit "driver.findElement (By.locator ())" iga kord, kui pääsete juurde konkreetsele elemendile, saame selle jaoks luua WebElementi objekti. WebElementi klass sisaldub paketis "org.openqa.selenium. *".
Klõps elemendil
Klõpsamine on võib-olla kõige levinum viis veebielementidega suhtlemiseks . Click () meetodit kasutatakse mis tahes elemendi klõpsamise simuleerimiseks. Järgmine seleen Java näide näitab, kuidas klõpsuga () klõpsati Mercury Toursi nupul "Logi sisse".
Click () meetodi kasutamisel tuleb märkida järgmised asjad.
- See ei võta ühtegi parameetrit / argumenti.
- Meetod ootab vajaduse korral automaatselt uue lehe laadimist .
- Klõpsatav element peab olema nähtav (kõrgus ja laius ei tohi olla võrdsed nulliga).
Hankige käsud
Hankige käske, et tuua mitmesugust olulist teavet lehe / elemendi kohta. Siin on mõned olulised käsud, mida peate tundma.
Käsud | Kasutamine |
---|---|
get () Proovi kasutamine: |
|
getTitle () Proovi kasutamine: |
|
getPageSource () Proovi kasutamine: |
|
getCurrentUrl () Proovi kasutamine: |
|
getText () Proovi kasutamine: |
|
Käskudes navigeerimine
Need käsud võimaldavad teil erinevate veebilehtede vahel värskendada, sisse minna ja edasi-tagasi vahetada.
navigeeri (). et () Näidiskasutus: |
|
navigeeri (). refresh () Näidiskasutus: |
|
navigeeri (). tagasi () Näidiskasutus: |
|
navigeeri (). edasi () Proovi kasutamine: |
|
Brauseri Windowsi sulgemine ja sulgemine
sulge () Proovi kasutamine: |
|
quit () Proovi kasutamine: |
|
Sulgemise () ja lõpetamise () erinevuse selgeks illustreerimiseks proovige täita allolev kood. See kasutab veebisaiti, mis avab lehe laadimisel automaatselt akna ja avab pärast väljumist teise.
Pange tähele, et suleti ainult vanema brauseri aken, mitte kaks hüpikakent.
Kuid kui kasutate quit (), suletakse kõik aknad - mitte ainult vanem. Proovige käivitada allolev kood ja märkate, et ka kaks ülaltoodud hüpikut suletakse automaatselt.
pakett uusprojekt;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;avalik klass PG3 {public staatiline void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriveri draiver = uus FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");juht.ulge (); // QUIT abil sulgevad kõik aknad}}
Raamide vahetamine
Raamis olevate GUI-elementide juurde pääsemiseks peaksime kõigepealt suunama WebDriveri keskenduma kaadrile või hüpikaknale, enne kui saame nendes olevatele elementidele juurde pääseda. Võtame näiteks veebilehe http://demo.guru99.com/selenium/deprecated.html
Sellel lehel on 3 kaadrit, mille atribuudid "nimi" on näidatud eespool. Soovime juurde pääseda ülal kollasega ümbritsetud lingile "Vananenud". Selleks peame kõigepealt WebDriveri ülesandeks lülituma raamile "classFrame", kasutades meetodit "switchTo (). Frame ()" . Osa "frame ()" parameetriks kasutame raami atribuuti name.
pakett uusprojekt;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;avalik klass PG4 {public staatiline void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriveri draiver = uus FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Vananenud")). klõpsake ();juht.sule ();}}
Pärast selle koodi käivitamist näete, et raam "classFrame" viiakse lehele "Vananenud API", mis tähendab, et meie kood pääses edukalt lingile "Vananenud".
Hüpikakende vahel vahetamine
WebDriver võimaldab erinevalt Selenium IDE-st kuvada hüpikaknaid nagu teateid. Hoiatuse elementidele (näiteks selles sisalduvale sõnumile) juurde pääsemiseks peame kasutama meetodit "switchTo (). Alert ()" . Allolevas koodis kasutame seda meetodit hoiatuskasti juurde pääsemiseks ja seejärel selle sõnumi allalaadimiseks meetodi "getText ()" abil ning seejärel sulgege automaatselt hoiatuskast, kasutades "switchTo (). Alert (). Accept () " meetod.
Kõigepealt minge aadressile http://jsbin.com/usidix/1 ja klõpsake käsitsi nuppu "Mine!" nuppu seal ja veenduge ise sõnumi tekstis.
Vaatame selleks seleeni näidiskoodi -
pakkida minu pakett;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;avaliku klassi myclass {public staatiline void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriveri draiver = uus FirefoxDriver ();String alertMessage = "";driver.get ("http://jsbin.com/usidix/1");draiver.findElement (By.cssSelector ("sisend [väärtus = \" Mine! \ "]")). klõpsake ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);juht.ulge ();}}
Pange tähele Eclipse'i konsoolis, et trükitud hoiatusteade on:
Ootab
Ootusi on kahte tüüpi.
- Kaudne ootamine - kasutatakse kogu programmi vaikeaja määramiseks
- Selgesõnaline ootamine - kasutatakse ooteaja määramiseks ainult konkreetse eksemplari jaoks
Kaudne ootamine
- Kodeerimine on lihtsam kui eksplitsiitsed ootused.
- Tavaliselt deklareeritakse see koodi eksemplari osas.
- Importimiseks vajate ainult ühte täiendavat paketti.
Kaudse ootamise kasutamise alustamiseks peate selle paketi oma koodi importima.
Seejärel lisage see oma koodi kohendamise osale.
Selgesõnaline ootamine
Selgesõnaline ootamine toimub klasside WebDriverWait ja ExpectedCondition abil . Järgmise Selenium WebDriveri näite puhul ootame enne järgmise käsu juurde liikumist kuni 10 sekundit, kuni element, mille ID on "kasutajanimi", nähtavaks saab. Siin on sammud.
Samm 1
Importige need kaks paketti:
2. samm
Deklareerige muutuja WebDriverWait. Selles näites kasutame muutuja nimeks "myWaitVar".
3. samm
Kasutage myWaitVari koos ExpectedConditionsiga osades, kus vajate selget ootamist. Sel juhul kasutame sisendit "kasutajanimi" (Mercury Tours HomePage) selgesõnalist ootamist, enne kui sisestame sellele teksti "õpetus".
Tingimused
Tingimuslikes ja silmusoperatsioonides kasutatakse järgmisi meetodeid -
- isEnabled () kasutatakse juhul, kui soovite enne käsu käivitamist kontrollida, kas teatud element on lubatud või mitte.
- isDisplayed () kasutatakse juhul, kui soovite enne käsu täitmist kontrollida, kas teatud element on kuvatud või mitte.
- isSelected () kasutatakse siis, kui soovite kontrollida, kas rippmenüüs on valitud teatud märkeruut, raadionupp või suvand . See ei tööta teiste elementidega.
Oodatud tingimuste kasutamine
Klass ExpectedConditions pakub laiemat tingimuste komplekti, mida saate kasutada koos meetodiga WebDriverWait's (().
Allpool on mõned levinumad meetodid ExpectedConditions.
- alertIsPresent () - ootab, kuni kuvatakse hoiatuskast.
- elementToBeClickable () - ootab, kuni element on nähtav ja samal ajal lubatud. Allpool toodud seleenikoodi näidis ootab enne, kui see element WebElementi muutujaks nimega "txtUserName", kuni see nähtavaks muutub ja lubatakse.
- frameToBeAvailableAndSwitchToIt () - ootab, kuni antud raam on juba saadaval, ja lülitub seejärel automaatselt sellele ümber.
Erandite püüdmine
IsEnabled (), isDisplayed () ja isSelected () kasutamisel eeldab WebDriver, et element on lehel juba olemas. Vastasel juhul loob see NoSuchElementExceptioni . Selle vältimiseks peaksime kasutama proovimise püüdmise plokki, et programm ei katkeks.
WebElement txtbox_username = draiver.findElement (By.id ("kasutajanimi"));proovige {if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("õpetus");}}saak (NoSuchElementException nsee) {System.out.println (nsee.toString ());}
Kui kasutate selgesõnalist ootamist, peaksite püüdma erandi tüübi "TimeoutException".
Kokkuvõte
- WebDriveri API kasutamise alustamiseks peate importima vähemalt need kaks paketti.
- org.openqa.selenium. *
- org.openqa.selenium.firefox.FirefoxDriver
- Meetod get () on samaväärne seleeni IDE käsuga "avatud".
- Elementide leidmine WebDriveris toimub meetodi findElement () abil.
- WebDriveris elementide leidmiseks on saadaval järgmised valikud:
- Kõrval. klassiNimi
- Kõrval. cssSelector
- Kõrval. id
- Kõrval. linkText
- Kõrval. nimi
- Kõrval. osaline linkText
- Kõrval. tagName
- Kõrval. xpath
- By.cssSelector () ei toeta funktsiooni "sisaldab" .
- Elemendi saate kiireks muuta WebElementi klassi abil.
- Elemendi klõpsamine toimub meetodi click () abil.
- WebDriver pakub järgmisi kasulikke käske :
- saada ()
- getTitle ()
- getPageSource ()
- getCurrentUrl ()
- getText ()
- WebDriver pakub neid kasulikke navigeerimiskäske
- navigeeri (). edasi ()
- navigeeri (). tagasi ()
- navigeeri (). kuni ()
- navigeeri (). värskenda ()
- Brauseriakende sulgemiseks kasutatakse sulgemis- () ja quit () -meetodeid. Sule () kasutatakse ühe akna sulgemiseks; samas kui quit () kasutatakse kõigi vanemaknaga seotud akende sulgemiseks, mida WebDriveri objekt kontrollis.
- SWITCHTO (). Raam () ja SWITCHTO (). Alert () meetodeid kasutatakse otsese WebDriver fookuse peale raami või teade vastavalt.
- Kaudset ootamist kasutatakse ooteaja määramiseks kogu programmis, selgesõnalist ootamist aga ainult teatud osade puhul.
- Elemendi oleku kontrollimisel võite kasutada meetodit isEnabled (), isDisplayed (), isSelected () ja kombinatsiooni WebDriverWait ja ExpectedConditions . Kuid nad ei kontrolli, kas elementi pole olemas.
- Kui isEnabled (), isDisplayed () või isSelected () kutsuti, kui elementi ei olnud olemas, viskab WebDriver NoSuchElementExceptioni .
- Kui kutsuti meetodeid WebDriverWait ja ExpectedConditions, kui elementi ei olnud, viskaks WebDriver TimeoutExceptioni .
Märge:
driver.get (): Seda kasutatakse konkreetsele veebisaidile minemiseks, kuid see ei hoia brauseri ajalugu ja küpsiseid, nii et me ei saa kasutada nuppu edasi ja tagasi, kui sellel klõpsame, ei saa leht ajakava
driver.navigate (): seda kasutatakse konkreetsele veebisaidile minemiseks, kuid see säilitab brauseri ajaloo ja küpsised, nii et me saame kasutada Testcase'i kodeerimise ajal lehtede vahel navigeerimiseks nuppu edasi ja tagasi.