Selenium Webdriver Java Programexempel

Selenium Java Exempelvis

Använda Java klassen "myclass" som vi skapade i föregående handledning, låt oss försöka skapa ett WebDriver-skript som skulle:

Steg 1: hämta Mercury Tours hemsida
Steg 2: verifiera dess titel
Steg 3: skriv ut resultatet av jämförelsen
Steg 4: stäng den innan du avslutar hela programmet.

Selenium WebDriver exempelkod

Nedan är den faktiska WebDriver-koden för logiken som presenteras av scenariot ovan

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

}

Obs: Startar Firefox 35 måste du använda gecko-drivrutinen skapad av Mozilla för att använda webbdrivrutinen. Selenium 3.0, gecko och firefox har kompatibilitetsproblem och att ställa in dem korrekt kan bli en uppförsbacke. Om koden inte fungerar, nedgradera till Firefox version 47 eller senare. Alternativt kan du köra dina skript på Chrome. Selenium fungerar direkt för Chrome. Du behöver bara ändra 3 rader kod för att få ditt skript att fungera med Chrome eller Firefox

Förklara koden

Importera paket

För att komma igång måste du importera följande två paket:

  1. org.openqa.selenium.*– innehåller WebDriver-klassen som behövs för att instansiera en ny webbläsare laddad med en specifik drivrutin
  2. org.openqa.selenium.firefox.FirefoxChaufför – innehåller FirefoxFörarklass behövs för att instansiera en Firefox-specifik drivrutin till webbläsaren instansierad av WebDriver-klassen

Om ditt test behöver mer komplicerade åtgärder som att komma åt en annan klass, ta webbläsarskärmdumpar eller manipulera externa filer, kommer du definitivt att behöva importera fler paket.

Instantiera objekt och variabler

Normalt är det så här ett drivrutinsobjekt instansieras.

WebDriver driver = new FirefoxDriver();

A FirefoxFörarklass utan parametrar betyder att standard Firefox profil kommer att lanseras av vår Java programmera. Standard Firefox profil liknar lansering Firefox i säkert läge (inga anknytningar laddas).

För enkelhetens skull sparade vi Base URL och den förväntade titeln som variabler.

Starta en webbläsarsession

WebDrivers skaffa sig() metod används för att starta en ny webbläsarsession och dirigerar den till den URL som du anger som parameter.

driver.get(baseUrl);

Hämta den faktiska sidtiteln

WebDriver-klassen har getTitle () metod som alltid används för att erhålla sidtiteln på den för närvarande laddade sidan.

actualTitle = driver.getTitle();

Jämför förväntade och faktiska värden

Denna del av koden använder helt enkelt en grundläggande Java if-else-struktur för att jämföra den faktiska titeln med den förväntade.

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

Avsluta en webbläsarsession

Den "stänga()”-metoden används för att stänga webbläsarfönstret.

driver.close();

Avsluta hela programmet

Om du använder det här kommandot utan att stänga alla webbläsarfönster först, hela din Java programmet avslutas medan webbläsarfönstret lämnas öppet.

System.exit(0);

Kör testet

Det finns två sätt att exekvera kod i Eclipse ID.

  1. On Eclipses menyrad, klicka Kör > Kör.
  2. Klicka Ctrl + F11 för att köra hela koden.

Kör testet

Om du gjorde allt rätt, Eclipse skulle skriva ut "Test godkänt!"

Kör testet

Hitta GUI-element

Att hitta element i WebDriver görs med hjälp av "findElement(Av.locator())"metoden. "Lokator"-delen av koden är densamma som någon av lokaliseringarna som tidigare diskuterats i Selenium IDE kapitlen i dessa handledningar. Faktum är att det rekommenderas att du lokaliserar GUI-element med IDE och när de väl har identifierats exporterar koden till WebDriver.

Här är en Selenium exempelkod som lokaliserar ett element efter dess id. Facebook används som bas-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 använde getTagName() metod för att extrahera taggnamnet för det specifika elementet vars id är "e-post". När den körs ska den här koden korrekt identifiera taggen namn "input" och kommer att skriva ut den på Eclipses konsolfönster.

Hitta GUI-element

Sammanfattning för lokalisering av element

