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:

  1. org.openqa.selenium.*– conține clasa WebDriver necesară pentru a instanția un nou browser încărcat cu un anumit driver
  2. 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.

  1. On Eclipsebara de meniu a lui, dați clic Run > Run.
  2. Anunturi Ctrl + F11 pentru a rula întregul cod.

Executarea testului

Dacă ai făcut totul corect, Eclipse ar scoate „Test trecut!”

Executarea testului

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.

Localizarea elementelor GUI

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 -

Notă despre utilizarea findElement(By.cssSelector())

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().

Notă despre utilizarea findElement(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.*”.

Instanțierea elementelor web

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.

Făcând clic pe un element

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:

  • Deschide automat o nouă fereastră de browser și preia pagina pe care o specificați în paranteze.
  • Este omologul lui Selenium Comanda „deschidere” a IDE.
  • Parametrul trebuie să fie a Şir obiect.
getTitle()

Exemplu de utilizare:

  • Nu are nevoie de parametri
  • Preia titlul paginii curente
  • Spațiile albe de început și de final 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
  • Preia șirul care reprezintă adresa URL curentă la care se uită browserul
getText ()

Exemplu de utilizare:

  • Preia textul interior al elementului pe care îl specificați

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:

  • Deschide automat o nouă fereastră de browser și preia pagina pe care o specificați în paranteze.
  • Face exact același lucru ca și get() metodă.
navigate().refresh()

Exemplu de utilizare:

  • Nu are nevoie de parametri.
  • 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 pagină din istoricul browserului.

Închiderea și închiderea browserului Windows

închide()

Exemplu de utilizare:

  • Nu are nevoie de parametri
  • Închide doar fereastra browserului pe care WebDriver o controlează în prezent.
părăsi()

Exemplu de utilizare:

  • Nu are nevoie de parametri
  • Închide toate ferestrele pe care le-a deschis WebDriver.

Închiderea și închiderea browserului Windows

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.

Închiderea și închiderea browserului Windows

Observați că numai fereastra browser-ului părinte a fost închisă și nu cele două ferestre pop-up.

Închiderea și închiderea browserului Windows

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

Comutarea între cadre

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.

Comutarea între pop-up Windows

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:

Comutarea între pop-up Windows

Așteaptă

Există două tipuri de așteptări.

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

Așteptați implicit

Apoi, în partea de instanțiere a codului dvs., adăugați aceasta.

Așteptați implicit

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:

Așteptați explicit

Pasul 2:

Declarați o variabilă WebDriverWait. În acest exemplu, vom folosi „myWaitVar” ca nume al variabilei.

Așteptați explicit

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.

Așteptați explicit

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ă.

Condițiile sunt activate()

  • 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ă.

Condițiile sunt afișate()

  • 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.

Condițiile sunt selectate()

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ă.

Utilizarea ExpectedConditions alertIsPresent()

  • 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”.

Utilizarea ExpectedConditions

  • frameToBeAvailableAndSwitchToIt() – Așteaptă până când cadrul dat este deja disponibil și apoi trece automat la acesta.

Utilizarea ExpectedConditions elementToBeClickable()

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”.

Prinderea excepțiilor

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 ce quit() este folosit pentru a închide toate ferestrele asociate ferestrei părinte pe care obiectul WebDriver o controla.
  • switchTo().frame() si switchTo().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 ce explicit 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.

Citește mai mult Readmore