Selenium Webdriver Java Primjer programa

Selenium Java Primjer

Korištenje Java klase “myclass” koju smo stvorili u prethodnom vodiču, pokušajmo stvoriti skriptu WebDriver koja bi:

Korak 1: donijeti Mercury Početna stranica Tours
Korak 2: potvrdite njegov naslov
Korak 3: ispisati rezultat usporedbe
Korak 4: zatvorite prije završetka cijelog programa.

Selenium WebDriver primjer koda

Ispod je stvarni WebDriver kod za logiku predstavljenu gornjim scenarijem

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();
    }

}

Napomena: Počinje Firefox 35, trebate koristiti gecko driver koji je izradila Mozilla da biste koristili Web Driver. Selenium 3.0, gecko i firefox imaju problema s kompatibilnošću i njihovo ispravno postavljanje moglo bi postati težak zadatak. Ako kod ne radi, vratite se na Firefox verzija 47 ili niža. Alternativno, svoje skripte možete pokrenuti na Chromeu. Selenium radi izvan okvira za Chrome. Trebate samo promijeniti 3 retka koda kako bi vaša skripta radila s Chromeom ili Firefox

Objašnjavajući šifru

Uvoz paketa

Za početak morate uvesti sljedeća dva paketa:

  1. org.openqa.selenium.*– sadrži klasu WebDriver potrebnu za instanciranje novog preglednika učitanog s određenim upravljačkim programom
  2. org.openqa.selenium.firefox.Firefoxvozač – sadrži FirefoxKlasa vozača potrebna za instanciranje a Firefox-specifični upravljački program na preglednik koji instancira klasa WebDriver

Ako vaš test zahtijeva kompliciranije radnje kao što je pristup drugoj klasi, snimanje zaslona preglednika ili manipuliranje vanjskim datotekama, svakako ćete morati uvesti više paketa.

Instanciranje objekata i varijabli

Obično se ovako instancira pogonski objekt.

WebDriver driver = new FirefoxDriver();

A FirefoxKlasa vozača bez parametara znači da je zadana Firefox profil će pokrenuti naš Java program. Zadana vrijednost Firefox profil je sličan pokretanju Firefox u sigurnom načinu rada (nisu učitana proširenja).

Radi praktičnosti, spremili smo osnovni URL i očekivani naslov kao varijable.

Pokretanje sesije preglednika

WebDriver's dobiti() koristi se za pokretanje nove sesije preglednika i usmjerava je na URL koji navedete kao njegov parametar.

driver.get(baseUrl);

Dobijte stvarni naslov stranice

Klasa WebDriver ima getTitle() metoda koja se uvijek koristi za dobivanje naslova trenutno učitane stranice.

actualTitle = driver.getTitle();

Usporedite očekivane i stvarne vrijednosti

Ovaj dio koda jednostavno koristi osnovni Java strukturu if-else za usporedbu stvarnog naslova s ​​očekivanim.

if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }

Prekid sesije preglednika

"Zatvoriti()” koristi se za zatvaranje prozora preglednika.

driver.close();

Prekid cijelog programa

Ako koristite ovu naredbu bez prethodnog zatvaranja svih prozora preglednika, cijeli Java program će završiti dok je prozor preglednika otvoren.

System.exit(0);

Izvođenje testa

Postoje dva načina za izvršavanje koda Eclipse SDI.

  1. On Eclipsena traci izbornika, kliknite Trči > Trči.
  2. Press Ctrl + F11 za pokretanje cijelog koda.

Izvođenje testa

Ako ste sve napravili kako treba, Eclipse ispisao bi "Test prošao!"

Izvođenje testa

Lociranje GUI elemenata

Lociranje elemenata u WebDriver-u vrši se pomoću "pronađiElement(Po.lokator())” metoda. Dio koda "lokator" isti je kao bilo koji od lokatora o kojima se prethodno raspravljalo u Selenium IDE poglavlja ovih udžbenika. Zapravo, preporučuje se da locirate GUI elemente pomoću IDE-a i nakon uspješne identifikacije izvezete kod u WebDriver.

Ovdje je Selenium primjer koda koji locira element prema njegovom ID-u. Facebook se koristi kao osnovni 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);
}
}

Koristili smo getTagName() metoda za izdvajanje naziva oznake tog određenog elementa čiji je ID "e-pošta". Kada se pokrene, ovaj kod bi trebao moći ispravno identificirati naziv oznake "input" i ispisati ga EclipseProzor konzole korisnika.

Lociranje GUI elemenata

Sažetak za lociranje elemenata

