Selenium Webdriver Java Programeksempel (eksempelkode)

Selenium Java Eksempel

Brug af Java klasse "myclass", som vi oprettede i den forrige tutorial, lad os prøve at oprette et WebDriver-script, der ville:

Trin 1: hente Mercury Tours' hjemmeside
Trin 2: bekræfte dens titel
Trin 3: udskrive resultatet af sammenligningen
Trin 4: luk den, før du afslutter hele programmet.

Selenium WebDriver eksempelkode

Nedenfor er den faktiske WebDriver-kode for logikken præsenteret af scenariet ovenfor

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 = "http://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();
    }

}

Bemærk: Starter Firefox 35, skal du bruge gekko-driver oprettet af Mozilla for at bruge Web Driver. Selenium 3.0, gekko og firefox har kompatibilitetsproblemer, og at indstille dem korrekt kan blive en op ad bakke opgave. Hvis koden ikke virker, nedgrader til Firefox version 47 eller derunder. Alternativt kan du køre dine scripts på Chrome. Selenium fungerer ud af æsken til Chrome. Du skal blot ændre 3 linjer kode for at få dit script til at fungere med Chrome eller Firefox

Forklaring af koden

Import af pakker

For at komme i gang skal du importere følgende to pakker:

  1. org.openqa.selenium.*– indeholder den WebDriver-klasse, der er nødvendig for at instantiere en ny browser indlæst med en bestemt driver
  2. org.openqa.selenium.firefox.FirefoxChauffør – indeholder FirefoxDriverklasse er nødvendig for at instantiere en Firefox-specifik driver til browseren instansieret af WebDriver-klassen

Hvis din test har brug for mere komplicerede handlinger, såsom at få adgang til en anden klasse, tage browserskærmbilleder eller manipulere eksterne filer, skal du helt sikkert importere flere pakker.

Instantiering af objekter og variabler

Normalt er det sådan, et driverobjekt instantieres.

WebDriver driver = new FirefoxDriver();

A FirefoxDriverklasse uden parametre betyder, at standarden Firefox profil vil blive lanceret af vores Java program. Standarden Firefox profil ligner lancering Firefox i sikker tilstand (ingen udvidelser er indlæst).

For nemheds skyld gemte vi base-URL'en og den forventede titel som variabler.

Start af en browsersession

WebDrivers få() metode bruges til at starte en ny browsersession og dirigerer den til den URL, du angiver som parameter.

driver.get(baseUrl);

Få den faktiske sidetitel

WebDriver-klassen har getTitle () metode, der altid bruges til at få sidetitlen på den aktuelt indlæste side.

actualTitle = driver.getTitle();

Sammenlign de forventede og faktiske værdier

Denne del af koden bruger simpelthen en grundlæggende Java if-else struktur for at sammenligne den faktiske titel med den forventede.

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

Afslutning af en browsersession

Den "tæt()”-metoden bruges til at lukke browservinduet.

driver.close();

Afslutning af hele programmet

Hvis du bruger denne kommando uden først at lukke alle browservinduer, vil hele din Java programmet afsluttes, mens browservinduet forbliver åbent.

System.exit(0);

Kører testen

Der er to måder at udføre kode på Eclipse SDI.

  1. On Eclipses menulinje, klik Kør > Kør.
  2. Presse Ctrl + F11 at køre hele koden.

Kører testen

Hvis du gjorde alt rigtigt, Eclipse ville udsende "Test bestået!"

Kører testen

Lokalisering af GUI-elementer

Lokalisering af elementer i WebDriver udføres ved at bruge "findElement(Af.locator())” metode. "Lokator"-delen af ​​koden er den samme som enhver af lokalisatorerne, der tidligere er diskuteret i Selenium IDE kapitler i disse selvstudier. Faktisk anbefales det, at du finder GUI-elementer ved hjælp af IDE og eksporterer koden til WebDriver, når de er identificeret.

Her er en Selenium eksempelkode, der lokaliserer et element ved dets id. Facebook bruges som basis-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);
}
}

Vi brugte getTagName() metode til at udtrække tagnavnet på det pågældende element, hvis id er "e-mail". Når den køres, skulle denne kode være i stand til korrekt at identificere tagnavnet "input" og vil udskrive det på Eclipse's konsolvindue.

Lokalisering af GUI-elementer

Sammenfatning for lokalisering af elementer

