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:
- org.openqa.selenium.*– innehåller WebDriver-klassen som behövs för att instansiera en ny webbläsare laddad med en specifik drivrutin
- 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.
- On Eclipses menyrad, klicka Kör > Kör.
- Klicka Ctrl + F11 för att köra hela koden.
Om du gjorde allt rätt, Eclipse skulle skriva ut "Test godkänt!"
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.
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 -
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.
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.*".
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.
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: |
|
getTitle ()
Provkonsumtion: |
|
getPageSource()
Provkonsumtion: |
|
getCurrentUrl()
Provkonsumtion: |
|
getText ()
Provkonsumtion: |
|
Navigera i kommandon
Dessa kommandon låter dig uppdatera, gå in i och växla fram och tillbaka mellan olika webbsidor.
navigera till()
Provkonsumtion: |
|
navigate().refresh()
Provkonsumtion: |
|
navigate().back()
Provkonsumtion: |
|
navigate().forward()
Provkonsumtion: |
|
Stänga och avsluta webbläsaren Windows
stänga()
Provkonsumtion: |
|
sluta med()
Provkonsumtion: |
|
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.
Observera att endast det överordnade webbläsarfönstret stängdes och inte de två popupfönstren.
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
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.
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äntar
Det finns två typer av väntan.
- Implicit vänta – används för att ställa in standardväntetiden genom hela programmet
- 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.
Lägg sedan till detta i instansieringsdelen av din kod.
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:
Steg 2:
Deklarera en WebDriverWait-variabel. I det här exemplet kommer vi att använda "myWaitVar" som namn på variabeln.
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.
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.
- isDisplayed() används när du vill verifiera om ett visst element visas eller inte innan du utför ett kommando.
- ä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.
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.
- 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”.
- frameToBeAvailableAndSwitchToIt() – Väntar tills den givna 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 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".
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; medanquit()
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()
ochswitchTo().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, medanexplicit 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.