varijacija Description Uzorak
By.className pronalazi elemente na temelju vrijednosti atributa “class”. findElement(By.className(“someClassName”))
By.cssSelector pronalazi elemente na temelju pogonskog CSS Selector motora findElement(By.cssSelector(“input#email”))
By.id locira elemente prema vrijednosti njihovog "id" atributa findElement(By.id(“someId”))
 
By.linkText pronalazi element veze prema točnom tekstu koji prikazuje findElement(By.linkText(“REGISTRACIJA”))
 
Imenom locira elemente prema vrijednosti atributa “name”. findElement(By.name(“someName”))
 
By.partialLinkText locira elemente koji sadrže zadani tekst veze findElement(By.partialLinkText(“REG”))
 
By.tagName locira elemente prema njihovom nazivu oznake findElement(By.tagName(“div”))
 
By.xpath locira elemente putem XPath-a 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]”))

Napomena o korištenju findElement(By.cssSelector())

By.cssSelector() ne podržava značajku "sadrži". Razmotrite Selenium IDE kod ispod –

Napomena o korištenju findElement(By.cssSelector())

In Selenium IDE iznad, cijeli je test prošao. Međutim u Selenium WebDriver skripta u nastavku, isti je test generirao pogrešku jer WebDriver ne podržava ključnu riječ "contains" kada se koristi u metodi By.cssSelector().

Napomena o korištenju findElement(By.cssSelector())

Uobičajene naredbe

Instanciranje web elemenata

Umjesto korištenja duge sintakse "driver.findElement(By.locator())" svaki put kada pristupite određenom elementu, možemo instancirati WebElement objekt za njega. Klasa WebElement sadržana je u paketu “org.openqa.selenium.*”.

Instanciranje web elemenata

Klikom na element

Klikanje je možda najčešći način interakcije s web elementima. The click() Metoda se koristi za simulaciju klika bilo kojeg elementa. Sljedeće Selenium Java primjer pokazuje kako click() koristio se za klikanje Mercury Toursov gumb “Prijava”.

Klikom na element

Kada koristite metodu click(), potrebno je obratiti pozornost na sljedeće stvari.

  • Ne uzima nikakav parametar/argument.
  • Metoda automatski čeka da se učita nova stranica ako je primjenjiva.
  • Element na koji se klikne mora biti vidljiv (visina i širina ne smiju biti jednake nuli).

Nabavite naredbe

Naredbe Get dohvaćaju razne važne informacije o stranici/elementu. Evo nekoliko važnih naredbi "get" s kojima morate biti upoznati.

Naredbe Upotreba
dobiti()

Primjer upotrebe:

  • Automatski otvara novi prozor preglednika i dohvaća stranicu koju navedete unutar njegovih zagrada.
  • To je pandan od Selenium IDE naredba “otvori”.
  • Parametar mora biti a Niz objekt.
getTitle()

Primjer upotrebe:

  • Nema potrebe za parametrima
  • Dohvaća naslov trenutne stranice
  • Bijeli razmaci na početku i na kraju su odrezani
  • Vraća nulti niz ako stranica nema naslov
getPageSource()

Primjer upotrebe:

  • Nema potrebe za parametrima
  • Vraća izvorni kod stranice kao String vrijednost
getCurrentUrl()

Primjer upotrebe:

  • Nema potrebe za parametrima
  • Dohvaća niz koji predstavlja trenutni URL koji preglednik gleda
getText()

Primjer upotrebe:

  • Dohvaća unutarnji tekst elementa koji navedete

Navigacijske naredbe

Ove vam naredbe omogućuju osvježavanje, ulaženje i prebacivanje između različitih web stranica.

navigacija().do()

Primjer upotrebe:

  • Automatski otvara novi prozor preglednika i dohvaća stranicu koju navedete unutar njegovih zagrada.
  • Radi točno isto što i get() metoda.
navigacija().refresh()

Primjer upotrebe:

  • Nema potrebe za parametrima.
  • Osvježava trenutnu stranicu.
navigacija().natrag()

Primjer upotrebe:

  • Nema potrebe za parametrima
  • Vraća vas za jednu stranicu unatrag u povijesti preglednika.
navigacija().naprijed()

Primjer upotrebe:

  • Nema potrebe za parametrima
  • Vodi vas naprijed za jednu stranicu u povijesti preglednika.

Zatvaranje i izlazak iz preglednika Windows

Zatvoriti()

Primjer upotrebe:

  • Nema potrebe za parametrima
  • Zatvara samo prozor preglednika koji WebDriver trenutno kontrolira.
prestati()

Primjer upotrebe:

  • Nema potrebe za parametrima
  • Zatvara sve prozore koje je WebDriver otvorio.

