Ensimmäinen seleenin Webdriver-komentosarja: JAVA-esimerkkikoodiesimerkki

Sisällysluettelo:

Anonim

Yritetään luoda edellisessä opetusohjelmassa luomamme Java-luokan "myclass" avulla WebDriver-komentosarja, joka:

  1. hae Mercury Toursin kotisivu
  2. varmista sen nimi
  3. tulosta vertailun tulos
  4. sulje se ennen koko ohjelman lopettamista.

WebDriver-koodi

Alla on yllä olevan skenaarion esittämän logiikan todellinen WebDriver-koodi

Huomautus: Käynnistä Firefox 35, sinun on käytettävä Mozillan luomaa gecko-ohjainta Web-ohjaimen käyttämiseen. Seleeni 3.0: lla, gekolla ja Firefoxilla on yhteensopivuusongelmia, ja niiden oikeasta asettamisesta voi tulla ylämäkeen tehtävä. Jos koodi ei toimi, päivitä Firefox-versioon 47 tai sitä vanhempaan versioon. Vaihtoehtoisesti voit suorittaa komentosarjat Chromessa. Seleeni toimii heti Chrome-pakkauksesta. Sinun tarvitsee vain vaihtaa 3 koodiriviä, jotta komentosarjasi toimii Chromen tai Firefoxin kanssa

paketti uusi projekti;tuo org.openqa.selenium.WebDriver;tuo org.openqa.selenium.firefox.FirefoxDriver;// kommentoi yllä olevaa riviä ja poista kommentti rivin alapuolelta käyttääksesi Chromea// tuo org.openqa.selenium.chrome.ChromeDriver;julkinen luokka PG1 {public staattinen void main (String [] argumentoi) {// esineiden / muuttujien ilmoitus ja ilmentäminenSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-ohjain = uusi FirefoxDriver ();// kommentoi yllä olevia 2 riviä ja poista kommentti 2 rivin alapuolelta käyttääksesi Chromea//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// WebDriver-ohjain = uusi ChromeDriver ();Merkkijono baseUrl = "http://demo.guru99.com/test/newtours/";String expectedTitle = "Tervetuloa: Mercury Tours";String actualTitle = "";// käynnistää Fire fox ja ohjaa sen perus-URL-osoitteeseendriver.get (baseUrl);// hanki otsikon todellinen arvoactualTitle = ohjain.getTitle ();/ ** vertaa sivun todellista otsikkoa odotettuun ja tulosta* tulos "hyväksytty" tai "epäonnistunut"* /if (actualTitle.contentEquals (odotettavissaTitle)) {System.out.println ("Testi hyväksytty!");} muu {System.out.println ("Testi epäonnistui");}// sulje palokettukuljettaja.sulje ();}}

Koodin selittäminen

Pakettien tuominen

Aloittamiseksi sinun on tuotava seuraavat kaksi pakettia:

  1. org.openqa.selenium. * - sisältää WebDriver-luokan, jota tarvitaan uuden selaimen, joka on ladattu tietyllä ohjaimella, luomiseen
  2. org.openqa.selenium.firefox.FirefoxDriver - sisältää FirefoxDriver-luokan, jota tarvitaan Firefox-spesifisen ohjaimen instantioimiseksi selaimeen, jonka WebDriver-luokka on havainnut.

Jos testi vaatii monimutkaisempia toimintoja, kuten pääsyn toiseen luokkaan, selaimen kuvakaappausten ottamista tai ulkoisten tiedostojen käsittelyä, sinun on ehdottomasti tuotava lisää paketteja.

Objektien ja muuttujien välittäminen

Normaalisti kuljettajaobjekti instantisoidaan näin.

FirefoxDriver-luokka ilman parametreja tarkoittaa, että Java-ohjelmamme käynnistää Firefox-oletusprofiilin. Firefoxin oletusprofiili on samanlainen kuin Firefoxin käynnistäminen vikasietotilassa (laajennuksia ei ole ladattu).

Mukavuuden vuoksi tallensimme perus-URL-osoitteen ja odotetun otsikon muuttujina.

Selainistunnon käynnistäminen

WebDriverin get () -menetelmää käytetään uuden selainistunnon käynnistämiseen ja ohjataan sen parametriksi määrittämääsi URL-osoitteeseen.

Hanki todellinen sivun otsikko

WebDriver-luokassa on getTitle () -menetelmä, jota käytetään aina ladatun sivun otsikon saamiseen.

Vertaa odotettuja ja todellisia arvoja

