Pirmasis seleno žiniatinklio tvarkyklės scenarijus: JAVA pavyzdžio kodo pavyzdys

Turinys:

Anonim

Naudodami „Java“ klasės „myclass“, kurią sukūrėme ankstesnėje mokymo programoje, pabandykime sukurti „WebDriver“ scenarijų, kuris:

  1. parsisiųsti „Mercury Tours“ pagrindinį puslapį
  2. patikrinti jo pavadinimą
  3. atspausdinti palyginimo rezultatą
  4. uždarykite jį prieš baigdami visą programą.

„WebDriver“ kodas

Žemiau yra tikrasis „WebDriver“ logikos kodas, pateiktas aukščiau esančiame scenarijuje

Pastaba: Norėdami paleisti „Firefox 35“, norėdami naudoti žiniatinklio tvarkyklę, turite naudoti „Mozilla“ sukurtą „gecko“ tvarkyklę. „Selenium 3.0“, „gecko“ ir „Firefox“ turi suderinamumo problemų ir jų teisingas nustatymas gali tapti įkalne. Jei kodas neveikia, pereikite prie „Firefox“ 47 arba senesnės versijos. Arba galite paleisti scenarijus „Chrome“. Selenas veikia ne „Chrome“ dėžutėje. Jums tiesiog reikia pakeisti 3 kodo eilutes, kad scenarijus veiktų su „Chrome“ ar „Firefox“

paketas newproject;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.firefox.FirefoxDriver;// pakomentuokite aukščiau pateiktą eilutę ir nekomentuokite žemiau eilutės, kad galėtumėte naudoti „Chrome“// importuoti org.openqa.selenium.chrome.ChromeDriver;viešoji klasė PG1 {public static void main (String [] argumentuoja) {// objektų / kintamųjų deklaravimas ir egzemplioriusSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ ();// pakomentuokite 2 aukščiau pateiktas eilutes ir nekomentuokite žemiau 2 eilučių, kad galėtumėte naudoti „Chrome“//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// „WebDriver“ tvarkyklė = nauja „ChromeDriver“ ();Eilutė baseUrl = "http://demo.guru99.com/test/newtours/";String expectedTitle = "Sveiki atvykę: Mercury Tours ";Eilutė actualTitle = "";// paleiskite „Fire fox“ ir nukreipkite jį į pagrindinį URLvairuotojas.get (baseUrl);// gauti tikrąją pavadinimo vertęactualTitle = tvarkyklė.getTitle ();/ ** palyginkite tikrąjį puslapio pavadinimą su numatomu ir atspausdinkite* rezultatas kaip „perduotas“ arba „nepavyko“* /jei (actualTitle.contentEquals (numatomaTitle)) {System.out.println ("Testas išlaikytas!");} Kitas {System.out.println („Bandymas nepavyko“);}// uždaryti Ugnies lapėvairuotojas.uždaryti ();}}

Kodo paaiškinimas

Pakuočių importavimas

Norėdami pradėti, turite importuoti šiuos du paketus:

  1. org.openqa.selenium. * - yra „WebDriver“ klasė, reikalinga norint sukurti naują naršyklę, pakrautą konkrečiu tvarkykle
  2. org.openqa.selenium.firefox.FirefoxDriver - yra „FirefoxDriver“ klasė, reikalinga norint „Firefox“ konkrečiai tvarkyklei suaktyvinti naršyklę, kurią ištrina „WebDriver“ klasė.

Jei bandymui atlikti reikia sudėtingesnių veiksmų, tokių kaip prieiga prie kitos klasės, naršyklės ekrano kopijų darymas ar manipuliavimas išoriniais failais, tikrai reikės importuoti daugiau paketų.

Intuituojami objektai ir kintamieji

Paprastai tai yra vairuotojo objektas.

„FirefoxDriver“ klasė be parametrų reiškia, kad numatytąjį „Firefox“ profilį paleidžia mūsų „Java“ programa. Numatytasis „Firefox“ profilis yra panašus į „Firefox“ paleidimą saugiuoju režimu (jokie plėtiniai neįkeliami).

Patogumo sumetimais išsaugojome pagrindinį URL ir numatomą pavadinimą kaip kintamuosius.

Naršyklės sesijos paleidimas

„WebDriver“ get () metodas naudojamas paleisti naują naršyklės seansą ir nukreipia jį į URL, kurį nurodote kaip jo parametrą.

Gaukite faktinio puslapio pavadinimą

„WebDriver“ klasėje yra metodas getTitle () , kuris visada naudojamas norint gauti šiuo metu įkelto puslapio puslapio pavadinimą.

