Selenium Webdriver Java Exemplu de program
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 Cod exemplu de WebDriver
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 URL-ul de bază ș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 adresa URL pe care o 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 cod exemplu care localizează un element după id-ul său. Facebook este folosit ca URL de bază.
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 extrage numele etichetei acelui element al cărui id este „email”. Când este rulat, acest cod ar trebui să poată identifica corect numele etichetei „input” și îl va tipări 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()
si 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 operațiunile condiționate și în buclă -
- 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 Codul de mai jos va aștepta până când elementul cu id=”nume utilizator” să devină vizibil și activat mai întâi î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”.
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.FirefoxŞofer
-
get()
metoda este echivalentul cu Selenium Comanda „deschidere” a IDE. - Localizarea elementelor în WebDriver se face prin utilizarea
findElement()
metodă. - Următoarele sunt opțiunile disponibile pentru localizarea elementelor în WebDriver:
- După.className
- De.cssSelector
- Prin.id
- Prin.linkText
- Dupa nume
- De.partialLinkText
- By.tagName
- Prin.xpath
- By.cssSelector() nu sprijini „conține” caracteristică.
- Puteți instanția un element folosind clasa WebElement.
- Făcând clic pe un element se face utilizând
click()
metodă. - WebDriver oferă aceste comenzi get utile:
- obține()
- getTitle()
- getPageSource()
- getCurrentUrl()
- getText ()
- WebDriver oferă aceste comenzi utile de navigare
- navigate().forward()
- navigate().back()
- navigheaza catre()
- navigate().refresh()
- Metodele close() și quit() sunt folosite pentru a închide ferestrele browserului.
Close()
este folosit pentru a închide o singură fereastră; in timp cequit()
este folosit pentru a închide toate ferestrele asociate ferestrei părinte pe care obiectul WebDriver o controla. -
switchTo().frame()
siswitchTo().alert()
metodele sunt folosite pentru a direcționa concentrarea WebDriver asupra unui cadru sau, respectiv, alertă. Implicit waits
sunt folosite pentru a seta timpul de așteptare pe tot parcursul programului, în timp ceexplicit waits
sunt utilizate numai pe anumite porțiuni.- Puteți utiliza isEnabled(), isDisplayed(), isSelected() și o combinație de WebDriverWait si Condiții așteptate metode la verificarea stării unui element. Cu toate acestea, ei nu verifică dacă elementul nu există.
- Când isEnabled(), isDisplayed(), sau isSelected() a fost apelat în timp ce elementul nu exista, WebDriver va lansa un NoSuchElementException.
- Când metodele WebDriverWait și ExpectedConditions au fost apelate în timp ce elementul nu exista, WebDriver ar arunca un
TimeoutException
.
Notă:
driver.get()
: Această metodă este utilizată pentru a naviga la un anumit site web. Cu toate acestea, nu menține istoricul browserului sau cookie-urile. Ca urmare, butoanele înainte și înapoi nu vor funcționa, iar făcând clic pe ele nu se va programa navigarea în pagină.
driver.navigate()
: Această metodă este folosită și pentru a naviga la un anumit site web, dar menține istoricul browserului și cookie-urile. Acest lucru permite ca butoanele înainte și înapoi să fie utilizate pentru navigarea între pagini în timp ce se codifică un caz de testare.