Variation Description Prøve
Efter.klassenavn finder elementer baseret på værdien af ​​"class"-attributten findElement(By.className(“nogetKlassenavn”))
By.cssSelector finder elementer baseret på førerens underliggende CSS Selector-motor findElement(By.cssSelector(“input#email”))
Af.id lokaliserer elementer ud fra værdien af ​​deres "id"-attribut findElement(By.id(“someId”))
 
By.linkText finder et linkelement ved den nøjagtige tekst, det viser findElement(By.linkText(“REGISTRERING”))
 
Ved navn lokaliserer elementer efter værdien af ​​"name"-attributten findElement(By.name(“noget Navn”))
 
By.partialLinkText lokaliserer elementer, der indeholder den givne linktekst findElement(By.partialLinkText(“REG”))
 
By.tagName lokaliserer elementer ved deres tagnavn findElement(By.tagName(“div”))
 
Af.xpath lokaliserer elementer via 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]”))

Bemærk om brug af findElement(By.cssSelector())

By.cssSelector() understøtter ikke funktionen "indeholder". Overvej Selenium IDE-kode nedenfor -

Bemærk om brug af findElement(By.cssSelector())

In Selenium IDE ovenfor bestod hele testen. Dog i Selenium WebDriver-scriptet nedenfor, den samme test genererede en fejl, fordi WebDriver ikke understøtter nøgleordet "contains", når det bruges i By.cssSelector()-metoden.

Bemærk om brug af findElement(By.cssSelector())

Almindelige kommandoer

Instantiering af webelementer

I stedet for at bruge den lange "driver.findElement(By.locator())"-syntaks, hver gang du får adgang til et bestemt element, kan vi instansiere et WebElement-objekt for det. WebElement-klassen er indeholdt i pakken "org.openqa.selenium.*".

Instantiering af webelementer

Klik på et element

Klik er måske den mest almindelige måde at interagere med webelementer på. Det click() metode bruges til at simulere klik på ethvert element. Følgende Selenium Java eksempel viser hvordan click() blev brugt til at klikke på Mercury Tours' "Log ind"-knap.

Klik på et element

Følgende ting skal noteres, når du bruger click()-metoden.

  • Det kræver ikke nogen parameter/argument.
  • Metoden venter automatisk på, at en ny side indlæses, hvis det er relevant.
  • Elementet, der skal klikkes på, skal være synligt (højde og bredde må ikke være lig nul).

Få kommandoer

Hent kommandoer henter forskellige vigtige oplysninger om siden/elementet. Her er nogle vigtige "hent"-kommandoer, du skal være bekendt med.

Kommandoer Brug
få()

Eksempel på brug:

  • Den åbner automatisk et nyt browservindue og henter den side, du angiver inden for dens parentes.
  • Det er modstykket til Selenium IDE's "åbn" kommando.
  • Parameteren skal være en String objekt.
getTitle ()

Eksempel på brug:

  • Behøver ingen parametre
  • Henter titlen på den aktuelle side
  • Førende og efterstillede hvide rum er trimmet
  • Returnerer en nul-streng, hvis siden ikke har nogen titel
getPageSource()

Eksempel på brug:

  • Behøver ingen parametre
  • Returnerer sidens kildekode som en strengværdi
getCurrentUrl()

Eksempel på brug:

  • Behøver ingen parametre
  • Henter strengen, der repræsenterer den aktuelle URL, som browseren kigger på
getText ()

Eksempel på brug:

  • Henter den indre tekst af det element, du angiver

Naviger i kommandoer

Disse kommandoer giver dig mulighed for at opdatere, gå ind i og skifte frem og tilbage mellem forskellige websider.

naviger().to()

Eksempel på brug:

  • Den åbner automatisk et nyt browservindue og henter den side, du angiver inden for dens parentes.
  • Den gør præcis det samme som get() fremgangsmåde.
navigate().refresh()

Eksempel på brug:

  • Behøver ingen parametre.
  • Det opdaterer den aktuelle side.
naviger().tilbage()

Eksempel på brug:

  • Behøver ingen parametre
  • Tager dig én side tilbage i browserens historik.
navigate().forward()

Eksempel på brug:

  • Behøver ingen parametre
  • Tager dig en side frem i browserens historik.

Lukning og afslutning af browser Windows

tæt()

Eksempel på brug:

  • Behøver ingen parametre
  • Den lukker kun det browservindue, som WebDriver i øjeblikket kontrollerer.
Afslut()

Eksempel på brug:

  • Behøver ingen parametre
  • Den lukker alle vinduer, som WebDriver har åbnet.

