Selenium Webdriver Java Exemplu de program
โก Rezumat inteligent
Selenium webdriver Java Exemplul de program vฤ prezintฤ primul script de automatizare complet. LessAcoperฤ configurarea mediului, localizarea elementelor, trimiterea intrฤrii, navigarea, validarea, aศteptฤrile, gestionarea excepศiilor ศi cele mai bune practici pentru teste WebDriver fiabile.

Selenium Java Exemplu
Utilizarea Java clasa โmyclassโ pe care am creat-o รฎn tutorialul anterior, sฤ รฎncercฤm sฤ creฤm un script WebDriver care ar:
Pasul 1: aduc Mercury Pagina de pornire a Tours
Pasul 2: verifica titlul acestuia
Pasul 3: tipฤriศi rezultatul comparaศiei
Pasul 4: รฎnchideศi-l รฎnainte de a รฎncheia รฎntregul program.
Selenium Exemplu de driver web Code
Mai jos este codul WebDriver real pentru logica prezentatฤ de scenariul de mai sus
package newproject; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; //comment the above line and uncomment below line to use Chrome //import org.openqa.selenium.chrome.ChromeDriver; public class PG1 { public static void main(String[] args) { // declaration and instantiation of objects/variables System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); //comment the above 2 lines and uncomment below 2 lines to use Chrome //System.setProperty("webdriver.chrome.">driver","G:\\chromedriver.exe"); //WebDriver driver = new ChromeDriver(); String baseUrl = "https://demo.guru99.com/test/newtours/"; String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = ""; // launch Fire fox and direct it to the Base URL driver.get(baseUrl); // get the actual value of the title actualTitle = driver.getTitle(); /* * compare the actual title of the page with the expected one and print * the result as "Passed" or "Failed" */ if (actualTitle.contentEquals(expectedTitle)){ System.out.println("Test Passed!"); } else { System.out.println("Test Failed"); } //close Fire fox driver.close(); } }
Notฤ: รncepe Firefox 35, trebuie sฤ utilizaศi driverul gecko creat de Mozilla pentru a utiliza Web Driver. Selenium 3.0, gecko ศi firefox au probleme de compatibilitate ศi setarea lor corectฤ ar putea deveni o sarcinฤ dificilฤ. Dacฤ codul nu funcศioneazฤ, faceศi downgrade la Firefox versiunea 47 sau mai jos. Alternativ, puteศi rula scripturile pe Chrome. Selenium funcศioneazฤ imediat pentru Chrome. Trebuie doar sฤ schimbaศi 3 linii de cod pentru ca scriptul sฤ funcศioneze cu Chrome sau Firefox
Explicarea codului
Importul pachetelor
Pentru a รฎncepe, trebuie sฤ importaศi urmฤtoarele douฤ pachete:
- org.openqa.selenium.*โ conศine clasa WebDriver necesarฤ pentru a instanศia un nou browser รฎncฤrcat cu un anumit driver
- org.openqa.selenium.firefox.Firefoxลofer โ conศine FirefoxClasa de ศoferi necesarฤ pentru a instanศia a Firefox- driver specific pe browser instanศiat de clasa WebDriver
Dacฤ testul dvs. necesitฤ acศiuni mai complicate, cum ar fi accesarea unei alte clase, realizarea de capturi de ecran de browser sau manipularea fiศierelor externe, cu siguranศฤ va trebui sฤ importaศi mai multe pachete.
Instanศierea obiectelor ศi variabilelor
รn mod normal, aศa este instanศiat un obiect driver.
WebDriver driver = new FirefoxDriver();
A FirefoxClasa de ศofer fฤrฤ parametri รฎnseamnฤ cฤ implicit Firefox profilul va fi lansat de cฤtre nostru Java program. Implicit Firefox profilul este similar cu lansarea Firefox รฎn modul sigur (nu sunt รฎncฤrcate extensii).
Pentru comoditate, am salvat Baza URL ศi titlul aศteptat ca variabile.
Lansarea unei sesiuni de browser
WebDriver-uri obศine() Metoda este utilizatฤ pentru a lansa o nouฤ sesiune de browser ศi o direcศioneazฤ cฤtre URL pe care รฎl specificaศi ca parametru.
driver.get(baseUrl);
Obศineศi titlul real al paginii
Clasa WebDriver are getTitle() metodฤ care este รฎntotdeauna folositฤ pentru a obศine titlul paginii รฎncฤrcate curent.
actualTitle = driver.getTitle();
Comparaศi valorile aศteptate ศi reale
Aceastฤ porศiune a codului foloseศte pur ศi simplu un element de bazฤ Java structurฤ if-else pentru a compara titlul real cu cel aศteptat.
if (actualTitle.contentEquals(expectedTitle)){ System.out.println("Test Passed!"); } else { System.out.println("Test Failed"); }
รncheierea unei sesiuni de browser
"รฎnchide()โ este folositฤ pentru a รฎnchide fereastra browserului.
driver.close();
รncheierea รฎntregului program
Dacฤ utilizaศi aceastฤ comandฤ fฤrฤ a รฎnchide mai รฎntรขi toate ferestrele browserului, รฎntregul dvs Java programul se va รฎncheia รฎn timp ce lasฤ fereastra browserului deschisฤ.
System.exit(0);
Executarea testului
Existฤ douฤ moduri de a executa codul รฎn Eclipse SDI.
- On Eclipsebara de meniu a lui, daศi clic Run > Run.
- Anunturi Ctrl + F11 pentru a rula รฎntregul cod.
Dacฤ ai fฤcut totul corect, Eclipse ar scoate โTest trecut!โ
Localizarea elementelor GUI
Localizarea elementelor รฎn WebDriver se face prin utilizarea โfindElement(De.Locator())โ metoda. Partea โlocatorโ a codului este aceeaศi cu oricare dintre locatorii discutaศi anterior รฎn Selenium IDE capitole din aceste tutoriale. De fapt, se recomandฤ sฤ localizaศi elementele GUI folosind IDE ศi, odatฤ identificate cu succes, sฤ exportaศi codul รฎn WebDriver.
Aici este o Selenium exemplu de cod care localizeazฤ un element dupฤ ID-ul sฤu. Facebook este folosit ca element de bazฤ URL.
package newproject; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class PG2 { public static void main(String[] args) { System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe"); WebDriver driver = new 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 getTagName() metodฤ de a extracnumele etichetei elementului respectiv al cฤrui ID este โemailโ. Cรขnd este rulat, acest cod ar trebui sฤ poatฤ identifica corect numele etichetei โinputโ ศi รฎl va afiศa pe Eclipsefereastra Consolei lui.
Rezumat pentru localizarea elementelor
| Variaศie | Descriere | Eลantion |
|---|---|---|
| Dupฤ.className | gฤseศte elemente pe baza valorii atributului โclasฤโ. | findElement(By.className(โsomeClassNameโ)) |
| De.cssSelector | gฤseศte elemente pe baza motorului CSS Selector al driverului | findElement(By.cssSelector(โinput#emailโ)) |
| Prin.id | localizeazฤ elementele dupฤ valoarea atributului lor โidโ. |
findElement(By.id(โsomeIdโ)) |
| Prin.linkText | gฤseศte un element de legฤturฤ dupฤ textul exact pe care รฎl afiศeazฤ |
findElement(By.linkText(โรNREGISTRAREโ)) |
| Dupa nume | localizeazฤ elemente dupฤ valoarea atributului โnumeโ. |
findElement(Dupฤ.nume(โuneleNumeโ)) |
| De.partialLinkText | localizeazฤ elementele care conศin textul link-ului dat |
findElement(By.partialLinkText(โREGโ)) |
| By.tagName | localizeazฤ elementele dupฤ numele etichetei lor |
findElement(By.tagName(โdivโ)) |
| Prin.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ฤ funcศia โconศineโ. Considera Selenium Codul IDE de mai jos -
In Selenium IDE de mai sus, รฎntregul test a trecut. Cu toate acestea, รฎn Selenium Scriptul 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 instanศia un obiect WebElement pentru acesta. Clasa WebElement este conศinutฤ รฎn pachetul โorg.openqa.selenium.*โ.
Fฤcรขnd clic pe un element
Fฤcรขnd clic este poate cel mai comun mod de a interacศiona cu elementele web. The click() metoda este folositฤ pentru a simula clicul oricฤrui element. Urmฤtoarele Selenium Java exemplu aratฤ cum click() a fost folosit pentru a da clic pe Mercury Butonul โConectareโ al Tururilor.
Urmฤtoarele lucruri trebuie remarcate atunci cรขnd utilizaศi metoda click().
- Nu ia niciun parametru/argument.
- Metoda aศteaptฤ automat รฎncฤrcarea unei noi pagini, dacฤ este cazul.
- Elementul pe care se face clic trebuie sฤ fie vizibil (รฎnฤlศimea ศi lฤศimea nu trebuie sฤ fie egale cu zero).
Obศineศi comenzi
Comenzile Get preia diverse informaศii importante despre paginฤ/element. Iatฤ cรขteva comenzi importante โobศineโ cu care trebuie sฤ fii familiarizat.
| Comenzi | Folosire |
|---|---|
| obศine()
Exemplu de utilizare: |
|
| getTitle()
Exemplu de utilizare: |
|
| getPageSource()
Exemplu de utilizare: |
|
| getCurrentUrl()
Exemplu de utilizare: |
|
| getText ()
Exemplu de utilizare: |
|
Navigaศi comenzi
Aceste comenzi vฤ permit sฤ reรฎmprospฤtaศi, sฤ accesaศi ศi sฤ comutaศi รฎnainte ศi รฎnapoi รฎntre diferite pagini web.
| navigheaza catre()
Exemplu de utilizare: |
|
| navigate().refresh()
Exemplu de utilizare: |
|
| navigate().back()
Exemplu de utilizare: |
|
| navigate().forward()
Exemplu de utilizare: |
|
รnchiderea ศi รฎnchiderea browserului Windows
| รฎnchide()
Exemplu de utilizare: |
|
| pฤrฤsi()
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 deschide automat o fereastrฤ la รฎncฤrcarea paginii ศi deschide o altฤ fereastrฤ dupฤ ieศire.
Observaศi cฤ numai fereastra browser-ului pฤrinte 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 se vor รฎnchide automat.
package newproject; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class PG3 { public static void main(String[] args) { System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.get("http://www.popuptest.com/popuptest2.html"); driver.quit(); // using QUIT all windows will close } }
Comutarea รฎntre cadre
Pentru a accesa elementele GUI รฎntr-un cadru, ar trebui mai รฎntรขi sฤ direcศionฤm WebDriver sฤ se concentreze pe cadru sau pe fereastra pop-up รฎnainte de a putea accesa elementele din ele. Sฤ luฤm, de exemplu, pagina web https://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 โDepreciatโ รฎnconjurat mai sus cu galben. Pentru a face acest lucru, trebuie mai รฎntรขi sฤ รฎi instruim pe WebDriver sฤ comute la cadrul โclassFrameโ folosind โswitchTo().frame()โ metodฤ. Vom folosi atributul nume al cadrului ca parametru pentru partea โframe()โ.
package newproject; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class PG4 { public static void main(String[] args) { System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/selenium/deprecated.html"); driver.switchTo().frame("classFrame"); driver.findElement(By.linkText("Deprecated")).click(); driver.close(); } }
Dupฤ executarea acestui cod, veศi vedea cฤ cadrul โclassFrameโ este dus la pagina โDeprecated APIโ, ceea ce รฎnseamnฤ cฤ codul nostru a reuศit sฤ acceseze linkul โDeprecatedโ.
Comutarea รฎntre pop-up Windows
WebDriver permite afiศarea ferestrelor pop-up precum alertele, spre deosebire de รฎn Selenium IDE. Pentru a accesa elementele din alertฤ (cum ar fi mesajul pe care รฎl conศine), trebuie sฤ folosim "switchTo().alert()" metodฤ. รn codul de mai jos, vom folosi aceastฤ metodฤ pentru a accesa caseta de alertฤ ศi apoi pentru a prelua mesajul acesteia folosind "getText()" metoda, apoi รฎnchideศi automat caseta de alertฤ folosind "switchTo().alert().accept()" metodฤ.
รn primul rรขnd, du-te la https://output.jsbin.com/usidix/1 ศi faceศi clic manual pe โGo!โ butonul de acolo ศi vedeศi singur textul mesajului.
Sฤ vedem Selenium exemplu de cod pentru a face asta -
package mypackage; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class myclass { public static void main(String[] args) { System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe"); WebDriver driver = new 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 Eclipse console, observaศi cฤ mesajul de alertฤ tipฤrit este:
Aศteaptฤ
Existฤ douฤ tipuri de aศteptฤri.
- Aศteptare implicitฤ โ folosit pentru a seta timpul de aศteptare implicit pe tot parcursul programului
- Explicit wait โ folosit pentru a seta timpul de aศteptare numai pentru o anumitฤ instanศฤ
Aศteptaศi implicit
- Este mai simplu de codat decรขt Explicit Waits.
- Este de obicei declarat รฎn partea de instanศiere a codului.
- Veศi avea nevoie de un singur pachet suplimentar pentru a importa.
Pentru a รฎncepe sฤ utilizaศi o aศteptare implicitฤ, ar trebui sฤ importaศi acest pachet รฎn codul dvs.
Apoi, รฎn partea de instanศiere a codului dvs., adฤugaศi aceasta.
Aศteptaศi explicit
Aศteptฤrile explicite sunt efectuate folosind clasele WebDriverWait ศi ExpectedCondition. Pentru urmatoarele Selenium Exemplu 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:
Importฤ 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 รฎn porศiunile รฎn care aveศi nevoie de aศteptarea explicitฤ. รn acest caz, vom folosi aศteptarea explicitฤ pe โnume de utilizatorโ (Mercury Turs HomePage) รฎnainte de a introduce textul โtutorialโ pe el.
Condiลฃii
Urmฤtoarele metode sunt utilizate รฎn condiศional ศi รฎn tehnica de calculping operaศiuni โ
- este activat() este folosit atunci cรขnd doriศi sฤ verificaศi dacฤ un anumit element este activat sau nu รฎnainte de a executa o comandฤ.
- este afisat() este folosit atunci cรขnd doriศi sฤ verificaศi dacฤ un anumit element este afiศat sau nu รฎnainte de a executa o comandฤ.
- este selectat() este folosit atunci cรขnd doriศi sฤ verificaศi dacฤ un anumit casetฤ de selectare, buton radio sau opศiune รฎntr-o casetฤ derulantฤ este selectat. Nu funcศioneazฤ pe alte elemente.
Utilizarea ExpectedConditions
Clasa ExpectedConditions oferฤ un set mai larg de condiศii pe care le puteศi utiliza รฎmpreunฤ cu metoda until() a lui WebDriverWait.
Mai jos sunt cรขteva dintre cele mai comune metode ExpectedConditions.
- alertIsPresent() โ aศteaptฤ pรขnฤ cรขnd este afiศatฤ o casetฤ de alertฤ.
- elementToBeClickable() โ Aศteaptฤ pรขnฤ cรขnd un element este vizibil ศi, รฎn acelaศi timp, activat. Proba Selenium Code mai jos se va aศtepta pรขnฤ cรขnd elementul cu id="username" devine vizibil ศi activat รฎnainte de a atribui acel element ca 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 a 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("username")); try{ 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 identificaศi este โTimeoutExceptionโ.

.png)
.png)
.png)
.png)
.png)
.png)

.png)


.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)