Zatvaranje i izlazak iz preglednika Windows

Da bi se jasno ilustrirala razlika između close() međutim quit(), pokušajte izvršiti kod u nastavku. Koristi web stranicu koja automatski iskače prozor nakon učitavanja stranice i otvara drugi nakon izlaska.

Zatvaranje i izlazak iz preglednika Windows

Primijetite da je zatvoren samo nadređeni prozor preglednika, a ne dva skočna prozora.

Zatvaranje i izlazak iz preglednika Windows

Ali ako koristite quit(), zatvorit će se svi prozori – ne samo nadređeni. Pokušajte pokrenuti kod u nastavku i primijetit ćete da će se dva skočna prozora iznad automatski zatvoriti.

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
    }
}

Prebacivanje između okvira

Da bismo pristupili GUI elementima u Frameu, prvo trebamo uputiti WebDriver da se fokusira na okvir ili skočni prozor prije nego što možemo pristupiti elementima unutar njih. Uzmimo, na primjer, web stranicu https://demo.guru99.com/selenium/deprecated.html

Prebacivanje između okvira

Ova stranica ima 3 okvira čiji su atributi "naziv" navedeni gore. Želimo pristupiti vezi "Zastarjelo" koja je gore zaokružena žutom bojom. Da bismo to učinili, prvo moramo uputiti WebDriver da se prebaci na okvir "classFrame" koristeći “switchTo().frame()” metoda. Koristit ćemo atribut name okvira kao parametar za dio "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(); 
	    }
}

Nakon izvršavanja ovog koda, vidjet ćete da je okvir “classFrame” prebačen na stranicu “Deprecated API”, što znači da je naš kod uspješno mogao pristupiti vezi “Deprecated”.

Prebacivanje između skočnih prozora Windows

WebDriver omogućuje prikazivanje skočnih prozora poput upozorenja, za razliku od Selenium IDE. Za pristup elementima unutar upozorenja (kao što je poruka koju sadrži), moramo koristiti "switchTo().alert()" metoda. U donjem kodu koristit ćemo ovu metodu za pristup okviru s upozorenjem i zatim dohvatiti njegovu poruku pomoću "getText()" način, a zatim automatski zatvorite okvir s upozorenjem pomoću "switchTo().alert().accept()" metoda.

Prvo prijeđite na https://output.jsbin.com/usidix/1 i ručno kliknite "Kreni!" i sami pogledajte tekst poruke.

Prebacivanje između skočnih prozora Windows

Da vidimo Selenium primjer koda za ovo-

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();
       
    }
}

Na Eclipse konzole, primijetite da je ispisana poruka upozorenja:

Prebacivanje između skočnih prozora Windows

čeka

Postoje dvije vrste čekanja.

  1. Implicitno čekanje – koristi se za postavljanje zadanog vremena čekanja kroz cijeli program
  2. Eksplicitno čekanje – koristi se za postavljanje vremena čekanja samo za određenu instancu

Implicitno čekanje

  • Jednostavnije ga je kodirati nego eksplicitna čekanja.
  • Obično se deklarira u instancijskom dijelu koda.
  • Trebat će vam samo jedan dodatni paket za uvoz.

Da biste počeli koristiti implicitno čekanje, morali biste uvesti ovaj paket u svoj kod.

Implicitno čekanje

Zatim u dijelu vašeg koda za instanciranje dodajte ovo.

Implicitno čekanje

Eksplicitno čekanje

Eksplicitna čekanja provode se pomoću klasa WebDriverWait i ExpectedCondition. Za sljedeće Selenium Primjer WebDriver-a, pričekat ćemo do 10 sekundi da element čiji je ID "korisničko ime" postane vidljiv prije nego što pređemo na sljedeću naredbu. Evo koraka.

Korak 1:

Uvezite ova dva paketa:

Eksplicitno čekanje

Korak 2:

Deklarirajte varijablu WebDriverWait. U ovom primjeru koristit ćemo "myWaitVar" kao naziv varijable.

Eksplicitno čekanje

Korak 3:

Upotrijebite myWaitVar s ExpectedConditions na dijelovima gdje je potrebno eksplicitno čekanje. U ovom slučaju koristit ćemo eksplicitno čekanje na "korisničko ime" (Mercury Tours HomePage) unos prije nego što na njega upišemo tekst "tutorial".

Eksplicitno čekanje

Uvjeti

Sljedeće se metode koriste u uvjetnim operacijama i operacijama petlje —

  • isEnabled() se koristi kada želite provjeriti je li određeni element omogućen ili ne prije izvršavanja naredbe.

