Pirmais selēna tīmekļa draivera skripts: JAVA parauga kods

Izmantojot Java klases "myclass", kuru izveidojām iepriekšējā apmācībā, mēģināsim izveidot WebDriver skriptu, kas:

  1. ielādēt Mercury Tours mājas lapu
  2. pārbaudiet tā nosaukumu
  3. izdrukājiet salīdzināšanas rezultātu
  4. aizveriet to pirms visas programmas beigām.

WebDriver kods

Zemāk ir faktiskais WebDriver kods loģikai, kuru uzrāda iepriekš minētais scenārijs

Piezīme. Startējot Firefox 35, Web draivera lietošanai jāizmanto Mozilla izveidots gecko draiveris. Selenium 3.0, gecko un Firefox ir saderības problēmas, un to pareiza iestatīšana varētu kļūt par kalnup. Ja kods nedarbojas, pārejiet uz Firefox 47 vai jaunāku versiju. Varat arī palaist skriptus pārlūkā Chrome. Selēns darbojas ārpus pārlūka Chrome. Lai skripts darbotos ar pārlūku Chrome vai Firefox, jums vienkārši jāmaina 3 koda rindas

pakete newproject;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.firefox.FirefoxDriver;//, lai izmantotu pārlūku Chrome, komentējiet iepriekš minēto rindiņu un komentējiet zem līnijas// importēt org.openqa.selenium.chrome.ChromeDriver;publiskā klase PG1 {public static void main (String [] args) {// objektu / mainīgo deklarēšana un instancēšanaSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver draiveris = jauns FirefoxDriver ();//, lai izmantotu pārlūku Chrome, komentējiet iepriekš minētās 2 rindiņas un komentējiet zem 2 rindiņām//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// WebDriver draiveris = new ChromeDriver ();Virknes bāzeUrl = "http://demo.guru99.com/test/newtours/";String várhatóTitle = "Laipni lūdzam: Mercury Tours";String actualTitle = "";// palaidiet Fire fox un novirziet to uz bāzes URLdraiveris.get (baseUrl);// iegūt faktisko nosaukuma vērtībuactualTitle = draiveris.getTitle ();/ ** salīdziniet faktisko lapas nosaukumu ar gaidīto un izdrukājiet* rezultāts kā "izturēts" vai "neizdevies"* /if (actualTitle.contentEquals (gaidāmsTitle)) {System.out.println ("Pārbaudīts nokārtots!");} cits {System.out.println ("Pārbaude neizdevās");}// aizvērt Uguns lapsavadītājs.slēgt ();}}

Koda izskaidrošana

Iepakojumu importēšana

Lai sāktu, jums jāimportē šādi divi pakotnes:

  1. org.openqa.selenium. * - satur WebDriver klasi, kas nepieciešama, lai izveidotu jaunu pārlūku, kurā ielādēts konkrēts draiveris
  2. org.openqa.selenium.firefox.FirefoxDriver - satur FirefoxDriver klasi, kas nepieciešama, lai Firefox specifisko draiveri izveidotu pārlūkprogrammā, kuru izveidojusi WebDriver klase.

Ja testam ir nepieciešamas sarežģītākas darbības, piemēram, piekļuve citai klasei, pārlūka ekrānuzņēmumu uzņemšana vai manipulēšana ar ārējiem failiem, jums noteikti būs jāimportē vairāk pakotņu.

Instantējošie objekti un mainīgie

Parasti šādi tiek objektīvs draivera objekts.

FirefoxDriver klase bez parametriem nozīmē, ka noklusēto Firefox profilu palaidīs mūsu Java programma. Noklusējuma Firefox profils ir līdzīgs Firefox palaišanai drošajā režīmā (netiek ielādēti paplašinājumi).

Ērtības labad mēs kā mainīgos saglabājām bāzes URL un paredzamo nosaukumu.

Palaidiet pārlūka sesiju

WebDriver metode get () tiek izmantota, lai palaistu jaunu pārlūka sesiju, un novirza to uz URL, kuru norādījāt kā parametru.

Iegūstiet faktiskās lapas virsrakstu

WebDriver klasē ir getTitle () metode, kas vienmēr tiek izmantota, lai iegūtu pašreiz ielādētās lapas lapas nosaukumu.

Salīdziniet paredzamās un faktiskās vērtības

Šajā koda daļā vienkārši tiek izmantota pamata Java if-else struktūra, lai salīdzinātu faktisko virsrakstu ar gaidīto.