Variation Systembeskrivningar Prov
By.className hittar element baserat på värdet av "class"-attributet findElement(By.className(“someClassName”))
By.cssSelector hittar element baserat på förarens underliggande CSS-väljarmotor findElement(By.cssSelector(“input#email”))
Efter.id lokaliserar element efter värdet av deras "id"-attribut findElement(By.id(“someId”))
 
By.linkText hittar ett länkelement genom den exakta texten det visar findElement(By.linkText(“REGISTRERING”))
 
Vid namn lokaliserar element efter värdet av attributet "name". findElement(By.name(“något Namn”))
 
By.partialLinkText lokaliserar element som innehåller den givna länktexten findElement(By.partialLinkText(“REG”))
 
By.tagName lokaliserar element efter deras taggnamn findElement(By.tagName(“div”))
 
By.xpath lokaliserar element 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]”))

Anmärkning om hur du använder findElement(By.cssSelector())

By.cssSelector() stöder inte funktionen "innehåller". Överväga Selenium IDE-kod nedan -

Anmärkning om hur du använder findElement(By.cssSelector())

In Selenium IDE ovan klarade hela testet. Men i Selenium WebDriver-skriptet nedan, samma test genererade ett fel eftersom WebDriver inte stöder nyckelordet "contains" när det används i By.cssSelector()-metoden.

Anmärkning om hur du använder findElement(By.cssSelector())

Gemensamma kommandon

Instantiera webbelement

Istället för att använda den långa "driver.findElement(By.locator())"-syntaxen varje gång du kommer åt ett visst element, kan vi instansiera ett WebElement-objekt för det. Klassen WebElement finns i paketet "org.openqa.selenium.*".

Instantiera webbelement

Klicka på ett element

Att klicka är kanske det vanligaste sättet att interagera med webbelement. De click() metod används för att simulera klickning av ett element. Följande Selenium Java exemplet visar hur click() användes för att klicka på Mercury Tours "Logga in"-knapp.

Klicka på ett element

Följande saker måste noteras när du använder metoden click().

  • Det tar inte någon parameter/argument.
  • Metoden väntar automatiskt på att en ny sida laddas om tillämpligt.
  • Elementet som ska klickas på måste vara synligt (höjd och bredd får inte vara lika med noll).

Få kommandon

Få kommandon hämtar olika viktig information om sidan/elementet. Här är några viktiga "get"-kommandon som du måste vara bekant med.

Kommandon Användning
skaffa sig()

Provkonsumtion:

  • Den öppnar automatiskt ett nytt webbläsarfönster och hämtar sidan som du anger inom dess parentes.
  • Det är motsvarigheten till Selenium IDE:s "öppna" kommando.
  • Parametern måste vara en Sträng objekt.
getTitle ()

Provkonsumtion:

  • Behöver inga parametrar
  • Hämtar titeln på den aktuella sidan
  • Ledande och efterföljande vita utrymmen trimmas
  • Returnerar en nollsträng om sidan inte har någon titel
getPageSource()

Provkonsumtion:

  • Behöver inga parametrar
  • Returnerar sidans källkod som ett strängvärde
getCurrentUrl()

Provkonsumtion:

  • Behöver inga parametrar
  • Hämtar strängen som representerar den aktuella webbadressen som webbläsaren tittar på
getText ()

Provkonsumtion:

  • Hämtar den inre texten i det element som du anger

Navigera i kommandon

Dessa kommandon låter dig uppdatera, gå in i och växla fram och tillbaka mellan olika webbsidor.

navigera till()

Provkonsumtion:

  • Den öppnar automatiskt ett nytt webbläsarfönster och hämtar sidan som du anger inom dess parentes.
  • Den gör exakt samma sak som get() metod.
navigate().refresh()

Provkonsumtion:

  • Behöver inga parametrar.
  • Den uppdaterar den aktuella sidan.
navigate().back()

Provkonsumtion:

  • Behöver inga parametrar
  • Tar dig tillbaka med en sida i webbläsarens historik.
navigate().forward()

Provkonsumtion:

  • Behöver inga parametrar
  • Tar dig framåt med en sida i webbläsarens historik.

Stänga och avsluta webbläsaren Windows

stänga()

Provkonsumtion:

  • Behöver inga parametrar
  • Den stänger endast webbläsarfönstret som WebDriver för närvarande kontrollerar.
sluta med()