Lukning og afslutning af browser Windows

For tydeligt at illustrere forskellen mellem close() og quit(), prøv at udføre koden nedenfor. Den bruger en webside, der automatisk dukker et vindue op ved sideindlæsning og åbner et andet efter at have afsluttet.

Lukning og afslutning af browser Windows

Bemærk, at kun det overordnede browservindue blev lukket og ikke de to pop op-vinduer.

Lukning og afslutning af browser Windows

Men hvis du bruger quit(), lukkes alle vinduer - ikke kun det overordnede. Prøv at køre koden nedenfor, og du vil bemærke, at de to pop-ups ovenfor automatisk også vil blive lukket.

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

Skift mellem rammer

For at få adgang til GUI-elementer i en Frame, bør vi først bede WebDriver om at fokusere på rammen eller pop op-vinduet, før vi kan få adgang til elementer i dem. Lad os for eksempel tage websiden http://demo.guru99.com/selenium/deprecated.html

Skift mellem rammer

Denne side har 3 rammer, hvis "navn"-attributter er angivet ovenfor. Vi ønsker at få adgang til linket "Forældet" omkranset ovenfor med gult. For at gøre det skal vi først instruere WebDriver om at skifte til "classFrame"-rammen ved hjælp af "switchTo().frame()" metode. Vi bruger rammens name-attribut som parameter for "frame()"-delen.

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("http://demo.guru99.com/selenium/deprecated.html");
	        driver.switchTo().frame("classFrame");
	        driver.findElement(By.linkText("Deprecated")).click();
	        driver.close(); 
	    }
}

Efter at have udført denne kode, vil du se, at "classFrame"-rammen føres til siden "Deprecated API", hvilket betyder, at vores kode med succes kunne få adgang til "Deprecated"-linket.

Skift mellem pop-up Windows

WebDriver tillader pop-up-vinduer som advarsler at blive vist, i modsætning til i Selenium IDE. For at få adgang til elementerne i advarslen (såsom meddelelsen, den indeholder), skal vi bruge "switchTo().alert()" metode. I koden nedenfor vil vi bruge denne metode til at få adgang til advarselsboksen og derefter hente dens besked ved hjælp af "getText()" metode, og luk derefter automatisk advarselsboksen ved hjælp af "switchTo().alert().accept()" fremgangsmåde.

Gå først over til https://output.jsbin.com/usidix/1 og klik manuelt på "Go!" knappen der og se selv beskedteksten.

Skift mellem pop-up Windows

Lad os se Selenium eksempelkode til at gøre dette-

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

På Eclipse konsol, bemærk, at den udskrevne advarselsmeddelelse er:

Skift mellem pop-up Windows

Venter

Der er to slags ventetider.

  1. Implicit ventetid – bruges til at indstille standardventetiden gennem hele programmet
  2. Eksplicit ventetid – bruges kun til at indstille ventetiden for et bestemt tilfælde

Implicit Vent

  • Det er lettere at kode end Explicit Waits.
  • Det er normalt erklæret i instansieringsdelen af ​​koden.
  • Du skal kun bruge én ekstra pakke for at importere.

For at begynde at bruge en implicit ventetid, skal du importere denne pakke til din kode.

Implicit Vent

Tilføj derefter dette i instansieringsdelen af ​​din kode.

Implicit Vent

Eksplicit Vent

Eksplicitte ventetider udføres ved hjælp af klasserne WebDriverWait og ExpectedCondition. Til det følgende Selenium WebDriver-eksempel, vi skal vente op til 10 sekunder på, at et element, hvis id er "brugernavn", bliver synligt, før vi fortsætter til den næste kommando. Her er trinene.

Trin 1:

Importer disse to pakker:

Eksplicit Vent

Trin 2:

Deklarer en WebDriverWait-variabel. I dette eksempel vil vi bruge "myWaitVar" som navnet på variablen.

Eksplicit Vent

Trin 3:

Brug myWaitVar med ExpectedConditions på portioner, hvor du har brug for den eksplicitte ventetid. I dette tilfælde vil vi bruge eksplicit ventetid på "brugernavnet" (Mercury Tours HomePage), før vi skriver teksten "tutorial" på den.

Eksplicit Vent

Betingelser

Følgende metoder bruges i betingede og looping-operationer -

  • isEnabled() bruges, når du vil kontrollere, om et bestemt element er aktiveret eller ej, før du udfører en kommando.