Palyginkite numatomas ir faktines vertes

Ši kodo dalis paprasčiausiai naudoja pagrindinę „Java if-else“ struktūrą, kad palygintų tikrąjį pavadinimą su numatomu.

Naršyklės sesijos nutraukimas

Uždaryti () “ metodas naudojamas uždaryti naršyklės langą.

Nutraukiama visa programa

Jei naudosite šią komandą iš pradžių neuždarę visų naršyklės langų, visa „Java“ programa bus baigta paliekant atidarytą naršyklės langą.

Testo vykdymas

Yra du būdai, kaip vykdyti kodą „Eclipse IDE“.

  1. „Eclipse“ meniu juostoje spustelėkite Vykdyti> Vykdyti.
  2. Norėdami paleisti visą kodą, paspauskite „ Ctrl“ + F11 .

Jei viską atliksite teisingai, „Eclipse“ išleis „Test išlaikytas!“

GUI elementų nustatymas

Elementų paieška „WebDriver“ atliekama naudojant metodąfindElement (By. Locator ()) “. Kodo „lokatorius“ dalis yra tokia pati, kaip ir bet kurios iš lokatorių, anksčiau aptartų šių vadovėlių „Selenium IDE“ skyriuose. Tiesą sakant, rekomenduojama rasti GUI elementus naudojant IDE ir sėkmingai identifikavus eksportuoti kodą į „WebDriver“.

Čia yra Seleno pavyzdžio kodas, kuris nustato elementą pagal jo ID. „Facebook“ naudojamas kaip pagrindinis URL.

paketas newproject;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.firefox.FirefoxDriver;viešoji klasė PG2 {public static void main (String [] argumentuoja) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ ();Eilutė baseUrl = "http://www.facebook.com";String tagName = "";vairuotojas.get (baseUrl);tagName = driver.findElement (By.id ("el. paštas")). getTagName ();System.out.println (tagName);vairuotojas.uždaryti ();System.exit (0);}}

Mes panaudojome getTagName () metodą, kad išgautume to konkretaus elemento, kurio ID yra „el. Paštas “, žymos pavadinimą. Paleidus šis kodas turėtų sugebėti teisingai identifikuoti žymos pavadinimą „įvestis“ ir atspausdins jį „Eclipse“ konsolės lange.

Elementų vietos santrauka