Pārtraucot pārlūkprogrammas sesiju

Pārlūka loga aizvēršanai tiek izmantota metode " aizvērt () ".

Pārtraucot visu programmu

Ja izmantojat šo komandu, vispirms neaizverot visus pārlūkprogrammas logus, visa Java programma beigsies, atstājot pārlūka logu atvērtu.

Pārbaudes veikšana

Ir divi veidi, kā izpildīt kodu Eclipse IDE.

  1. Eclipse izvēlnes joslā noklikšķiniet uz Run> Run.
  2. Nospiediet Ctrl + F11, lai palaistu visu kodu.

Ja jūs visu izdarītu pareizi, Eclipse izdotu tekstu "Pārbaudīts nokārtots!"

GUI elementu atrašana

Elementu atrašana WebDriver tiek veikta, izmantojot metodi " findElement (By. Locator ()) ". Koda daļa “lokators” ir tāda pati kā jebkura no šīm vietnēm, kas iepriekš tika apskatītas šo apmācību sadaļās Selenium IDE. Patiesībā ieteicams atrast GUI elementus, izmantojot IDE, un pēc veiksmīgas identifikācijas eksportēt kodu uz WebDriver.

Šeit ir selēna parauga kods, kas atrod elementu pēc tā ID. Facebook tiek izmantots kā URL.

pakete newproject;importēt org.openqa.selenium.By;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.firefox.FirefoxDriver;publiskā klase PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver draiveris = jauns FirefoxDriver ();String baseUrl = "http://www.facebook.com";Virknes tagName = "";draiveris.get (baseUrl);tagName = driver.findElement (By.id ("e-pasts")). getTagName ();System.out.println (tagName);vadītājs.slēgt ();System.exit (0);}}

Mēs izmantojām metodi getTagName (), lai izvilktu tā elementa taga nosaukumu, kura ID ir "e-pasts". Kad tas tiek palaists, šim kodam jāspēj pareizi identificēt taga nosaukums "input" un tas tiks izdrukāts Eclipse konsoles logā.

Kopsavilkums par elementu atrašanu

Variācija Apraksts Paraugs
Autors. className atrod elementus, pamatojoties uz atribūta "klase" vērtību findElement (By.className ("dažiClassName"))
Autors. cssSelector atrod elementus, pamatojoties uz vadītāja CSS selektora dzinēju findElement (By.cssSelector ("ievades # e-pasts"))
Autors. id atrod elementus pēc to "id" atribūta vērtības findElement (By.id ("someId"))
Autors. linkText atrod saites elementu pēc precīzi redzamā teksta findElement (By.linkText ("REĢISTRĀCIJA"))
Autors. nosaukums atrod elementus pēc atribūta "name" vērtības findElement (By.name ("dažiName"))
Autors. daļējsLinkText atrod elementus, kas satur doto saites tekstu findElement (By.partialLinkText ("REG"))
Autors. tagName atrod elementus pēc to taga nosaukuma findElement (By.tagName ("div"))
Autors. xpath atrod elementus, izmantojot 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] / forma / tabula / tbody / tr [5] "))

Piezīme par findElement izmantošanu (By.cssSelector ())

By.cssSelector () neatbalsta funkciju "satur" . Apsveriet selēna IDE kodu zemāk -

Iepriekš Selenium IDE viss tests tika izturēts. Tomēr zemāk esošajā Selenium WebDriver skriptā tas pats tests radīja kļūdu, jo WebDriver neatbalsta atslēgvārdu "satur", ja to izmanto By.cssSelector () metodē.

Kopīgas komandas

Tīmekļa elementu instancēšana

Tā vietā, lai katru reizi, kad piekļūsit konkrētam elementam, izmantosim garo sintaksi "driver.findElement (By.locator ())", mēs varam tam izveidot WebElement objektu. WebElement klase ir iekļauta paketē "org.openqa.selenium. *".

Noklikšķinot uz elementa

Klikšķināšana, iespējams, ir visizplatītākais mijiedarbības veids ar tīmekļa elementiem . Klikšķa () metodi izmanto, lai simulētu jebkura elementa klikšķi. Šis Selenium Java piemērs parāda, kā klikšķis () tika izmantots, lai noklikšķinātu uz Mercury Tours pogas “Pierakstīties”.