Provkonsumtion:

  • Behöver inga parametrar
  • Den stänger alla fönster som WebDriver har öppnat.

Stänga och avsluta webbläsaren Windows

För att tydligt illustrera skillnaden mellan close() och quit(), försök att köra koden nedan. Den använder en webbsida som automatiskt dyker upp ett fönster när sidan laddas och öppnar ett annat efter att ha avslutats.

Stänga och avsluta webbläsaren Windows

Observera att endast det överordnade webbläsarfönstret stängdes och inte de två popupfönstren.

Stänga och avsluta webbläsaren Windows

Men om du använder quit(), kommer alla fönster att stängas – inte bara det överordnade. Testa att köra koden nedan så kommer du att märka att de två popup-fönsterna ovan automatiskt stängs också.

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

Växla mellan ramar

För att komma åt GUI-element i en ram, bör vi först uppmana WebDriver att fokusera på ramen eller popup-fönstret innan vi kan komma åt element i dem. Låt oss ta till exempel webbsidan https://demo.guru99.com/selenium/deprecated.html

Växla mellan ramar

Den här sidan har 3 ramar vars "namn"-attribut anges ovan. Vi vill komma åt länken "Utfasad" som är inringad ovan i gult. För att göra det måste vi först instruera WebDriver att byta till "classFrame"-ramen med hjälp av "switchTo().frame()" metod. Vi kommer att använda namnattributet för ramen som parameter för "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("https://demo.guru99.com/selenium/deprecated.html");
	        driver.switchTo().frame("classFrame");
	        driver.findElement(By.linkText("Deprecated")).click();
	        driver.close(); 
	    }
}

Efter att ha kört den här koden kommer du att se att "classFrame"-ramen tas till sidan "Utfasad API", vilket betyder att vår kod lyckades komma åt länken "Föråldrad".

Växla mellan popup-fönster Windows

WebDriver tillåter att popup-fönster som varningar visas, till skillnad från i Selenium ID. För att komma åt elementen i varningen (som meddelandet den innehåller), måste vi använda "switchTo().alert()" metod. I koden nedan kommer vi att använda den här metoden för att komma åt varningsrutan och sedan hämta dess meddelande med hjälp av "getText()" metod och stäng sedan varningsrutan automatiskt med hjälp av "switchTo().alert().accept()" metod.

Gå först över till https://output.jsbin.com/usidix/1 och klicka manuellt på "Kör!" knappen där och se själv meddelandetexten.

Växla mellan popup-fönster Windows

Låt oss se Selenium exempelkod för att göra detta-

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 konsolen, lägg märke till att det utskrivna varningsmeddelandet är:

Växla mellan popup-fönster Windows

Väntar

Det finns två typer av väntan.

  1. Implicit vänta – används för att ställa in standardväntetiden genom hela programmet
  2. Explicit väntan – används för att ställa in väntetiden endast för en viss instans

Implicit vänta

  • Det är enklare att koda än Explicit Waits.
  • Det deklareras vanligtvis i instansieringsdelen av koden.
  • Du behöver bara ett extra paket för att importera.

För att börja använda en implicit väntan måste du importera detta paket till din kod.

Implicit vänta

Lägg sedan till detta i instansieringsdelen av din kod.

Implicit vänta

Explicit vänta

Explicita väntetider görs med klasserna WebDriverWait och ExpectedCondition. För följande Selenium WebDriver-exempel, vi ska vänta upp till 10 sekunder på att ett element vars id är "användarnamn" ska bli synligt innan vi fortsätter till nästa kommando. Här är stegen.

Steg 1:

Importera dessa två paket:

Explicit vänta

Steg 2:

Deklarera en WebDriverWait-variabel. I det här exemplet kommer vi att använda "myWaitVar" som namn på variabeln.

Explicit vänta

Steg 3:

Använd myWaitVar med ExpectedConditions på portioner där du behöver den explicita väntan för att inträffa. I det här fallet kommer vi att använda explicit väntan på "användarnamnet" (Mercury Tours Homepage) innan vi skriver texten "tutorial" på den.

Explicit vänta

Villkor

Följande metoder används i villkors- och loopoperationer -

  • isEnabled() används när du vill verifiera om ett visst element är aktiverat eller inte innan du kör ett kommando.

Villkor isEnabled()

  • isDisplayed() används när du vill verifiera om ett visst element visas eller inte innan du utför ett kommando.