Variacija apibūdinimas Pavyzdys
Iki. className randa elementus pagal „class“ atributo vertę „findElement“ (By.className („someClassName“))
Iki. cssSelector suranda elementus pagal vairuotojo CSS selektoriaus variklį „findElement“ (By.cssSelector („įvesties # el. pašto adresas“))
Iki. id suranda elementus pagal jų „id“ atributo vertę „findElement“ (By.id („someId“))
Iki. linkText suranda nuorodos elementą pagal tiksliai rodomą tekstą „findElement“ (By.linkText („REGISTRACIJA“))
Iki. vardas suranda elementus pagal „name“ atributo vertę „findElement“ (By.name („someName“))
Iki. dalinisLinkText suranda elementus, kuriuose yra nurodytas nuorodos tekstas „findElement“ (By.partialLinkText („REG“))
Iki. tagName suranda elementus pagal jų žymos pavadinimą „findElement“ (By.tagName („div“))
Iki. xpath suranda elementus per XPath findElement (By.xpath ("// html / body / div / table / tbody / tr / td [2] / table / tbody / tr [4] / td / table / tbody / tr / td [2] / lentelė / tbody / tr [2] / td [3] / forma / lentelė / tbody / tr [5] "))

Pastaba apie „findElement“ naudojimą (By.cssSelector ())

By.cssSelector () nepalaiko funkcijos „yra“ . Apsvarstykite toliau pateiktą „Selenium IDE“ kodą -

Aukščiau pateiktame Selenium IDE išlaikytas visas testas. Tačiau žemiau esančiame „Selenium WebDriver“ scenarijuje tas pats testas sugeneravo klaidą, nes „WebDriver“ nepalaiko raktinio žodžio „yra“, kai naudojamas metodas By.cssSelector ().

Bendros komandos

Greitas žiniatinklio elementų kūrimas

Užuot naudoję ilgą „driver.findElement (By.locator ())“ sintaksę kiekvieną kartą, kai pasieksite tam tikrą elementą, galime jam sukurti „WebElement“ objektą. „WebElement“ klasė yra pakete „org.openqa.selenium. *“.

Spustelėjus elementą

Spustelėjimas yra bene labiausiai paplitęs sąveikos su interneto elementais būdas . Click () metodas naudojamas imituoti bet kurio elemento paspaudimą. Šis „Selenium Java“ pavyzdys rodo, kaip paspaudus () buvo spustelėtas „Mercury Tours“ mygtukas „Prisijungti“.

Naudojant paspaudimo () metodą, reikia atkreipti dėmesį į šiuos dalykus.

  • Tai nereikalauja jokių parametrų / argumentų.
  • Metodas automatiškai laukia, kol bus įkeltas naujas puslapis, jei taikoma.
  • Elementas, kurį norite spustelėti, turi būti matomas (aukštis ir plotis neturi būti lygūs nuliui).

Gaukite komandas

Gaukite komandas, kad gautumėte įvairios svarbios informacijos apie puslapį / elementą. Čia yra keletas svarbių komandų „gauti“, kurias turite žinoti.

Komandos Naudojimas
gauti () pavyzdžio naudojimas:
  • Automatiškai atidaromas naujas naršyklės langas ir gaunamas puslapis, kurį nurodote skliausteliuose.
  • Tai yra „Selenium IDE“ komandos „atidaryti“ atitikmuo.
  • Parametras turi būti String objektas.
getTitle () Pavyzdžio naudojimas:
  • Nereikia jokių parametrų
  • Gauna dabartinio puslapio pavadinimą
  • Pirmieji ir galiniai balti plotai yra apipjaustomi
  • Pateikia nulinę eilutę, jei puslapis neturi pavadinimo
getPageSource () Pavyzdžio naudojimas:
  • Nereikia jokių parametrų
  • Grąžina puslapio šaltinio kodą kaip eilutės reikšmę
getCurrentUrl () Pavyzdžio naudojimas:
  • Nereikia jokių parametrų
  • Gauna eilutę, nurodančią dabartinį URL , kurį ieško naršyklė
getText () pavyzdžio naudojimas:
  • Gauna jūsų nurodyto elemento vidinį tekstą

Naršyti komandose

Šios komandos leidžia atnaujinti, pereiti ir pereiti pirmyn ir atgal tarp skirtingų tinklalapių.

pereiti (). į () Pavyzdžio naudojimas:
  • Automatiškai atidaromas naujas naršyklės langas ir gaunamas puslapis , kurį nurodote skliausteliuose.
  • Jis daro tą patį dalyką kaip ir get () metodas.
navigate (). refresh () Pavyzdžio naudojimas:
  • Nereikia jokių parametrų.
  • Tai atnaujina dabartinį puslapį.
navigate (). back () Pavyzdžio naudojimas:
  • Nereikia jokių parametrų
  • Grįžtate per vieną naršyklės istorijos puslapį.
naršyti (). pirmyn () Pavyzdžio naudojimas:
  • Nereikia jokių parametrų
  • Pereina vienu naršyklės istorijos puslapiu į priekį .

Naršyklės „Windows“ uždarymas ir uždarymas

uždaryti () pavyzdžio naudojimas:
  • Nereikia jokių parametrų
  • Jis uždaro tik naršyklės langą, kurį šiuo metu valdo „WebDriver“ .
quit () pavyzdžio naudojimas:
  • Nereikia jokių parametrų
  • Jis uždaro visus „WebDriver“ atidarytus langus.

Norėdami aiškiai parodyti skirtumą tarp „close“ (uždaryti) ir „quit“ (), pabandykite atlikti toliau pateiktą kodą. Jis naudoja tinklalapį, kuris automatiškai iššoka langą įkėlus puslapį, o išėjęs atidaro kitą.

Atkreipkite dėmesį, kad buvo uždarytas tik pagrindinis naršyklės langas, o ne du iššokantys langai.

Bet jei naudosite quit (), visi langai bus uždaryti - ne tik pagrindinis. Pabandykite paleisti žemiau esantį kodą ir pastebėsite, kad du aukščiau esantys iššokantys langai taip pat bus automatiškai uždaryti.

paketas newproject;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.firefox.FirefoxDriver;viešoji klasė PG3 {public static void main (String [] argumentuoja) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ ();driver.get ("http://www.popuptest.com/popuptest2.html");vairuotojas.mesti (); // naudojant QUIT visi langai bus uždaryti}}

Perjungimas tarp rėmelių

Norėdami pasiekti GUI elementus rėmelyje, pirmiausia turėtume nurodyti „WebDriver“ sutelkti dėmesį į rėmą arba iššokantįjį langą, kad galėtume pasiekti elementus juose. Paimkime, pavyzdžiui, tinklalapį http://demo.guru99.com/selenium/deprecated.html

Šiame puslapyje yra 3 rėmeliai, kurių „vardas“ atributai nurodyti aukščiau. Mes norime pasiekti aukščiau geltonai apjuostą nuorodą „Nebenaudojama“. Norėdami tai padaryti, pirmiausia turime nurodyti „WebDriver“ pereiti prie „classFrame“ rėmelio, naudojant metodą „switchTo (). Frame ()“ . Rėmelio pavadinimo atributą naudosime kaip parametro dalį „frame ()“.

paketas newproject;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.firefox.FirefoxDriver;viešoji klasė PG4 {public static void main (String [] argumentuoja) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Nebenaudojamas")). spustelėkite ();vairuotojas.uždaryti ();}}

Vykdę šį kodą pamatysite, kad rėmelis „classFrame“ pateks į puslapį „Nebenaudojama API“, o tai reiškia, kad mūsų kodas sėkmingai galėjo pasiekti nuorodą „Nenaudojama“.

Perjungimas tarp iššokančių langų

„WebDriver“ leidžia rodyti iššokančiuosius langus, pvz., Įspėjimus, skirtingai nei „Selenium IDE“. Norėdami pasiekti perspėjimo elementus (pvz., Jame esantį pranešimą), turime naudoti metodą „switchTo (). Alert ()“ . Žemiau pateiktame kode naudosime šį metodą, kad pasiektume įspėjimo langelį, o tada gautume jo pranešimą naudodami metodą „getText ()“ , tada automatiškai uždarykite įspėjimo laukelį naudodami „switchTo (). Alert (). Accept () " metodas.

Pirmiausia eikite į http://jsbin.com/usidix/1 ir rankiniu būdu spustelėkite „Go!“ mygtuką ir patys įsitikinkite pranešimo tekstu.

Leidžia pamatyti Selenium pavyzdžio kodą tai padaryti-

supakuoti mano paketą;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.firefox.FirefoxDriver;viešosios klasės „myclass“public static void main (String [] argumentuoja) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ ();String alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value = \" Go! \ "]")). Spustelėkite ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);vairuotojas.mesti ();}}

„Eclipse“ pulte pastebėkite, kad išspausdintas įspėjimo pranešimas yra:

Laukia

Yra dviejų rūšių laukimas.

  1. Numanomas laukimas - naudojamas numatytam laukimo laikui nustatyti visoje programoje
  2. Aiškus laukimas - naudojamas nustatyti laukimo laiką tik tam tikram egzemplioriui

Numanomas laukimas

  • Koduoti paprasčiau nei „Explicit Waits“.
  • Paprastai tai deklaruojama kodo egzemplioriaus dalyje.
  • Importuoti reikės tik vieno papildomo paketo.

Norėdami pradėti naudoti netiesioginį laukimą, turėtumėte importuoti šį paketą į savo kodą.

Tada pridėkite šią kodo pavyzdžio dalį.

Aiškus laukimas

Aiškus laukimas atliekamas naudojant „WebDriverWait“ ir „ExpectedCondition“ klases . Toliau pateiktame „Selenium WebDriver“ pavyzdyje palauksime iki 10 sekundžių, kol elementas, kurio ID yra „vartotojo vardas“, bus matomas prieš pereinant prie kitos komandos. Čia yra žingsniai.

1 žingsnis

Importuokite šias dvi pakuotes:

2 žingsnis

Paskelbkite „WebDriverWait“ kintamąjį. Šiame pavyzdyje mes naudosime „myWaitVar“ kaip kintamojo pavadinimą.

3 žingsnis

Naudokite „myWaitVar“ su „ExpectedConditions“ tose dalyse, kur reikia aiškiai laukti. Šiuo atveju mes naudosime aiškų laukimą įvedant „vartotojo vardą“ („Mercury Tours HomePage“), kol įvesime tekstą „pamoka“.

Sąlygos

Sąlyginėse ir kilpinėse operacijose naudojami šie metodai:

  • isEnabled () naudojamas, kai prieš vykdant komandą norite patikrinti, ar tam tikras elementas įgalintas, ar ne.
  • isDisplayed () naudojamas, kai prieš vykdant komandą norite patikrinti, ar tam tikras elementas rodomas, ar ne.
  • isSelected () naudojamas, kai norite patikrinti, ar išskleidžiamajame laukelyje pažymėtas tam tikras žymės langelis, akutė arba parinktis . Jis neveikia dėl kitų elementų.

„ExpectedConditions“ naudojimas

„ExpectedConditions“ klasė siūlo platesnį sąlygų rinkinį, kurį galite naudoti kartu su „WebDriverWait“ iki () metodu.

Žemiau yra keletas dažniausiai naudojamų „ExpectedConditions“ metodų.

  • alertIsPresent () - laukia, kol pasirodys įspėjimo langelis.
  • elementToBeClickable () - laukia, kol elementas bus matomas ir tuo pačiu įjungtas. Toliau pateiktas „Selenium“ kodo pavyzdys laukia, kol elementas su taps matomas ir įgalintas, prieš priskirdamas tą elementą kaip „WebElement“ kintamąjį pavadinimu „txtUserName“.
  • frameToBeAvailableAndSwitchToIt () - laukia, kol duotas rėmelis jau bus pasiekiamas, tada automatiškai persijungs į jį.

Gaudyti išimtis

Kai naudojate „isEnabled“ (), „isDisplayed“) ir „isSelected“ („WebDriver“), manoma, kad elementas jau yra puslapyje. Priešingu atveju jis išves „NoSuchElementException“ . Norėdami to išvengti, turėtume naudoti blokavimo bandymą, kad programa nebūtų pertraukta.

„WebElement“ txtbox_username = driver.findElement (By.id („vartotojo vardas“));bandyti{jei (txtbox_username.isEnabled ()) {txtbox_username.sendKeys („pamoka“);}}sugavimas (NoSuchElementException nsee) {System.out.println (nsee.toString ());}

Jei naudojate aiškų laukimą, jums reikia sugauti išimtį „TimeoutException“.

Santrauka

  • Norėdami pradėti naudoti „WebDriver“ API, turite importuoti bent šiuos du paketus.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Get“) metodas yra „Selenium IDE“ komandos „atidaryti“ atitikmuo.
  • Elementų radimas „WebDriver“ atliekamas naudojant metodą „ findElement ()“ .
  • Toliau pateikiamos galimos parinktys, kaip rasti elementus „WebDriver“:
  • Iki. className
  • Iki. cssSelector
  • Iki. id
  • Iki. linkText
  • Iki. vardas
  • Iki. dalinisLinkText
  • Iki. tagName
  • Iki. xpath
  • By.cssSelector () nėra paremti "yra" funkciją.
  • Elementą galite užfiksuoti naudodami „ WebElement“ klasę.
  • Spaudimas ant elemento atliekamas paspaudimo () metodu.
  • „WebDriver“ teikia šias naudingas komandas :
  • gauti ()
  • „getTitle“ ()
  • getPageSource ()
  • „getCurrentUrl“ ()
  • „getText“ ()
  • „WebDriver“ teikia šias naudingas naršymo komandas
  • naršyti (). pirmyn ()
  • naršyti (). atgal ()
  • naršyti (). į ()
  • naršyti (). atnaujinti ()
  • Uždarymo () ir uždarymo () metodai naudojami naršyklės langams uždaryti. Uždaryti () naudojamas uždaryti vieną langą; o „ quit“) naudojama uždaryti visus langus, susietus su pagrindiniu langu, kurį valdė „WebDriver“ objektas.
  • SwitchTo“ (). Frame () ir „ switchTo“ (). Alert () metodai naudojami nukreipiant „WebDriver“ dėmesį į atitinkamai kadrą arba įspėjimą.
  • Netiesioginis laukimas naudojamas laukimo trukmės nustatymui visoje programoje, o aiškus - tik tam tikroms porcijoms.
  • Tikrindami elemento būseną galite naudoti metodus isEnabled (), isDisplayed (), isSelected () ir „ WebDriverWait“ bei „ ExpectedConditions“ metodų derinį . Tačiau jie netikrina, ar elemento nėra.
  • Kai „isEnabled“ (), „isDisplayed“) arba „isSelected“ () buvo iškviestas, kol elemento nebuvo, „WebDriver“ išmes „ NoSuchElementException“ .
  • Kai buvo iškviesti „WebDriverWait“ ir „ExpectedConditions“ metodai, kol elemento nebuvo, „WebDriver“ išmetė „ TimeoutException“ .

Pastaba:

driver.get (): Jis naudojamas einant į konkrečią svetainę, tačiau nepalaiko naršyklės istorijos ir slapukų, todėl negalime naudoti mygtuko pirmyn ir atgal, jei spustelėsite, puslapis negaus tvarkaraščio

driver.navigate (): jis naudojamas norint pereiti į tam tikrą svetainę, tačiau ji palaiko naršyklės istoriją ir slapukus, todėl mes galime naudoti mygtuką pirmyn ir atgal, kad naršytume tarp puslapių per „Testcase“ kodavimą.