Med hjälp av Java-klassen "myclass" som vi skapade i föregående handledning, låt oss försöka skapa ett WebDriver-skript som skulle:
- hämta Mercury Tours hemsida
- verifiera dess titel
- skriv ut resultatet av jämförelsen
- stäng den innan du avslutar hela programmet.
WebDriver-kod
Nedan visas den faktiska WebDriver-koden för den logik som presenteras av scenariot ovan
Obs! Från och med Firefox 35 måste du använda en gecko-drivrutin som skapats av Mozilla för att använda webbdrivrutinen. Selen 3.0, gecko och firefox har kompatibilitetsproblem och att ställa in dem korrekt kan bli en uppförsbackeuppgift. Om koden inte fungerar, nedgradera till Firefox version 47 eller senare. Alternativt kan du köra dina skript på Chrome. Selen fungerar ur lådan för Chrome. Du behöver bara ändra 3 rader kod för att få ditt skript att fungera med Chrome eller Firefox
paketet newproject;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;// kommentera ovanstående rad och avmarkera under raden för att använda Chrome// importera org.openqa.selenium.chrome.ChromeDriver;allmän klass PG1 {public static void main (String [] args) {// deklaration och instantiering av objekt / variablerSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-drivrutin = ny FirefoxDriver ();// kommentera ovanstående 2 rader och kommentera under 2 rader för att använda Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// WebDriver-drivrutin = ny ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";String expectTitle = "Välkommen: Mercury Tours";String actualTitle = "";// starta Fire fox och rikta den till Base URLdriver.get (baseUrl);// få titelns faktiska värdeactualTitle = driver.getTitle ();/ ** jämför sidans faktiska titel med den förväntade och skriv ut* resultatet som "Godkänt" eller "Misslyckades"* /if (actualTitle.contentEquals (expectedTitle)) {System.out.println ("Test klarat!");} annat {System.out.println ("Test misslyckades");}// stäng Eldrävendriver.close ();}}
Förklara koden
Importera paket
För att komma igång måste du importera följande två paket:
- org.openqa.selenium. * - innehåller klassen WebDriver som behövs för att starta en ny webbläsare laddad med en specifik drivrutin
- org.openqa.selenium.firefox.FirefoxDriver - innehåller FirefoxDriver-klassen som behövs för att starta en Firefox-specifik drivrutin till webbläsaren som initieras av klassen WebDriver
Om ditt test behöver mer komplicerade åtgärder som att komma åt en annan klass, ta webbläsarens skärmdumpar eller manipulera externa filer, måste du definitivt importera fler paket.
Instantiera objekt och variabler
Normalt så är ett drivrutinsobjekt instanserat.
En FirefoxDriver-klass utan parametrar innebär att Firefox-standardprofilen lanseras av vårt Java-program. Standardprofilen för Firefox liknar att starta Firefox i säkert läge (inga tillägg laddas).
För enkelhets skull sparade vi basadressen och den förväntade titeln som variabler.
Starta en webbläsarsession
WebDrivers get () -metod används för att starta en ny webbläsarsession och dirigerar den till den URL som du anger som parameter.
Få den faktiska sidrubriken
WebDriver-klassen har getTitle () -metoden som alltid används för att erhålla sidtiteln på den nu laddade sidan.
Jämför de förväntade och faktiska värdena
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.
Avsluta en webbläsarsession
Metoden " stäng () " används för att stänga webbläsarfönstret.
Avsluta hela programmet
Om du använder det här kommandot utan att stänga alla webbläsarfönster först kommer hela Java-programmet att avslutas medan webbläsarfönstret är öppet.
Kör testet
Det finns två sätt att köra kod i Eclipse IDE.
- Klicka på Kör> Kör på Eclipses menyrad.
- Tryck på Ctrl + F11 för att köra hela koden.
Om du gjorde allt korrekt skulle Eclipse mata ut "Test Passed!"
Hitta GUI-element
Att hitta element i WebDriver görs med " findElement (By. Locator ()) " -metoden. "Locator" -delen av koden är densamma som någon av de locators som tidigare diskuterats i Selenium IDE-kapitlen i dessa självstudier. Infact, det rekommenderas att du lokaliserar GUI-element med IDE och en gång framgångsrikt identifierat exportera koden till WebDriver.
Här är en Selen-provkod som lokaliserar ett element med dess id. Facebook används som bas-URL.
paketet newproject;importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;allmän klass PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-drivrutin = ny FirefoxDriver ();SträngbasUrl = "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 () -metoden för att extrahera taggnamnet för just det elementet vars id är "e-post". När den körs bör den här koden kunna identifiera taggnamnet "input" korrekt och kommer att skriva ut det i Eclipses konsolfönster.
Sammanfattning för att hitta element
Variation | Beskrivning | Prov |
---|---|---|
Förbi. klassnamn | hittar element baserat på värdet på attributet "class" | findElement (By.className ("someClassName")) |
Förbi. cssSelector | hittar element baserat på förarens underliggande CSS Selector-motor | findElement (By.cssSelector ("input # email")) |
Förbi. id | lokaliserar element efter värdet av deras "id" -attribut | findElement (By.id ("someId")) |
Förbi. linkText | hittar ett länkelement med den exakta text som visas | findElement (By.linkText ("REGISTRATION")) |
Förbi. namn | lokaliserar element efter värdet för attributet "namn" | findElement (By.name ("someName")) |
Förbi. partialLinkText | lokaliserar element som innehåller den givna länktexten | findElement (By.partialLinkText ("REG")) |
Förbi. taggnamn | lokaliserar element efter deras taggnamn | findElement (By.tagName ("div")) |
Förbi. xpath | lokaliserar element via XPath | findElement (By.xpath ("// html / body / div / tabell / tbody / tr / td [2] / tabell / tbody / tr [4] / td / tabell / tbody / tr / td [2] / tabell / tbody / tr [2] / td [3] / form / tabell / tbody / tr [5] ")) |
Anmärkning om att använda findElement (By.cssSelector ())
By.cssSelector () stöder inte funktionen "innehåller" . Tänk på Selen IDE-koden nedan -
I Selen IDE ovan klarade hela testet. Men i Selenium WebDriver-skriptet nedan genererade samma test ett fel eftersom WebDriver inte stöder nyckelordet "innehåller" när det används i By.cssSelector () -metoden.
Vanliga kommandon
Instantiering av webbelement
Istället för att använda den långa syntaxen "driver.findElement (By.locator ())" varje gång du kommer åt ett visst element kan vi starta ett WebElement-objekt för det. WebElement-klassen finns i paketet "org.openqa.selenium. *".
Klicka på ett element
Att klicka är kanske det vanligaste sättet att interagera med webbelement . Metoden click () används för att simulera klickningen av något element. Följande Selenium Java-exempel visar hur klick () användes för att klicka på Mercury Tours "Inloggningsknapp".
Följande saker måste noteras när du använder metoden click ().
- Det tar ingen parameter / argument.
- Metoden väntar automatiskt på att en ny sida ska 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 för att hämta olika viktig information om sidan / elementet. Här är några viktiga "get" -kommandon som du måste känna till.
Kommandon | Användande |
---|---|
get () Exempel på användning: |
|
getTitle () Exempel på användning: |
|
getPageSource () Exempel på användning: |
|
getCurrentUrl () Exempel på användning: |
|
getText () Exempel på användning: |
|
Navigera kommandon
Med dessa kommandon kan du uppdatera, gå in och växla fram och tillbaka mellan olika webbsidor.
navigera (). till () Exempel på användning: |
|
navigera (). uppdatera () Exempel på användning: |
|
navigera (). tillbaka () Exempel på användning: |
|
navigera (). framåt () Exempel på användning: |
|
Stänga och avsluta webbläsaren Windows
stäng () Exempel på användning: |
|
avsluta () Exempel på användning: |
|
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 vid sidinläsning och öppnar en ny efter avslutad.
Observera att endast webbläsarens fönster stängdes och inte de två popup-fönstren.
Men om du använder quit () stängs alla fönster - inte bara föräldern. Försök att köra koden nedan så kommer du att märka att de två popup-fönstren automatiskt stängs också.
paketet newproject;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;allmän klass PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-drivrutin = ny FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // med QUIT stängs alla fönster}}
Växla mellan ramar
För att komma åt GUI-element i en ram bör vi först rikta WebDriver att fokusera på ramen eller popup-fönstret först innan vi kan komma åt element i dem. Låt oss ta till exempel webbsidan http://demo.guru99.com/selenium/deprecated.html
Denna sida har tre ramar vars "namn" -attribut anges ovan. Vi vill komma åt länken "Föråldrad" som omges ovan i gult. För att göra det måste vi först instruera WebDriver att byta till "classFrame" -ramen med "switchTo (). Frame ()" -metoden. Vi använder ramens namnattribut som parameter för "frame ()" -delen.
paketet newproject;importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;allmän klass PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-drivrutin = ny FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Föråldrad")). klicka ();driver.close ();}}
När du har kört den här koden kommer du att se att "classFrame" -ramen tas till sidan "Föråldrad API", vilket innebär att vår kod lyckades få åtkomst till länken "Föråldrad".
Växla mellan popup-fönster
WebDriver tillåter popup-fönster som varningar att visas, till skillnad från Selenium IDE. För att komma åt elementen i varningen (till exempel meddelandet som den innehåller) måste vi använda metoden "switchTo (). Alert ()" . I koden nedan använder vi den här metoden för att komma åt larmrutan och sedan hämta dess meddelande med "getText ()" -metoden och stäng sedan automatiskt larmrutan med "switchTo (). Alert (). Accept () " metod.
Gå först till http://jsbin.com/usidix/1 och klicka manuellt på "Go!" knappen där och se själv meddelandetexten.
Låt oss se Selen-exempelkoden för att göra detta-
paket mypackage;importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;public class myclass {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-drivrutin = ny FirefoxDriver ();Sträng alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value = \" Go! \ "]")). klicka ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). acceptera ();System.out.println (alertMessage);driver.quit ();}}
På Eclipse-konsolen märker du att det utskrivna varningsmeddelandet är:
Väntar
Det finns två typer av väntningar.
- Implicit wait - används för att ställa in standardväntetiden i hela programmet
- Explicit wait - används endast för att ställa in väntetiden för en viss instans
Implicit Vänta
- Det är enklare att koda än Explicit Waits.
- Det deklareras vanligtvis i koden för instantiering.
- Du behöver bara ytterligare ett 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.
Lägg sedan till den på instanseringsdelen av din kod.
Explicit Wait
Väntade väntningar görs med klasserna WebDriverWait och ExpectedCondition . För följande Selenium WebDriver-exempel väntar vi upp till 10 sekunder tills ett element vars id är "användarnamn" blir synligt innan vi fortsätter till nästa kommando. Här är stegen.
Steg 1
Importera dessa två paket:
Steg 2
Förklara en WebDriverWait-variabel. I det här exemplet använder vi "myWaitVar" som variabelns namn.
Steg 3
Använd myWaitVar med ExpectedConditions på delar där du behöver uttryckligt vänta för att inträffa. I det här fallet kommer vi att använda uttrycklig väntan på "användarnamn" (Mercury Tours HomePage) -inmatningen innan vi skriver in texten "tutorial" på den.
Betingelser
Följande metoder används i villkorliga och looping-operationer -
- isEnabled () används när du vill verifiera om ett visst element är aktiverat eller inte innan du kör ett kommando.
- isDisplayed () används när du vill verifiera om ett visst element visas eller inte innan du utför ett kommando.
- isSelected () används när du vill verifiera om en viss kryssruta, alternativknapp eller alternativ i en listruta är markerad. Det fungerar inte på andra element.
Använda ExpectedConditions
ExpectedConditions-klassen erbjuder en bredare uppsättning villkor som du kan använda i kombination med WebDriverWait till () -metoden.
Nedan följer några av de vanligaste ExpectedConditions-metoderna.
- alertIsPresent () - väntar tills en varningsruta visas.
- elementToBeClickable () - Väntar tills ett element är synligt och samtidigt aktiverat. Seleniumkoden nedan kommer att vänta tills elementet blir synligt och aktiverat först innan det tilldelas det som en WebElement-variabel med namnet "txtUserName".
- frameToBeAvailableAndSwitchToIt () - Väntar tills den angivna ramen redan är tillgänglig och växlar sedan automatiskt till den.
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 ett NoSuchElementException . För att undvika detta bör vi använda ett försök-fångst-block så att programmet inte avbryts.
WebElement txtbox_username = driver.findElement (By.id ("användarnamn"));Prova{om (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("tutorial");}}fångst (NoSuchElementException nsee) {System.out.println (nsee.toString ());}
Om du använder uttryckliga väntetider är den typ av undantag som du ska fånga "TimeoutException".
Sammanfattning
- För att börja använda WebDriver API måste du importera åtminstone dessa två paket.
- org.openqa.selen. *
- org.openqa.selenium.firefox.FirefoxDriver
- Den get () metoden motsvarar Selenium IDE: s "öppna" kommando.
- Att hitta element i WebDriver görs med hjälp av findElement () -metoden.
- Följande är de tillgängliga alternativen för att hitta element i WebDriver:
- Förbi. klassnamn
- Förbi. cssSelector
- Förbi. id
- Förbi. linkText
- Förbi. namn
- Förbi. partialLinkText
- Förbi. taggnamn
- Förbi. xpath
- Den By.cssSelector () inte stöd för "innehåller" inslag.
- Du kan starta ett element med hjälp av klassen WebElement .
- Att klicka på ett element görs genom att använda metoden click () .
- WebDriver tillhandahåller dessa användbara get-kommandon :
- skaffa sig()
- getTitle ()
- getPageSource ()
- getCurrentUrl ()
- getText ()
- WebDriver tillhandahåller dessa användbara navigeringskommandon
- navigera (). framåt ()
- navigera (). tillbaka ()
- navigera till()
- navigera (). uppdatera ()
- Metoderna close () och quit () används för att stänga webbläsarfönster. Stäng () 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 associerade med det överordnade fönstret som WebDriver-objektet kontrollerade.
- Den switchto (). Ramen () och switchto (). Alert () metoder används för att direkt WebDriver fokus på en ram eller alert, respektive.
- Implicit väntan används för att ställa in väntetiden i hela programmet, medan uttryckliga väntan endast används på specifika delar.
- Du kan använda isEnabled (), isDisplayed (), isSelected () och en kombination av metoder WebDriverWait och ExpectedConditions när du verifierar tillståndet för ett element. De verifierar dock inte om elementet inte finns.
- När isEnabled (), isDisplayed () eller isSelected () anropades medan elementet inte fanns, kommer WebDriver att kasta ett NoSuchElementException .
- När metoderna WebDriverWait och ExpectedConditions anropades medan elementet inte fanns, skulle WebDriver kasta ett TimeoutException .
Notera:
driver.get (): Det används för att gå till den specifika webbplatsen, men det behåller inte webbläsarhistoriken och cookies så vi kan inte använda framåt- och bakåtknappen, om vi klickar på det kommer sidan inte att få schema
driver.navigate (): den används för att gå till den specifika webbplatsen, men den behåller webbläsarhistoriken och kakorna, så att vi kan använda framåt- och bakåtknappen för att navigera mellan sidorna under kodningen av Testcase