Uvjeti isEnabled()

  • isDisplayed() koristi se kada želite provjeriti je li određeni element prikazan ili ne prije izvršenja naredbe.

Uvjeti isDisplayed()

  • isSelected() koristi se kada želite provjeriti je li određena potvrdni okvir, radio gumb ili opciju u padajućem okviru je odabrano. Ne radi na drugim elementima.

Uvjeti isSelected()

Korištenje ExpectedConditions

Klasa ExpectedConditions nudi širi skup uvjeta koje možete koristiti u kombinaciji s WebDriverWait metodom until().

Ispod su neke od najčešćih metoda ExpectedConditions.

  • alertIsPresent() – čeka dok se ne prikaže okvir upozorenja.

Upotreba ExpectedConditions alertIsPresent()

  • elementToBeClickable() – Čeka dok element ne bude vidljiv i, u isto vrijeme, omogućen. Uzorak Selenium Kod u nastavku čekat će dok element s id=”username” ne postane vidljiv i najprije omogućen prije nego što dodijeli taj element kao varijablu WebElement pod nazivom “txtUserName”.

Korištenje ExpectedConditions

  • frameToBeAvailableAndSwitchToIt() – Čeka dok zadani okvir već bude dostupan, a zatim se automatski prebacuje na njega.

Upotreba ExpectedConditions elementToBeClickable()

Hvatanje iznimaka

Kada koristite isEnabled(), isDisplayed() i isSelected(), WebDriver pretpostavlja da element već postoji na stranici. U suprotnom, izbacit će a NoSuchElementException. Da bismo to izbjegli, trebali bismo koristiti blok try-catch kako program ne bi bio prekinut.

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());
 }

Ako koristite eksplicitna čekanja, vrsta iznimke koju biste trebali uhvatiti je "TimeoutException".

Hvatanje iznimaka

Rezime

  • Da biste počeli koristiti WebDriver API, morate uvesti barem ova dva paketa.
  • org.openqa.selenium.*
  • org.openqa.selenium.firefox.Firefoxvozač
  • The get() metoda je ekvivalent Selenium IDE naredba “otvori”.
  • Lociranje elemenata u WebDriver-u vrši se pomoću findElement() metoda.
  • Sljedeće su dostupne opcije za lociranje elemenata u WebDriveru:
  • By.className
  • By.cssSelector
  • By.id
  • By.linkText
  • Imenom
  • By.partialLinkText
  • By.tagName
  • By.xpath
  • By.cssSelector() ne podržati "sadrži" značajka.
  • Element možete instancirati pomoću klase WebElement.
  • Klik na element vrši se pomoću click() metoda.
  • WebDriver pruža ove korisne naredbe za dobivanje:
  • dobiti()
  • getTitle()
  • getPageSource()
  • getCurrentUrl()
  • getText()
  • WebDriver pruža ove korisne navigacijske naredbe
  • navigacija().naprijed()
  • navigacija().natrag()
  • navigacija().do()
  • navigacija().refresh()
  • Metode close() i quit() koriste se za zatvaranje prozora preglednika. Close() koristi se za zatvaranje jednog prozora; dok quit() koristi se za zatvaranje svih prozora povezanih s nadređenim prozorom koji je kontrolirao objekt WebDriver.
  • The switchTo().frame() međutim switchTo().alert() metode se koriste za usmjeravanje fokusa WebDrivera na okvir ili upozorenje.
  • Implicit waits koriste se za postavljanje vremena čekanja tijekom programa, dok explicit waits koriste se samo na određenim dijelovima.
  • Možete koristiti isEnabled(), isDisplayed(),isSelected() i kombinaciju WebDriverWait međutim ExpectedConditions metode pri provjeri stanja elementa. Međutim, oni ne provjeravaju ako element ne postoji.
  • Kada je isEnabled(), isDisplayed() ili isSelected() pozvan dok element nije postojao, WebDriver će izbaciti NoSuchElementException.
  • Kada su metode WebDriverWait i ExpectedConditions pozvane dok element nije postojao, WebDriver bi izbacio TimeoutException.

Bilješka:

driver.get(): Ova se metoda koristi za navigaciju do određene web stranice. Međutim, ne održava povijest preglednika niti kolačiće. Kao rezultat toga, gumbi naprijed i natrag neće raditi, a klik na njih neće zakazati navigaciju stranicom.

driver.navigate(): Ova se metoda također koristi za navigaciju do određene web stranice, ali održava povijest preglednika i kolačiće. To omogućuje korištenje gumba naprijed i natrag za navigaciju između stranica tijekom kodiranja testnog slučaja.