Izmantojot klikšķa () metodi, jāatzīmē šādas lietas.

  • Tam nav nepieciešams neviens parametrs / arguments.
  • Metode automātiski gaida jaunas lapas ielādi, ja tāda ir.
  • Elementam, uz kura jānoklikšķina, jābūt redzamam (augstumam un platumam jābūt vienādam ar nulli).

Saņemt komandas

Saņemt komandas, lai iegūtu dažādu svarīgu informāciju par lapu / elementu. Šeit ir dažas svarīgas komandas, kuras jums jāzina.

Komandas Lietošana
get () Parauga lietojums:
  • Tas automātiski atver jaunu pārlūkprogrammas logu un ielādē jūsu iekavās norādīto lapu.
  • Tas ir Selenium IDE komandas "atvērt" ekvivalents.
  • Parametram jābūt objektam String .
getTitle () Parauga lietojums:
  • Nav nepieciešami parametri
  • Tiek izgūts pašreizējās lapas nosaukums
  • Vadošās un aizmugurējās baltās vietas ir apgrieztas
  • Atgriež nulles virkni, ja lapai nav nosaukuma
getPageSource () Parauga lietojums:
  • Nav nepieciešami parametri
  • Atgriež lapas avota kodu kā virknes vērtību
getCurrentUrl () Parauga lietojums:
  • Nav nepieciešami parametri
  • Ielādē virkni, kas apzīmē pārlūkprogrammas pašreizējo URL
getText () Parauga lietojums:
  • Ielādē jūsu norādītā elementa iekšējo tekstu

Pārvietoties komandās

Šīs komandas ļauj atsvaidzināt, pāriet uz priekšu un atpakaļ starp dažādām tīmekļa lapām.

pārvietoties (). uz () Parauga lietojums:
  • Tas automātiski atver jaunu pārlūkprogrammas logu un ielādē jūsu iekavās norādīto lapu .
  • Tas dara tieši to pašu, ko get () metodi.
navigate (). refresh () Parauga lietojums:
  • Nav nepieciešami parametri.
  • Tas atsvaidzina pašreizējo lapu.
navigate (). back () Parauga lietojums:
  • Nav nepieciešami parametri
  • Jūs atgriezīsities par vienu lapu pārlūkprogrammas vēsturē.
virzīties (). uz priekšu () Parauga lietojums:
  • Nav nepieciešami parametri
  • Pāriet uz vienu lapu pārlūkprogrammas vēsturē.

Pārlūka Windows aizvēršana un aizvēršana

aizvērt () Parauga lietojums:
  • Nav nepieciešami parametri
  • Tas aizver tikai to pārlūkprogrammas logu, kuru WebDriver pašlaik kontrolē .
quit () Parauga lietojums:
  • Nav nepieciešami parametri
  • Tas aizver visus logus, kurus WebDriver ir atvēris.

Lai skaidri parādītu atšķirību starp close () un quit (), mēģiniet izpildīt zemāk esošo kodu. Tas izmanto tīmekļa lapu, kas pēc lapas ielādes automātiski atveras logā un pēc iziešanas atver citu.

Ievērojiet, ka tika aizvērts tikai vecāku pārlūka logs, nevis divi uznirstošie logi.

Bet, ja izmantojat quit (), visi logi tiks aizvērti - ne tikai vecāks. Mēģiniet palaist zemāk redzamo kodu, un jūs pamanīsit, ka arī divi iepriekš redzamie uznirstošie logi tiks automātiski aizvērti.

pakete newproject;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.firefox.FirefoxDriver;publiskā klase PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver draiveris = jauns FirefoxDriver ();draiveris.get ("http://www.popuptest.com/popuptest2.html");vadītājs.iziet (); // izmantojot QUIT, visi logi tiks aizvērti}}

Pārslēgšanās starp kadriem

Lai piekļūtu GUI elementiem rāmī, mums vispirms ir jānovirza WebDriver, lai vispirms koncentrētos uz rāmi vai uznirstošo logu, pirms varam piekļūt elementiem tajos. Pieņemsim, piemēram, tīmekļa lapu http://demo.guru99.com/selenium/deprecated.html

Šajā lapā ir 3 rāmji, kuru atribūti "name" ir norādīti iepriekš. Mēs vēlamies piekļūt augšpusē dzeltenā krāsā ieliktai saitei “Novecojis”. Lai to izdarītu, mums vispirms jāuzdod WebDriver pārslēgties uz "classFrame" rāmi, izmantojot metodi "switchTo (). Frame ()" . Kā parametru daļai "frame ()" mēs izmantosim rāmja nosaukuma atribūtu.