Betingelser er aktiveret()

  • vises() bruges, når du vil kontrollere, om et bestemt element vises eller ej, før du udfører en kommando.

Betingelser er vist()

  • isSelected() bruges, når du vil verificere, om en bestemt afkrydsningsfelt, alternativknap eller mulighed i en rullemenu er valgt. Det virker ikke på andre elementer.

Betingelser er valgt()

Brug af ExpectedConditions

ExpectedConditions-klassen tilbyder et bredere sæt betingelser, som du kan bruge sammen med WebDriverWaits indtil()-metode.

Nedenfor er nogle af de mest almindelige ExpectedConditions-metoder.

  • alertIsPresent() – venter, indtil en advarselsboks vises.

Brug af ExpectedConditions alertIsPresent()

  • elementToBeClickable() – Venter, indtil et element er synligt og samtidig aktiveret. Prøven Selenium Koden nedenfor vil vente, indtil elementet med id=”brugernavn” bliver synligt og aktiveret først, før det element tildeles som en WebElement-variabel med navnet “txtUserName”.

Brug af ExpectedConditions

  • frameToBeAvailableAndSwitchToIt() – Venter, indtil den givne ramme allerede er tilgængelig, og skifter derefter automatisk til den.

Brug af ExpectedConditions elementToBeClickable()

Fangst undtagelser

Når du bruger isEnabled(), isDisplayed() og isSelected(), antager WebDriver, at elementet allerede findes på siden. Ellers vil det kaste en NoSuchElementException. For at undgå dette bør vi bruge en try-catch-blok, så programmet ikke bliver afbrudt.

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

Hvis du bruger eksplicitte ventetider, er den type undtagelse, du skal fange, "TimeoutException".

Fangst undtagelser

Resumé

  • For at begynde at bruge WebDriver API skal du importere mindst disse to pakker.
  • org.openqa.selenium.*
  • org.openqa.selenium.firefox.FirefoxChauffør
  • get() metode svarer til Selenium IDE's "åbn" kommando.
  • Lokalisering af elementer i WebDriver udføres ved at bruge findElement() fremgangsmåde.
  • Følgende er de tilgængelige muligheder for at lokalisere elementer i WebDriver:
  • Efter.klassenavn
  • By.cssSelector
  • Af.id
  • By.linkText
  • Ved navn
  • By.partialLinkText
  • By.tagName
  • Af.xpath
  • By.cssSelector() ikke støtte "indeholder" funktion.
  • Du kan instansiere et element ved hjælp af WebElement-klassen.
  • Klik på et element gøres ved at bruge click() fremgangsmåde.
  • WebDriver giver disse nyttige get-kommandoer:
  • få()
  • getTitle ()
  • getPageSource()
  • getCurrentUrl()
  • getText ()
  • WebDriver giver disse nyttige navigationskommandoer
  • navigate().forward()
  • naviger().tilbage()
  • naviger().to()
  • navigate().refresh()
  • Close() og quit() metoderne bruges til at lukke browservinduer. Close() bruges til at lukke et enkelt vindue; mens quit() bruges til at lukke alle vinduer, der er knyttet til det overordnede vindue, som WebDriver-objektet kontrollerede.
  • switchTo().frame() og switchTo().alert() metoder bruges til at rette WebDrivers fokus på henholdsvis en frame eller advarsel.
  • Implicit waits bruges til at indstille ventetiden gennem hele programmet, mens explicit waits bruges kun på bestemte portioner.
  • Du kan bruge isEnabled(), isDisplayed(),isSelected() og en kombination af WebDriverWait og Forventede betingelser metoder til at verificere et elements tilstand. De verificerer dog ikke, om elementet ikke eksisterer.
  • Når isEnabled(), isDisplayed(), eller isSelected() blev kaldt, mens elementet ikke eksisterede, vil WebDriver kaste en NoSuchElementException.
  • Når metoderne WebDriverWait og ExpectedConditions blev kaldt, mens elementet ikke eksisterede, ville WebDriver kaste en TimeoutException.

Bemærk:

driver.get(): Denne metode bruges til at navigere til et bestemt websted. Den opretholder dog ikke browserhistorik eller cookies. Som et resultat vil frem- og tilbageknapperne ikke fungere, og at klikke på dem planlægger ikke sidenavigationen.

driver.navigate(): Denne metode bruges også til at navigere til et bestemt websted, men den vedligeholder browserhistorik og cookies. Dette gør det muligt at bruge frem- og tilbage-knapperne til at navigere mellem sider, mens du koder en testcase.