Villkor visas()

  • är vald() används när du vill verifiera om en viss kryssruta, alternativknapp eller alternativ i en listruta är vald. Det fungerar inte på andra element.

Villkor är Valda()

Använder ExpectedConditions

Klassen ExpectedConditions erbjuder en bredare uppsättning villkor som du kan använda tillsammans med WebDriverWaits till()-metod.

Nedan är några av de vanligaste ExpectedConditions-metoderna.

  • alertIsPresent() – väntar tills en varningsruta visas.

Använda ExpectedConditions alertIsPresent()

  • elementToBeClickable() – Väntar tills ett element är synligt och samtidigt aktiverat. Provexemplaret Selenium Koden nedan väntar tills elementet med id=”användarnamn” blir synligt och aktiverat först innan det elementet tilldelas som en WebElement-variabel med namnet “txtUserName”.

Använder ExpectedConditions

  • frameToBeAvailableAndSwitchToIt() – Väntar tills den givna ramen redan är tillgänglig och växlar sedan automatiskt till den.

Använda ExpectedConditions elementToBeClickable()

Fånga undantag

När du använder isEnabled(), isDisplayed() och isSelected(), antar WebDriver att elementet redan finns på sidan. Annars kommer det att kasta en NoSuchElementException. För att undvika detta bör vi använda ett try-catch-block så att programmet inte avbryts.

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

Om du använder explicita väntetider är den typ av undantag som du bör fånga "TimeoutException".

Fånga undantag

Sammanfattning

  • För att börja använda WebDriver API måste du importera åtminstone dessa två paket.
  • org.openqa.selenium.*
  • org.openqa.selenium.firefox.FirefoxChaufför
  • Ocuco-landskapet get() metod är motsvarigheten till Selenium IDE:s "öppna" kommando.
  • Lokalisering av element i WebDriver görs med hjälp av findElement() metod.
  • Följande är de tillgängliga alternativen för att lokalisera element i WebDriver:
  • By.className
  • By.cssSelector
  • Efter.id
  • By.linkText
  • Vid namn
  • By.partialLinkText
  • By.tagName
  • By.xpath
  • By.cssSelector() inte stödja "innehåller" särdrag.
  • Du kan instansiera ett element med klassen WebElement.
  • Att klicka på ett element görs med hjälp av click() metod.
  • WebDriver tillhandahåller dessa användbara hämta-kommandon:
  • skaffa sig()
  • getTitle ()
  • getPageSource()
  • getCurrentUrl()
  • getText ()
  • WebDriver tillhandahåller dessa användbara navigeringskommandon
  • navigate().forward()
  • navigate().back()
  • navigera till()
  • navigate().refresh()
  • Metoderna close() och quit() används för att stänga webbläsarfönster. Close() används för att stänga ett enda fönster; medan quit() används för att stänga alla fönster som är kopplade till det överordnade fönstret som WebDriver-objektet kontrollerade.
  • Ocuco-landskapet switchTo().frame() och switchTo().alert() metoder används för att rikta WebDrivers fokus på en ram respektive varning.
  • Implicit waits används för att ställa in väntetiden under hela programmet, medan explicit waits används endast på specifika portioner.
  • Du kan använda isEnabled(), isDisplayed(),isSelected() och en kombination av WebDriverWait och Förväntade villkor metoder för att verifiera ett elements tillstånd. De verifierar dock inte om elementet inte finns.
  • När isEnabled(), isDisplayed(), eller isSelected() anropades medan elementet inte existerade, kommer WebDriver att kasta en NoSuchElementException.
  • När metoderna WebDriverWait och ExpectedConditions anropades medan elementet inte existerade, skulle WebDriver kasta en TimeoutException.

Obs:

driver.get(): Denna metod används för att navigera till en viss webbplats. Det upprätthåller dock inte webbläsarhistorik eller cookies. Som ett resultat kommer knapparna framåt och bakåt inte att fungera, och att klicka på dem kommer inte att schemalägga sidnavigeringen.

driver.navigate(): Den här metoden används också för att navigera till en viss webbplats, men den behåller webbläsarhistorik och cookies. Detta gör att framåt- och bakåtknapparna kan användas för att navigera mellan sidor samtidigt som ett testfall kodas.

Läs mer Readmore