pakete newproject;importēt org.openqa.selenium.By;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.firefox.FirefoxDriver;publiskā klase PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver draiveris = jauns FirefoxDriver ();draiveris.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Novecojis")). noklikšķiniet ();vadītājs.slēgt ();}}

Pēc šī koda izpildīšanas jūs redzēsiet, ka rāmis "classFrame" tiek novirzīts uz lapu "Novecojusi API", kas nozīmē, ka mūsu kods varēja veiksmīgi piekļūt saitei "Novecojis".

Pārslēgšanās starp uznirstošajiem logiem

WebDriver ļauj parādīt uznirstošos logus, piemēram, brīdinājumus, atšķirībā no Selenium IDE. Lai piekļūtu brīdinājuma elementiem (piemēram, tajā ietvertajam ziņojumam), mums jāizmanto metode "switchTo (). Alert ()" . Tālāk esošajā kodā mēs izmantosim šo metodi, lai piekļūtu brīdinājumu lodziņam un pēc tam izgūtu tā ziņojumu, izmantojot metodi "getText ()" , un pēc tam automātiski aizveriet brīdinājuma lodziņu, izmantojot "switchTo (). Alert (). Accept () " metodi.

Vispirms dodieties uz vietni http://jsbin.com/usidix/1 un manuāli noklikšķiniet uz "Go!" pogu tur un pārliecinieties pats par ziņojuma tekstu.

Ļauj redzēt Selenium koda paraugu, lai to izdarītu

iesaiņot manu paketi;importēt org.openqa.selenium.By;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.firefox.FirefoxDriver;sabiedrības klases myclass {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver draiveris = jauns FirefoxDriver ();String alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value = \" Go! \ "]")). Noklikšķiniet ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);vadītājs.iziet ();}}

Eclipse konsolē ievērojiet, ka drukātais brīdinājuma ziņojums ir:

Gaida

Ir divu veidu gaidīšana.

  1. Netiešā gaidīšana - izmanto, lai iestatītu noklusējuma gaidīšanas laiku visā programmā
  2. Nepārprotama gaidīšana - izmanto, lai iestatītu gaidīšanas laiku tikai konkrētam gadījumam

Netiešā gaidīšana

  • Kodēt ir vienkāršāk nekā nepārprotamu gaidīšanu.
  • Parasti to deklarē koda instantācijas daļā.
  • Importēšanai būs nepieciešama tikai viena papildu pakete.

Lai sāktu izmantot netiešu gaidīšanu, šī pakotne būs jāimportē kodā.

Pēc tam pievienojiet šo kodu kodēšanas daļai.

Nepārprotama gaidīšana

Nepārprotama gaidīšana tiek veikta, izmantojot WebDriverWait un ExpectedCondition klases . Šajā Selenium WebDriver piemērā mēs gaidīsim līdz 10 sekundēm, līdz elements, kura ID ir "lietotājvārds", kļūst redzams, pirms pāriet uz nākamo komandu. Šeit ir norādīti soļi.

1. solis

Importējiet šos divus iepakojumus:

2. solis

Paziņojiet mainīgo WebDriverWait. Šajā piemērā kā mainīgā nosaukumu izmantosim "myWaitVar".

3. solis

Izmantojiet myWaitVar ar ExpectedConditions daļās, kurās nepieciešama skaidra gaidīšana. Šajā gadījumā mēs izmantosim skaidru gaidīšanu, ievadot "lietotājvārdu" (Mercury Tours HomePage), pirms tajā ierakstīsim tekstu "apmācība".

Nosacījumi

Nosacītās un cilpu operācijās tiek izmantotas šādas metodes -

  • isEnabled () tiek izmantots, ja pirms komandas izpildes vēlaties pārbaudīt, vai noteikts elements ir iespējots.
  • isDisplayed () tiek izmantots, ja pirms komandas izpildes vēlaties pārbaudīt, vai tiek parādīts noteikts elements.
  • isSelected () tiek izmantots, ja vēlaties pārbaudīt , vai nolaižamajā lodziņā ir atlasīta noteikta izvēles rūtiņa, poga vai opcija . Tas nedarbojas ar citiem elementiem.

Izmantojot ExpectedConditions

Klase ExpectedConditions piedāvā plašāku nosacījumu kopumu, kuru varat izmantot kopā ar WebDriverWait metodi ().

