Primul script Selenium Webdriver: Exemplu de cod de exemplu JAVA

Cuprins:

Anonim

Folosind clasa Java „myclass” pe care am creat-o în tutorialul anterior, să încercăm să creăm un script WebDriver care să:

  1. preluați pagina de pornire a lui Mercury Tours
  2. verificați titlul acestuia
  3. tipăriți rezultatul comparației
  4. î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:

  1. org.openqa.selenium. * - conține clasa WebDriver necesară pentru crearea unui nou browser încărcat cu un driver specific
  2. 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.

  1. În bara de meniu a Eclipsei, faceți clic pe Executare> Executare.
  2. 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:
  • Deschide automat o nouă fereastră de browser și preia pagina pe care o specificați în paranteze.
  • Este contrapartida comenzii „deschise” a Selenium IDE.
  • Parametrul trebuie să fie un obiect String .
getTitle () Exemplu de utilizare:
  • Nu are nevoie de parametri
  • Descarcă titlul paginii curente
  • Spațiile albe de conducere și spate sunt tăiate
  • Returnează un șir nul dacă pagina nu are titlu
getPageSource () Exemplu de utilizare:
  • Nu are nevoie de parametri
  • Returnează codul sursă al paginii ca valoare String
getCurrentUrl () Exemplu de utilizare:
  • Nu are nevoie de parametri
  • Preluează șirul care reprezintă adresa URL curentă la care se uită browserul
getText () Exemplu de utilizare:
  • Preluează textul interior al elementului pe care îl specificați

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:
  • Deschide automat o nouă fereastră de browser și preia pagina pe care o specificați în paranteze.
  • Face exact același lucru ca și metoda get ().
navigate (). refresh () Exemplu de utilizare:
  • Nu are nevoie de parametri.
  • Se reîmprospătează pagina curentă.
navigate (). back () Exemplu de utilizare:
  • Nu are nevoie de parametri
  • Vă duce înapoi cu o pagină din istoricul browserului.
navigate (). forward () Exemplu de utilizare:
  • Nu are nevoie de parametri
  • Vă duce înainte cu o singură pagină din istoricul browserului.

Închiderea și renunțarea la Windows Browser

close () Exemplu de utilizare:
  • Nu are nevoie de parametri
  • Închide doar fereastra browserului pe care WebDriver o controlează în prezent .
quit () Exemplu de utilizare:
  • Nu are nevoie de parametri
  • Închide toate ferestrele deschise de WebDriver.

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.

  1. Așteptare implicită - utilizată pentru a seta timpul de așteptare implicit pe tot parcursul programului
  2. 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