Folosind clasa Java „myclass” pe care am creat-o în tutorialul anterior, să încercăm să creăm un script WebDriver care să:
- preluați pagina de pornire a lui Mercury Tours
- verificați titlul acestuia
- tipăriți rezultatul comparației
- închideți-l înainte de a încheia întregul program.
Cod WebDriver
Mai jos este codul WebDriver real pentru logica prezentată de scenariul de mai sus
Notă: Pornind Firefox 35, trebuie să utilizați driverul gecko creat de Mozilla pentru a utiliza Driverul Web. Selenium 3.0, gecko și firefox au probleme de compatibilitate și setarea corectă a acestora ar putea deveni o sarcină ascendentă. Dacă codul nu funcționează, treceți la versiunea Firefox 47 sau mai mică. Alternativ, puteți rula scripturile pe Chrome. Seleniul funcționează din cutie pentru Chrome. Trebuie doar să schimbați 3 linii de cod pentru ca scriptul dvs. să funcționeze cu Chrome sau Firefox
pachet proiect nou;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// comentează linia de mai sus și decomentează linia de mai jos pentru a utiliza Chrome// import org.openqa.selenium.chrome.ChromeDriver;clasa publica PG1 {public static main main (String [] args) {// declararea și instanțierea obiectelor / variabilelorSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = nou FirefoxDriver ();// comentați cele 2 rânduri de mai sus și dezactivați comentariile sub 2 rânduri pentru a utiliza Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// WebDriver driver = new ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";String expectedTitle = "Bun venit: Mercury Tours";String actualTitle = "";// lansează Fire fox și direcționează-l către adresa URL de bazădriver.get (baseUrl);// obțineți valoarea reală a titluluiactualTitle = driver.getTitle ();/ ** comparați titlul real al paginii cu cel așteptat și imprimați* rezultatul ca „Trecut” sau „Nu a reușit”* /if (actualTitle.contentEquals (expectedTitle)) {System.out.println ("Testul a trecut!");} altceva {System.out.println ("Testul nu a reușit");}// închide vulpe de focdriver.close ();}}
Explicarea codului
Importul pachetelor
Pentru a începe, trebuie să importați următoarele două pachete:
- org.openqa.selenium. * - conține clasa WebDriver necesară pentru crearea unui nou browser încărcat cu un driver specific
- org.openqa.selenium.firefox.FirefoxDriver - conține clasa FirefoxDriver necesară pentru instanțierea unui driver specific Firefox pe browserul instanțiat de clasa WebDriver
Dacă testul dvs. are nevoie de acțiuni mai complicate, cum ar fi accesarea unei alte clase, realizarea de capturi de ecran în browser sau manipularea fișierelor externe, cu siguranță va trebui să importați mai multe pachete.
Instanțarea obiectelor și variabilelor
În mod normal, așa este instanțiat un obiect driver.
O clasă FirefoxDriver fără parametri înseamnă că profilul implicit Firefox va fi lansat de programul nostru Java. Profilul implicit Firefox este similar cu lansarea Firefox în modul sigur (nu sunt încărcate extensii).
Pentru comoditate, am salvat URL-ul de bază și titlul așteptat ca variabile.
Lansarea unei sesiuni de browser
Metoda get () WebDriver este utilizată pentru a lansa o nouă sesiune de browser și o direcționează către adresa URL pe care o specificați ca parametru.
Obțineți titlul paginii reale
Clasa WebDriver are metoda getTitle () care este întotdeauna utilizată pentru a obține titlul paginii încărcate în prezent.
Comparați valorile așteptate și reale
Această porțiune a codului folosește pur și simplu o structură de bază Java if-else pentru a compara titlul real cu cel așteptat.
Încheierea unei sesiuni de browser
Metoda „ close () ” este utilizată pentru a închide fereastra browserului.
Încheierea întregului program
Dacă utilizați această comandă fără a închide mai întâi toate ferestrele browserului, întregul dvs. program Java se va termina lăsând fereastra browserului deschisă.
Rularea testului
Există două moduri de a executa codul în Eclipse IDE.
- În bara de meniu a Eclipsei, faceți clic pe Executare> Executare.
- Apăsați Ctrl + F11 pentru a rula întregul cod.
Dacă ați făcut totul corect, Eclipse va afișa „Testul a trecut!”
Localizarea elementelor GUI
Localizarea elementelor în WebDriver se face folosind metoda „ findElement (By. Locator ()) ”. Partea „localizator” a codului este aceeași cu oricare dintre localizatoarele discutate anterior în capitolele Selenium IDE ale acestor tutoriale. De fapt, este recomandat să localizați elemente GUI utilizând IDE și, odată identificat cu succes, să exportați codul pe WebDriver.
Iată un exemplu de cod de seleniu care localizează un element după id-ul său. Facebook este folosit ca URL de bază.
pachet proiect nou;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;clasa publica PG2 {public static main main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = nou FirefoxDriver ();String baseUrl = "http://www.facebook.com";String tagName = "";driver.get (baseUrl);tagName = driver.findElement (By.id ("email")). getTagName ();System.out.println (tagName);driver.close ();System.exit (0);}}
Am folosit metoda getTagName () pentru a extrage numele etichetei acelui element al cărui id este „e-mail”. La rulare, acest cod ar trebui să poată identifica corect numele etichetei „input” și îl va imprima în fereastra Consolei Eclipse.
Rezumat pentru localizarea elementelor
Variație | Descriere | Probă |
---|---|---|
De. numele clasei | găsește elemente bazate pe valoarea atributului „clasă” | findElement (By.className ("someClassName")) |
De. cssSelector | găsește elemente bazate pe motorul CSS Selector de bază al șoferului | findElement (By.cssSelector ("input # email")) |
De. id | localizează elemente după valoarea atributului lor „id” | findElement (By.id ("someId")) |
De. linkText | găsește un element de legătură după textul exact pe care îl afișează | findElement (By.linkText („ÎNREGISTRARE”)) |
De. Nume | localizează elemente după valoarea atributului „nume” | findElement (By.name ("someName")) |
De. partialLinkText | localizează elemente care conțin textul linkului dat | findElement (By.partialLinkText ("REG")) |
De. nume eticheta | localizează elemente după numele etichetei lor | findElement (By.tagName ("div")) |
De. xpath | localizează elemente prin 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] / form / table / tbody / tr [5] ")) |
Notă despre utilizarea findElement (By.cssSelector ())
By.cssSelector () nu acceptă caracteristica „conține” . Luați în considerare codul Selenium IDE de mai jos -
În Selenium IDE de mai sus, întregul test a trecut. Cu toate acestea, în scriptul Selenium WebDriver de mai jos, același test a generat o eroare deoarece WebDriver nu acceptă cuvântul cheie „conține” atunci când este utilizat în metoda By.cssSelector ().
Comenzi comune
Instanțierea elementelor web
În loc să folosim sintaxa lungă „driver.findElement (By.locator ())” de fiecare dată când veți accesa un anumit element, putem crea un obiect WebElement pentru acesta. Clasa WebElement este conținută în pachetul „org.openqa.selenium. *”.
Dând clic pe un element
Faceți clic este probabil cel mai comun mod de a interacționa cu elementele web . Metoda click () este utilizată pentru a simula clicul oricărui element. Următorul exemplu Selenium Java arată cum a fost utilizat clicul () pentru a face clic pe butonul „Conectare” al lui Mercury Tours.
Următoarele lucruri trebuie menționate atunci când se utilizează metoda click ().
- Nu ia niciun parametru / argument.
- Metoda așteaptă automat încărcarea unei noi pagini, dacă este cazul.
- Elementul care trebuie făcut clic trebuie să fie vizibil (înălțimea și lățimea nu trebuie să fie egale cu zero).
Obțineți comenzi
Obțineți comenzi pentru a prelua diverse informații importante despre pagină / element. Iată câteva comenzi importante de „obținere” pe care trebuie să le cunoașteți.
Comenzi | Utilizare |
---|---|
get () Exemplu de utilizare: |
|
getTitle () Exemplu de utilizare: |
|
getPageSource () Exemplu de utilizare: |
|
getCurrentUrl () Exemplu de utilizare: |
|
getText () Exemplu de utilizare: |
|
Navigați comenzile
Aceste comenzi vă permit să reîmprospătați, să intrați și să comutați înainte și înapoi între diferite pagini web.
navigați (). la () Exemplu de utilizare: |
|
navigate (). refresh () Exemplu de utilizare: |
|
navigate (). back () Exemplu de utilizare: |
|
navigate (). forward () Exemplu de utilizare: |
|
Închiderea și renunțarea la Windows Browser
close () Exemplu de utilizare: |
|
quit () Exemplu de utilizare: |
|
Pentru a ilustra clar diferența dintre close () și quit (), încercați să executați codul de mai jos. Folosește o pagină web care apare automat la o fereastră la încărcarea paginii și deschide alta după ieșire.
Observați că doar fereastra părinte a browserului a fost închisă și nu cele două ferestre pop-up.
Dar dacă utilizați quit (), toate ferestrele vor fi închise - nu doar cea părinte. Încercați să rulați codul de mai jos și veți observa că și cele două ferestre pop-up de mai sus vor fi închise automat.
pachet proiect nou;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;clasa publica PG3 {public static main main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = nou FirefoxDriver ();driver.get („http://www.popuptest.com/popuptest2.html”);driver.quit (); // folosind QUIT toate ferestrele se vor închide}}
Comutarea între cadre
Pentru a accesa elementele GUI într-un cadru, ar trebui mai întâi să direcționăm WebDriver să se concentreze mai întâi pe cadru sau pe fereastra pop-up înainte de a putea accesa elementele din ele. Să luăm, de exemplu, pagina web http://demo.guru99.com/selenium/deprecated.html
Această pagină are 3 cadre ale căror atribute „nume” sunt indicate mai sus. Dorim să accesăm linkul „Învechit” înconjurat deasupra în galben. Pentru a face acest lucru, trebuie mai întâi să instruim WebDriver să treacă la cadrul „classFrame” folosind metoda „switchTo (). Frame ()” . Vom folosi atributul nume al cadrului ca parametru pentru partea "cadru ()".
pachet proiect nou;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;clasa publica PG4 {public static main main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = nou FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Învechit")). faceți clic pe ();driver.close ();}}
După executarea acestui cod, veți vedea că cadrul „classFrame” este dus la pagina „API învechit”, ceea ce înseamnă că codul nostru a putut accesa cu succes linkul „Învechit”.
Comutarea între ferestrele pop-up
WebDriver permite afișarea ferestrelor pop-up, cum ar fi alertele, spre deosebire de Selenium IDE. Pentru a accesa elementele din alertă (cum ar fi mesajul pe care îl conține), trebuie să folosim metoda „switchTo (). Alert ()” . În codul de mai jos, vom folosi această metodă pentru a accesa caseta de alertă și apoi vom prelua mesajul acesteia folosind metoda „getText ()” , apoi vom închide automat caseta de alertă utilizând „switchTo (). Alert (). Accept () „ metoda.
Mai întâi, accesați http://jsbin.com/usidix/1 și faceți clic manual pe „Du-te!” butonul de acolo și vedeți singur textul mesajului.
Să vedem exemplul de cod Selenium pentru a face acest lucru-
pachetul meu pachet;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;clasă publică myclass {public static main main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = nou FirefoxDriver ();String alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value = \" Go! \ "]")). click ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);driver.quit ();}}
Pe consola Eclipse, observați că mesajul de alertă tipărit este:
Așteaptă
Există două tipuri de așteptări.
- Așteptare implicită - utilizată pentru a seta timpul de așteptare implicit pe tot parcursul programului
- Așteptare explicită - utilizată pentru a seta timpul de așteptare numai pentru o anumită instanță
Așteptați implicit
- Codul este mai simplu decât așteptările explicite.
- De obicei este declarat în partea de instanțare a codului.
- Veți avea nevoie doar de un pachet suplimentar pentru import.
Pentru a începe să utilizați o așteptare implicită, va trebui să importați acest pachet în codul dvs.
Apoi, în partea de instanțare a codului, adăugați acest lucru.
Așteptați explicit
Așteptările explicite se fac folosind clasele WebDriverWait și ExpectedCondition . Pentru următorul exemplu Selenium WebDriver, vom aștepta până la 10 secunde pentru ca un element al cărui id este „nume de utilizator” să devină vizibil înainte de a trece la următoarea comandă. Iată pașii.
Pasul 1
Importați aceste două pachete:
Pasul 2
Declarați o variabilă WebDriverWait. În acest exemplu, vom folosi „myWaitVar” ca nume al variabilei.
Pasul 3
Utilizați myWaitVar cu ExpectedConditions pe porțiuni în care aveți nevoie de așteptare explicită pentru a avea loc. În acest caz, vom folosi o așteptare explicită pentru intrarea „nume de utilizator” (Mercury Tours HomePage) înainte de a introduce textul „tutorial” pe el.
Condiții
Următoarele metode sunt utilizate în operațiuni condiționate și în buclă -
- isEnabled () este utilizat atunci când doriți să verificați dacă un anumit element este activat sau nu înainte de a executa o comandă.
- isDisplayed () este utilizat atunci când doriți să verificați dacă un anumit element este afișat sau nu înainte de a executa o comandă.
- isSelected () este utilizat atunci când doriți să verificați dacă este selectată o anumită casetă de selectare, buton radio sau opțiune dintr-o casetă derulantă . Nu funcționează pe alte elemente.
Folosirea ExpectedConditions
Clasa ExpectedConditions oferă un set mai larg de condiții pe care le puteți utiliza împreună cu metoda WebDriverWait's until ().
Mai jos sunt câteva dintre cele mai comune metode ExpectedConditions.
- alertIsPresent () - așteaptă până când se afișează o casetă de alertă.
- elementToBeClickable () - așteaptă până când un element este vizibil și, în același timp, activat. Exemplul de cod de seleniu de mai jos va aștepta până când elementul cu va deveni vizibil și activat mai întâi înainte de a atribui acel element ca o variabilă WebElement numită "txtUserName".
- frameToBeAvailableAndSwitchToIt () - așteaptă până când cadrul dat este deja disponibil și apoi trece automat la acesta.
Prinderea excepțiilor
Când utilizați isEnabled (), isDisplayed () și isSelected (), WebDriver presupune că elementul există deja pe pagină. În caz contrar, va arunca o NoSuchElementException . Pentru a evita acest lucru, ar trebui să folosim un bloc try-catch, astfel încât programul să nu fie întrerupt.
WebElement txtbox_username = driver.findElement (By.id ("nume de utilizator"));încerca{if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys („tutorial”);}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}
Dacă utilizați așteptări explicite, tipul de excepție pe care ar trebui să-l prindeți este „TimeoutException”.
rezumat
- Pentru a începe să utilizați API-ul WebDriver, trebuie să importați cel puțin aceste două pachete.
- org.openqa.selenium. *
- org.openqa.selenium.firefox.FirefoxDriver
- Metoda get () este echivalentul comenzii „open” a Selenium IDE.
- Localizarea elementelor în WebDriver se face folosind metoda findElement () .
- Următoarele sunt opțiunile disponibile pentru localizarea elementelor în WebDriver:
- De. numele clasei
- De. cssSelector
- De. id
- De. linkText
- De. Nume
- De. partialLinkText
- De. nume eticheta
- De. xpath
- By.cssSelector () nu acceptă caracteristica „conține” .
- Puteți instanția un element folosind clasa WebElement .
- Dând clic pe un element se face folosind metoda click () .
- WebDriver oferă aceste comenzi utile de obținere :
- obține()
- getTitle ()
- getPageSource ()
- getCurrentUrl ()
- getText ()
- WebDriver oferă aceste comenzi utile de navigare
- navigați (). înainte ()
- navigați (). înapoi ()
- navigheaza catre()
- navigate (). refresh ()
- Metodele close () și quit () sunt utilizate pentru a închide ferestrele browserului. Închidere () este folosit pentru a închide o singură fereastră; while quit () este folosit pentru a închide toate ferestrele asociate ferestrei părinte pe care obiectul WebDriver o controla.
- Metodele switchTo (). Frame () și switchTo (). Alert () sunt utilizate pentru a direcționa focalizarea WebDriver către un cadru sau, respectiv, alertă.
- Așteptările implicite sunt folosite pentru a seta timpul de așteptare pe tot parcursul programului, în timp ce așteptările explicite sunt utilizate numai pe porțiuni specifice.
- Puteți utiliza isEnabled (), isDisplayed (), isSelected () și o combinație de metode WebDriverWait și ExpectedConditions atunci când verificați starea unui element. Cu toate acestea, ele nu verifică dacă elementul nu există.
- Când isEnabled (), isDisplayed () sau isSelected () a fost apelat în timp ce elementul nu exista, WebDriver va arunca o NoSuchElementException .
- Când metodele WebDriverWait și ExpectedConditions au fost apelate în timp ce elementul nu exista, WebDriver arunca o excepție Timeout .
Notă:
driver.get (): este folosit pentru a accesa site-ul respectiv, dar nu menține istoricul browserului și cookie-urile, deci nu putem folosi butonul înainte și înapoi, dacă facem clic pe acesta, pagina nu va primi programul
driver.navigate (): este folosit pentru a accesa un anumit site web, dar menține istoricul browserului și cookie-urile, astfel încât să putem utiliza butonul înainte și înapoi pentru a naviga între pagini în timpul codificării Testcase