Tālāk ir norādītas dažas visbiežāk izmantotās ExpectedConditions metodes.

  • alertIsPresent () - gaida, līdz tiek parādīts brīdinājuma lodziņš.
  • elementToBeClickable () - gaida, kamēr elements ir redzams un vienlaikus tiek iespējots. Tālāk esošais selēna koda paraugs gaidīs, līdz elements ar vispirms kļūs redzams un iespējots, pirms piešķirs šo elementu kā WebElement mainīgo ar nosaukumu "txtUserName".
  • frameToBeAvailableAndSwitchToIt () - gaida, kamēr dotais rāmis jau ir pieejams, un pēc tam automātiski pāriet uz to.

Izņēmumu ķeršana

Lietojot isEnabled (), isDisplayed () un isSelected (), WebDriver pieņem, ka elements jau pastāv lapā. Pretējā gadījumā tas izmetīs NoSuchElementException . Lai no tā izvairītos, mums jāizmanto bloķēšanas mēģinājums, lai programma netiktu pārtraukta.

WebElement txtbox_username = draiveris.findElement (By.id ("lietotājvārds"));izmēģināt {ja (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("apmācība");}}nozveja (NoSuchElementException nsee) {System.out.println (nsee.toString ());}

Ja izmantojat skaidru gaidīšanu, jums jānoņem izņēmuma veids "TimeoutException".

Kopsavilkums

  • Lai sāktu izmantot WebDriver API, jums jāimportē vismaz šie divi pakotnes.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Get () metode ir līdzvērtīga selēna IDE "Atvērt" komandu.
  • Elementu atrašana WebDriver tiek veikta, izmantojot metodi findElement () .
  • Šīs ir WebDriver elementu atrašanas iespējas:
  • Autors. className
  • Autors. cssSelector
  • Autors. id
  • Autors. linkText
  • Autors. nosaukums
  • Autors. daļējsLinkText
  • Autors. tagName
  • Autors. xpath
  • By.cssSelector () netiek atbalstīt "satur" funkciju.
  • Izmantojot WebElement klasi, varat instantizēt elementu .
  • Noklikšķināšana uz elementa tiek veikta, izmantojot metodi click () .
  • WebDriver nodrošina šīs noderīgās komandas :
  • gūt()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver nodrošina šīs noderīgās navigācijas komandas
  • virzīties (). uz priekšu ()
  • pārvietoties (). atpakaļ ()
  • pārvietoties (). uz ()
  • pārvietoties (). atsvaidzināt ()
  • Close () un quit () metodes tiek izmantotas, lai aizvērtu pārlūka logus. Aizvērt () izmanto, lai aizvērtu vienu logu; kamēr quit () tiek izmantots, lai aizvērtu visus logus, kas saistīti ar vecāku logu, kuru WebDriver objekts kontrolēja.
  • Metodes switchTo (). Frame () un switchTo (). Alert () tiek izmantotas, lai WebDriver fokusu novirzītu attiecīgi uz rāmi vai brīdinājumu.
  • Netiešās gaidīšanas tiek izmantotas, lai iestatītu gaidīšanas laiku visā programmā, savukārt nepārprotamas gaidīšanas tiek izmantotas tikai noteiktās daļās.
  • Pārbaudot elementa stāvokli, varat izmantot isEnabled (), isDisplayed (), isSelected () un WebDriverWait un ExpectedConditions metožu kombināciju . Tomēr viņi nepārbauda, ​​vai elements nepastāv.
  • Kad izsaukts isEnabled (), isDisplayed () vai isSelected (), kamēr elements vēl nebija, WebDriver iemetīs NoSuchElementException .
  • Kad WebDriverWait un ExpectedConditions metodes tika izsauktas, kamēr elements vēl nebija, WebDriver metīs TimeoutException .

Piezīme:

driver.get (): Tas tiek izmantots, lai dotos uz konkrēto vietni, taču tas neuztur pārlūkprogrammas vēsturi un sīkfailus, tāpēc mēs nevaram izmantot pogas Uz priekšu un atpakaļ, ja noklikšķināsim uz šīs, lapa nesaņems grafiku

driver.navigate (): tas tiek izmantots, lai dotos uz konkrēto vietni, taču tajā tiek saglabāta pārlūka vēsture un sīkfaili, tāpēc mēs varam izmantot pogu Uz priekšu un Atpakaļ, lai pārvietotos starp lapām Testcase kodēšanas laikā.

Interesanti raksti...