Tämä koodin osa käyttää yksinkertaisesti Java if-else -rakennetta verrata todellista otsikkoa odotettuun.

Selainistunnon lopettaminen

" Sulje () " -menetelmää käytetään selainikkunan sulkemiseen.

Koko ohjelman lopettaminen

Jos käytät tätä komentoa sulkematta ensin kaikkia selainikkunoita, koko Java-ohjelmasi päättyy jättämällä selainikkuna auki.

Testin suorittaminen

Koodia voidaan suorittaa kahdella tavalla Eclipse IDE: ssä.

  1. Valitse Eclipsen valikkoriviltä Suorita> Suorita.
  2. Suorita koko koodi painamalla Ctrl + F11 .

Jos teit kaiken oikein, Eclipse tuottaa "Test hyväksytty!"

GUI-elementtien sijainti

Elementtien sijainti WebDriverissa tapahtuu " findElement (By. Locator ()) " -menetelmällä. Koodin "locator" -osa on sama kuin mikä tahansa aikaisemmin näiden opetusohjelmien Selenium IDE -kappaleissa käsitellyistä lokaattoreista. Itse asiassa on suositeltavaa, että etsit GUI-elementit IDE: n avulla ja kun tunnistat onnistuneesti, vie koodi WebDriveriin.

Tässä on seleeninäytekoodi, joka etsii elementin tunnuksellaan. Facebookia käytetään perus-URL-osoitteena.

paketti uusi projekti;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuo org.openqa.selenium.firefox.FirefoxDriver;julkinen luokka PG2 {public staattinen void main (String [] argumentoi) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-ohjain = uusi FirefoxDriver ();Merkkijono baseUrl = "http://www.facebook.com";Merkkijono tagName = "";driver.get (baseUrl);tagName = driver.findElement (By.id ("sähköposti")). getTagName ();System.out.println (tagName);kuljettaja.sulje ();System.exit (0);}}

Käytimme getTagName () -menetelmää sen nimen tunnisteen purkamiseen, jonka tunnus on "email". Suoritettaessa tämän koodin pitäisi pystyä tunnistamaan tunnisteen nimi "input" oikein ja tulostaa sen Eclipse Console -ikkunassa.

Yhteenveto elementtien paikantamisesta

Vaihtelu Kuvaus Näyte
Tekijä. luokan nimi etsii elementtejä "class" -attribuutin arvon perusteella findElement (By.clName ("someClassName"))
Tekijä. cssSelector löytää elementit kuljettajan taustalla olevan CSS Selector -moottorin perusteella findElement (By.cssSelector ("input # email"))
Tekijä. id etsii elementit niiden "id" -määritteen arvon perusteella findElement (By.id ("someId"))
Tekijä. linkText löytää linkki-elementin tarkan tekstin perusteella findElement (By.linkText ("REKISTERÖINTI"))
Tekijä. nimi etsii elementit nimen "attribuutti" arvon perusteella findElement (By.name ("someName"))
Tekijä. osittainenLinkText etsii elementit, jotka sisältävät annetun linkkitekstin findElement (By.partialLinkText ("REG"))
Tekijä. merkin nimi etsii elementit tagin nimen mukaan findElement (By.tagName ("div"))
Tekijä. xpath etsii elementit XPathin kautta findElement (By.xpath ("// html / body / div / table / tbody / tr / td [2] / table / tbody / tr [4] / td / table / tbody / tr / td [2] / taulukko / tbody / tr [2] / td [3] / lomake / taulukko / tbody / tr [5] "))

Huomautus findElementin käytöstä (By.cssSelector ())

By.cssSelector () ei tue "sisältää" -ominaisuutta . Harkitse alla olevaa Selenium IDE -koodia -

Yllä olevassa Selenium IDE: ssä koko testi läpäisi. Alla olevassa Selenium WebDriver -skriptissä sama testi aiheutti kuitenkin virheen, koska WebDriver ei tue "sisältää" -avainsanaa, kun sitä käytetään By.cssSelector () -menetelmässä.

Yhteiset komennot

Verkkoelementtien välittäminen

Sen sijaan, että käytämme pitkää "driver.findElement (By.locator ())" -syntaksia aina, kun käytät tiettyä elementtiä, voimme instantisoida sille WebElement-objektin. WebElement-luokka sisältyy pakettiin "org.openqa.selenium. *".

Napsauttamalla elementtiä

