Esimene seleeni veebidraiveri skript: JAVA näidiskoodi näide

Lang L: none (table-of-contents):

Anonim

Kasutades Java-klassi "myclass", mille lõime eelmises õpetuses, proovime luua WebDriveri skripti, mis:

  1. tooge Mercury Toursi koduleht
  2. kontrollige selle pealkirja
  3. printige võrdluse tulemus välja
  4. 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:

  1. org.openqa.selenium. * - sisaldab WebDriveri klassi, mis on vajalik konkreetse draiveriga laaditud uue brauseri kiirendamiseks
  2. 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.

  1. Klõpsake Eclipse'i menüüribal käsku Käivita> Käivita.
  2. 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:
  • See avab automaatselt uue brauseriakna ja tõmbab selle sulgudes määratud lehe.
  • See on seleeni IDE käsu "avatud" vaste.
  • Parameeter peab olema String objekt.
getTitle () Proovi kasutamine:
  • Ei vaja parameetreid
  • Toob praeguse lehe pealkirja
  • Esirinnas olevad ja järgnevad tühikud on kärbitud
  • Tagastab tühja stringi, kui lehel pole pealkirja
getPageSource () Proovi kasutamine:
  • Ei vaja parameetreid
  • Tagastab stringi väärtusena lehe lähtekoodi
getCurrentUrl () Proovi kasutamine:
  • Ei vaja parameetreid
  • Toob stringi, mis tähistab praegust URL-i , mida brauser vaatab
getText () Proovi kasutamine:
  • Toob teie määratud elemendi sisemise teksti

Käskudes navigeerimine

Need käsud võimaldavad teil erinevate veebilehtede vahel värskendada, sisse minna ja edasi-tagasi vahetada.

navigeeri (). et () Näidiskasutus:
  • See avab automaatselt uue brauseriakna ja tõmbab selle sulgudes määratud lehe .
  • See teeb täpselt sama mis meetod get ().
navigeeri (). refresh () Näidiskasutus:
  • Ei vaja parameetreid.
  • See värskendab praegust lehte.
navigeeri (). tagasi () Näidiskasutus:
  • Ei vaja parameetreid
  • Viib brauseri ajaloos ühe lehekülje võrra tagasi .
navigeeri (). edasi () Proovi kasutamine:
  • Ei vaja parameetreid
  • Viib brauseri ajaloos ühe lehekülje võrra edasi.

Brauseri Windowsi sulgemine ja sulgemine

sulge () Proovi kasutamine:
  • Ei vaja parameetreid
  • See sulgeb ainult brauseriakna, mida WebDriver praegu juhib .
quit () Proovi kasutamine:
  • Ei vaja parameetreid
  • See sulgeb kõik aknad, mille WebDriver on avanud.

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.

  1. Kaudne ootamine - kasutatakse kogu programmi vaikeaja määramiseks
  2. 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.