Izmantojot Java klases "myclass", kuru izveidojām iepriekšējā apmācībā, mēģināsim izveidot WebDriver skriptu, kas:
- ielādēt Mercury Tours mājas lapu
- pārbaudiet tā nosaukumu
- izdrukājiet salīdzināšanas rezultātu
- 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:
- org.openqa.selenium. * - satur WebDriver klasi, kas nepieciešama, lai izveidotu jaunu pārlūku, kurā ielādēts konkrēts draiveris
- 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.
- Eclipse izvēlnes joslā noklikšķiniet uz Run> Run.
- 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: |
|
getTitle () Parauga lietojums: |
|
getPageSource () Parauga lietojums: |
|
getCurrentUrl () Parauga lietojums: |
|
getText () Parauga lietojums: |
|
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: |
|
navigate (). refresh () Parauga lietojums: |
|
navigate (). back () Parauga lietojums: |
|
virzīties (). uz priekšu () Parauga lietojums: |
|
Pārlūka Windows aizvēršana un aizvēršana
aizvērt () Parauga lietojums: |
|
quit () Parauga lietojums: |
|
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.
- Netiešā gaidīšana - izmanto, lai iestatītu noklusējuma gaidīšanas laiku visā programmā
- 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ā.