Napsauttaminen on ehkä yleisin tapa olla vuorovaikutuksessa verkkoelementtien kanssa . Click () -menetelmää käytetään minkä tahansa elementin napsautuksen simulointiin. Seuraava Selenium Java -esimerkki osoittaa, kuinka napsautuksella () käytettiin napsauttamalla Mercury Toursin "Kirjaudu sisään" -painiketta.

Seuraavat asiat on huomioitava käytettäessä click () -menetelmää.

  • Se ei sisällä mitään parametriä / argumenttia.
  • Menetelmä odottaa automaattisesti uuden sivun lataamista tarvittaessa.
  • Napsautettavan elementin on oltava näkyvissä (korkeus ja leveys eivät saa olla yhtä suuret kuin nolla).

Hanki komennot

Hanki komennot noutaa useita tärkeitä tietoja sivusta / elementistä. Tässä on joitain tärkeitä "get" -komentoja, jotka sinun on tunnettava.

Komennot Käyttö
get () Näytteen käyttö:
  • Se avaa automaattisesti uuden selainikkunan ja hakee sulkeissa määritetyn sivun.
  • Se on Selenium IDE: n "open" -komennon vastine.
  • Parametrin on oltava String- objekti.
getTitle () Näytteen käyttö:
  • Ei tarvitse parametreja
  • Hakee nykyisen sivun otsikon
  • Johtavat ja jäljessä olevat valkoiset tilat leikataan
  • Palauttaa merkkijonon, jos sivulla ei ole otsikkoa
getPageSource () Esimerkkikäyttö:
  • Ei tarvitse parametreja
  • Palauttaa sivun lähdekoodin merkkijonona
getCurrentUrl () Näytteen käyttö:
  • Ei tarvitse parametreja
  • Hakee merkkijonon, joka edustaa selaimen nykyistä URL-osoitetta
getText () Näytteen käyttö:
  • Hakee määrittämäsi elementin sisäisen tekstin

Navigoi komennoissa

Näiden komentojen avulla voit päivittää, siirtyä ja vaihtaa edestakaisin eri verkkosivujen välillä.

navigoi (). kohtaan () Näytteen käyttö:
  • Se avaa automaattisesti uuden selainikkunan ja hakee sulkeissa määritetyn sivun .
  • Se tekee täsmälleen saman asian kuin get () -menetelmä.
navigate (). refresh () Esimerkkikäyttö:
  • Ei tarvitse parametreja.
  • Se päivittää nykyisen sivun.
navigate (). back () Näytteen käyttö:
  • Ei tarvitse parametreja
  • Vie takaisin yhden sivun selaimen historia.
navigoi (). eteenpäin () Näytteen käyttö:
  • Ei tarvitse parametreja
  • Siirtää sinut eteenpäin yhden sivun verran selaimen historiassa.

Selain Windowsin sulkeminen ja sulkeminen

sulje () Näytteen käyttö:
  • Ei tarvitse parametreja
  • Se sulkee vain selainikkunan, jota WebDriver tällä hetkellä hallitsee .
quit () Näytteen käyttö:
  • Ei tarvitse parametreja
  • Se sulkee kaikki WebDriverin avaamat ikkunat.

Yritä suorittaa alla oleva koodi, jotta voit havainnollistaa selvästi sulkemisen () ja lopetuksen () välistä eroa. Se käyttää verkkosivua, joka avaa ikkunan automaattisesti sivua ladattaessa ja avaa toisen poistuttuaan.

Huomaa, että vain pääselainikkuna suljettiin eikä kahta ponnahdusikkunaa.

Mutta jos käytät quit () -toimintoa, kaikki ikkunat suljetaan - ei vain vanhempi. Yritä suorittaa alla oleva koodi ja huomaat, että myös kaksi yllä olevaa ponnahdusikkunaa sulkeutuvat automaattisesti.

paketti uusi projekti;tuo org.openqa.selenium.WebDriver;tuo org.openqa.selenium.firefox.FirefoxDriver;julkinen luokka PG3 {public staattinen void main (String [] argumentoi) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-ohjain = uusi FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");kuljettaja. lopeta (); // käyttämällä QUIT kaikki ikkunat sulkeutuvat}}

Vaihto kehysten välillä

Jos haluat käyttää GUI-elementtejä kehyksessä, meidän on ensin ohjattava WebDriver keskittymään kehykseen tai ponnahdusikkunaan ennen kuin voimme käyttää niiden elementtejä. Otetaanpa esimerkiksi verkkosivusto http://demo.guru99.com/selenium/deprecated.html

Tällä sivulla on 3 kehystä, joiden "name" -attribuutit on ilmoitettu yllä. Haluamme käyttää vanhentunutta linkkiä, joka on ympäröity yllä keltaisella. Tätä varten meidän on ensin kehotettava WebDriveriä vaihtamaan "classFrame" -kehykseen "switchTo (). Frame ()" -menetelmällä. Käytämme kehyksen nimi-attribuuttia parametrina "frame ()" -osassa.

paketti uusi projekti;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuo org.openqa.selenium.firefox.FirefoxDriver;julkinen luokka PG4 {public staattinen void main (String [] argumentoi) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-ohjain = uusi FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Vanhentunut")). napsauta ();kuljettaja.sulje ();}}

Tämän koodin suorittamisen jälkeen näet, että "classFrame" -kehys viedään "Poistettu sovellusliittymä" -sivulle, mikä tarkoittaa, että koodimme onnistui pääsemään "Vanhentunut" -linkkiin.

Vaihtaminen ponnahdusikkunoiden välillä

WebDriver sallii ponnahdusikkunoiden, kuten hälytysten, näyttämisen, toisin kuin Selenium IDE: ssä. Jotta pääsemme hälytyksen elementteihin (kuten sen sisältämään viestiin), meidän on käytettävä "switchTo (). Alert ()" -menetelmää. Alla olevassa koodissa käytämme tätä menetelmää päästäkseen hälytysruutuun ja noudamme sen viestin "getText ()" -menetelmällä, ja suljet sitten hälytysruudun automaattisesti "switchTo (). Alert (). Accept () " menetelmä.

Siirry ensin osoitteeseen http://jsbin.com/usidix/1 ja napsauta "Go!" -painiketta siellä ja katso itse viestin teksti.

Katsotaan Selenium-esimerkkikoodi tehdä tämä -

paketti minun paketti;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuo org.openqa.selenium.firefox.FirefoxDriver;julkisen luokan myclass {public staattinen void main (String [] argumentoi) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-ohjain = uusi FirefoxDriver ();Merkkijono hälytysviesti = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [arvo = \" Go! \ "]")). napsauta ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);kuljettaja. lopeta ();}}

Huomaa Eclipse-konsolissa, että tulostettu hälytysviesti on:

Odottaa

Odotuksia on kahdenlaisia.

  1. Epäsuora odotus - käytetään oletusarvon asettamiseen koko ohjelmassa
  2. Selkeä odotus - käytetään asettamaan odotusaika vain tietylle instanssille

Epäsuora odota

  • Se on yksinkertaisempi koodata kuin Explicit Waits.
  • Se ilmoitetaan yleensä koodin ilmentymisosassa.
  • Tarvitset vain yhden lisäpaketin tuontia varten.

Jos haluat aloittaa implisiittisen odotuksen, sinun on tuotava tämä paketti koodiin.

Lisää sitten koodisi instantiation-osaan.

Selkeä odota

Nimenomaiset odotukset tehdään WebDriverWait- ja ExpectedCondition-luokilla . Seuraavan Selenium WebDriver -esimerkin osalta odotamme jopa 10 sekuntia, että elementti, jonka tunnus on "käyttäjänimi", tulee näkyviin, ennen kuin siirrytään seuraavaan komentoon. Tässä ovat vaiheet.

Vaihe 1

Tuo nämä kaksi pakettia:

Vaihe 2

Ilmoita muuttuja WebDriverWait. Tässä esimerkissä käytämme muuttujan nimellä "myWaitVar".

Vaihe 3

Käytä myWaitVar with ExpectedConditions -kohtaa osissa, joissa tarvitset nimenomaista odottamista. Tässä tapauksessa käytämme nimenomaista odotusta "käyttäjätunnus" (Mercury Tours HomePage) -tulossa, ennen kuin kirjoitamme siihen "opetusohjelman".

Ehdot

Seuraavia menetelmiä käytetään ehdollisissa ja silmukointitoiminnoissa -

  • isEnabled () -toimintoa käytetään, kun haluat tarkistaa ennen komennon suorittamista, onko tietty elementti käytössä vai ei.
  • isDisplayed () -toimintoa käytetään, kun haluat tarkistaa, näytetäänkö tietty elementti ennen komennon suorittamista.
  • isSelected () -toimintoa käytetään, kun haluat tarkistaa, onko tietty valintaruutu, valintanappi tai vaihtoehto avattavasta ruudusta valittu. Se ei toimi muilla elementeillä.

ExpectedConditionsin käyttäminen

ExpectedConditions-luokka tarjoaa laajemman joukon ehtoja, joita voit käyttää yhdessä WebDriverWait's until () -menetelmän kanssa.

Alla on joitain yleisimpiä ExpectedConditions-menetelmiä.

  • alertIsPresent () - odottaa, kunnes hälytysruutu tulee näkyviin.
  • elementToBeClickable () - Odottaa, kunnes elementti on näkyvissä ja samalla käytössä. Alla oleva seleenikoodimalli odottaa, kunnes elementti tulee näkyviin ja otetaan käyttöön ensin, ennen kuin määrität kyseisen elementin WebElement-muuttujaksi nimeltä "txtUserName".
  • frameToBeAvailableAndSwitchToIt () - odottaa, kunnes annettu kehys on jo käytettävissä, ja siirtyy sitten automaattisesti siihen.

Poikkeusten saaminen

Kun käytetään isEnabled (), isDisplayed () ja isSelected (), WebDriver olettaa, että elementti on jo sivulla. Muuten se heittää NoSuchElementExceptionin . Tämän välttämiseksi meidän tulisi käyttää try-catch-lohkoa, jotta ohjelmaa ei keskeytetä.

WebElement txtbox_username = ohjain.findElement (By.id ("käyttäjänimi"));yrittää{jos (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("opetusohjelma");}}saalis (NoSuchElementException nsee) {System.out.println (nsee.toString ());}

Jos käytät eksplisiittisiä odotuksia, sinun on pyydettävä poikkeustyyppi "TimeoutException".

Yhteenveto

  • WebDriver-sovellusliittymän käytön aloittamiseksi sinun on tuotava vähintään nämä kaksi pakettia.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Get () menetelmä on sama kuin Seleeni IDE: n "avoin" komento.
  • Elementtien sijainti WebDriverissa tapahtuu findElement () -menetelmällä.
  • Seuraavat ovat käytettävissä olevat vaihtoehdot elementtien paikantamiseen WebDriverissa:
  • Tekijä. luokan nimi
  • Tekijä. cssSelector
  • Tekijä. id
  • Tekijä. linkText
  • Tekijä. nimi
  • Tekijä. osittainenLinkText
  • Tekijä. merkin nimi
  • Tekijä. xpath
  • By.cssSelector () ei tue "sisältää" -ominaisuutta.
  • Voit ilmentää elementin WebElement- luokan avulla.
  • Elementin napsauttaminen tapahtuu napsautusmenetelmällä () .
  • WebDriver tarjoaa nämä hyödylliset hakukomennot :
  • saada()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver tarjoaa nämä hyödylliset navigointikomennot
  • navigoi (). eteenpäin ()
  • navigoi (). takaisin ()
  • Navigoida johonkin()
  • navigoi (). päivitä ()
  • Close () - ja quit () -menetelmiä käytetään selainikkunoiden sulkemiseen. Sulje () käytetään yhden ikkunan sulkemiseen; kun taas quit () -toimintoa käytetään kaikkien ikkunoiden sulkemiseen, jotka liittyvät vanhempaan ikkunaan, jota WebDriver-objekti hallitsi.
  • SwitchTo (). Runko () ja switchTo (). Alert () menetelmiä käytetään suoraa WebDriver keskittyy jalustaan tai hälytys, vastaavasti.
  • Implisiittisiä odotuksia käytetään asettamaan odotusaika koko ohjelmassa, kun taas eksplisiittisiä odotuksia käytetään vain tietyissä osissa.
  • Voit käyttää isEnabled (), isDisplayed (), isSelected () ja WebDriverWait- ja ExpectedConditions- menetelmien yhdistelmää varmistaaksesi elementin tilan. He eivät kuitenkaan tarkista, onko elementtiä olemassa.
  • Kun isEnabled (), isDisplayed () tai isSelected () kutsuttiin, kun elementti ei ollut olemassa, WebDriver heittää NoSuchElementExceptionin .
  • Kun WebDriverWait- ja ExpectedConditions-menetelmiä kutsuttiin, kun elementtiä ei ollut, WebDriver heitti TimeoutExceptionin .

Huomautus:

driver.get (): Sitä käytetään siirtymään tietylle verkkosivustolle, mutta se ei ylläpidä selaimen historiaa ja evästeitä, joten emme voi käyttää eteen- ja taaksepäin-painikkeita, jos napsautamme sitä, sivu ei saa aikataulua

driver.navigate (): sitä käytetään tietyllä verkkosivustolla, mutta se ylläpitää selainhistoriaa ja evästeitä, joten voimme käyttää eteen- ja taaksepäin-painikkeita siirtyäksesi sivujen välillä Testcase-koodauksen aikana