Selenium Webdriver Java Program eksempel
⚡ Smart oppsummering
Selenium webdriver Java Programeksempelet veileder deg gjennom ditt første ende-til-ende-automatiseringsskript. LessOns dekker miljøoppsett, lokalisering av elementer, sending av input, navigasjon, validering, venting, unntakshåndtering og beste praksis for pålitelige WebDriver-tester.

Selenium Java Eksempel
Bruke Java klasse "min klasse" som vi opprettet i forrige opplæring, la oss prøve å lage et WebDriver-skript som ville:
Trinn 1: hente Mercury Tours sin hjemmeside
Trinn 2: bekrefte tittelen
Trinn 3: skriv ut resultatet av sammenligningen
Trinn 4: lukk den før du avslutter hele programmet.
Selenium WebDriver-eksempel Code
Nedenfor er den faktiske WebDriver-koden for logikken presentert av 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 = "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(); } }
Merk: Starter Firefox 35, må du bruke gekko-driver opprettet av Mozilla for å bruke Web Driver. Selenium 3.0, gekko og firefox har kompatibilitetsproblemer, og å sette dem riktig kan bli en oppoverbakkeoppgave. Hvis koden ikke fungerer, nedgrader til Firefox versjon 47 eller eldre. Alternativt kan du kjøre skriptene dine på Chrome. Selenium fungerer ut av esken for Chrome. Du trenger bare å endre 3 linjer med kode for å få skriptet til å fungere med Chrome eller Firefox
Forklarer koden
Importere pakker
For å komme i gang må du importere følgende to pakker:
- org.openqa.selenium.*– inneholder WebDriver-klassen som trengs for å instansiere en ny nettleser lastet med en bestemt driver
- org.openqa.selenium.firefox.FirefoxDriver – inneholder FirefoxFørerklasse trengs for å instansiere en Firefox-spesifikk driver til nettleseren instansiert av WebDriver-klassen
Hvis testen din trenger mer kompliserte handlinger som å få tilgang til en annen klasse, ta nettleserskjermbilder eller manipulere eksterne filer, må du definitivt importere flere pakker.
Instantiering av objekter og variabler
Normalt er det slik et driverobjekt instansieres.
WebDriver driver = new FirefoxDriver();
A FirefoxDriverklasse uten parametere betyr at standard Firefox profilen vil bli lansert av vår Java program. Standard Firefox profil ligner på lansering Firefox i sikker modus (ingen utvidelser er lastet inn).
For enkelhets skyld lagret vi basen URL og den forventede tittelen som variabler.
Starte en nettleserøkt
WebDrivers få() Metoden brukes til å starte en ny nettleserøkt og dirigerer den til URL som du angir som parameter.
driver.get(baseUrl);
Få den faktiske sidetittelen
WebDriver-klassen har getTitle() metode som alltid brukes for å få sidetittelen til siden som er lastet.
actualTitle = driver.getTitle();
Sammenlign forventede og faktiske verdier
Denne delen av koden bruker ganske enkelt en grunnleggende Java if-else-struktur for å sammenligne den faktiske tittelen med den forventede.
if (actualTitle.contentEquals(expectedTitle)){ System.out.println("Test Passed!"); } else { System.out.println("Test Failed"); }
Avslutte en nettleserøkt
Den "Lukk()”-metoden brukes til å lukke nettleservinduet.
driver.close();
Avslutter hele programmet
Hvis du bruker denne kommandoen uten å lukke alle nettleservinduer først, hele Java programmet avsluttes mens du lar nettleservinduet være åpent.
System.exit(0);
Kjører testen
Det er to måter å kjøre kode på Eclipse SDI.
- On Eclipses menylinje, klikk Kjør > Kjør.
- Press Ctrl + F11 for å kjøre hele koden.
Hvis du gjorde alt riktig, Eclipse ville gi "Test bestått!"
Finne GUI-elementer
Å finne elementer i WebDriver gjøres ved å bruke "findElement(Av.locator())"metoden. "Lokator"-delen av koden er den samme som noen av lokalisatorene som tidligere er diskutert i Selenium IDE kapitlene i disse veiledningene. Faktisk anbefales det at du finner GUI-elementer ved å bruke IDE og eksporterer koden til WebDriver når de er identifisert.
Her er en Selenium eksempelkode som lokaliserer et element etter dets ID. Facebook brukes som base 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 brukte getTagName() metode for å ekstract tagnavnet til det bestemte elementet med ID-en «e-post». Når denne koden kjøres, skal den kunne identifisere tagnavnet «input» korrekt og skrive det ut på Eclipse's konsollvindu.
Sammendrag for lokalisering av elementer
| Variasjon | Tekniske beskrivelser | Eksempel |
|---|---|---|
| Etter.klassenavn | finner elementer basert på verdien av «class»-attributtet | findElement(By.className(“noenKlassenavn”)) |
| By.cssSelector | finner elementer basert på driverens underliggende CSS Selector-motor | findElement(By.cssSelector(“input#email”)) |
| Etter.id | lokaliserer elementer etter verdien av deres "id"-attributt |
findElement(By.id(“someId”)) |
| By.linkText | finner et koblingselement etter den eksakte teksten det viser |
findElement(By.linkText(“REGISTRERING”)) |
| Etter.navn | lokaliserer elementer etter verdien av "name"-attributtet |
findElement(By.name(“noennavn”)) |
| By.partialLinkText | finner elementer som inneholder den gitte lenketeksten |
findElement(By.partialLinkText(“REG”)) |
| By.tagName | lokaliserer elementer etter tagnavnet |
findElement(By.tagName(“div”)) |
| Av.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]”)) |
Merknad om bruk av findElement(By.cssSelector())
By.cssSelector() støtter ikke funksjonen "inneholder". Vurder Selenium IDE-kode nedenfor -
In Selenium IDE ovenfor, bestod hele testen. Imidlertid i Selenium WebDriver-skriptet nedenfor, den samme testen genererte en feil fordi WebDriver ikke støtter nøkkelordet "contains" når det brukes i By.cssSelector()-metoden.
Vanlige kommandoer
Instantiering av webelementer
I stedet for å bruke den lange "driver.findElement(By.locator())"-syntaksen hver gang du får tilgang til et bestemt element, kan vi instansiere et WebElement-objekt for det. WebElement-klassen er inneholdt i "org.openqa.selenium.*"-pakken.
Klikk på et element
Klikk er kanskje den vanligste måten å samhandle med webelementer på. De click() metoden brukes til å simulere klikking av et element. Følgende Selenium Java eksempel viser hvordan click() ble brukt til å klikke på Mercury Tours' "Logg på"-knapp.
Følgende ting må noteres når du bruker click()-metoden.
- Det tar ikke noen parameter/argument.
- Metoden venter automatisk på at en ny side lastes inn hvis det er aktuelt.
- Elementet som skal klikkes på, må være synlig (høyde og bredde må ikke være lik null).
Få kommandoer
Få kommandoer henter diverse viktig informasjon om siden/elementet. Her er noen viktige "get"-kommandoer du må være kjent med.
| Kommandoer | bruk |
|---|---|
| få()
Eksempelbruk: |
|
| getTitle()
Eksempelbruk: |
|
| getPageSource()
Eksempelbruk: |
|
| getCurrentUrl()
Eksempelbruk: |
|
| getText()
Eksempelbruk: |
|
Naviger i kommandoer
Disse kommandoene lar deg oppdatere, gå inn i og bytte frem og tilbake mellom forskjellige nettsider.
| naviger().to()
Eksempelbruk: |
|
| navigate().refresh()
Eksempelbruk: |
|
| navigate().back()
Eksempelbruk: |
|
| navigate().forward()
Eksempelbruk: |
|
Lukke og avslutte nettleseren Windows
| Lukk()
Eksempelbruk: |
|
| slutte()
Eksempelbruk: |
|
For å tydelig illustrere forskjellen mellom close() og quit(), prøv å kjøre koden nedenfor. Den bruker en nettside som automatisk dukker opp et vindu når siden lastes inn og åpner opp et annet etter å ha avsluttet.
Legg merke til at bare det overordnede nettleservinduet ble lukket og ikke de to popup-vinduene.
Men hvis du bruker quit(), vil alle vinduer lukkes – ikke bare det overordnede. Prøv å kjøre koden nedenfor, og du vil legge merke til at de to popup-vinduene ovenfor automatisk lukkes også.
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 } }
Bytte mellom rammer
For å få tilgang til GUI-elementer i en ramme, bør vi først henvise WebDriver til å fokusere på rammen eller popup-vinduet før vi får tilgang til elementer i dem. La oss ta for eksempel nettsiden https://demo.guru99.com/selenium/deprecated.html
Denne siden har 3 rammer hvis "navn"-attributter er angitt ovenfor. Vi ønsker å få tilgang til koblingen "Utviklet" som er omringet ovenfor i gult. For å gjøre det, må vi først instruere WebDriver om å bytte til "classFrame"-rammen ved å bruke "switchTo().frame()" metode. Vi vil bruke navneattributtet til rammen 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("https://demo.guru99.com/selenium/deprecated.html"); driver.switchTo().frame("classFrame"); driver.findElement(By.linkText("Deprecated")).click(); driver.close(); } }
Etter å ha utført denne koden, vil du se at "classFrame"-rammen blir tatt til siden "Utviklet API", noe som betyr at koden vår fikk tilgang til koblingen "Utviklet".
Bytte mellom popup-vinduer Windows
WebDriver lar popup-vinduer som varsler vises, i motsetning til i Selenium IDE. For å få tilgang til elementene i varselet (som meldingen den inneholder), må vi bruke "switchTo().alert()" metode. I koden nedenfor vil vi bruke denne metoden for å få tilgang til varslingsboksen og deretter hente meldingen ved hjelp av "getText()" metoden, og lukk deretter varselboksen automatisk ved å bruke "switchTo().alert().accept()" metoden.
Gå først over til https://output.jsbin.com/usidix/1 og manuelt klikk på "Go!" knappen der og se selv meldingsteksten.
La oss se Selenium eksempelkode for å gjø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 konsollen, legg merke til at den trykte varselmeldingen er:
Venter
Det er to typer ventetid.
- Implisitt ventetid – brukes til å angi standard ventetid gjennom hele programmet
- Eksplisitt ventetid – brukes kun til å angi ventetiden for en bestemt forekomst
Implisitt vent
- Det er enklere å kode enn Explicit Waits.
- Det er vanligvis erklært i instansieringsdelen av koden.
- Du trenger bare én ekstra pakke for å importere.
For å begynne å bruke en implisitt ventetid, må du importere denne pakken til koden din.
Deretter legger du til dette i instansieringsdelen av koden din.
Eksplisitt vent
Eksplisitte ventinger gjøres ved å bruke klassene WebDriverWait og ExpectedCondition. For følgende Selenium WebDriver-eksempel, vi skal vente opptil 10 sekunder på at et element hvis id er "brukernavn" blir synlig før vi fortsetter til neste kommando. Her er fremgangsmåten.
Steg XNUMX:
Importer disse to pakkene:
Steg XNUMX:
Deklarer en WebDriverWait-variabel. I dette eksemplet vil vi bruke "myWaitVar" som navnet på variabelen.
Steg XNUMX:
Bruk myWaitVar med ExpectedConditions på porsjoner der du trenger den eksplisitte ventetiden. I dette tilfellet vil vi bruke eksplisitt ventetid på "brukernavnet" (Mercury Tours HomePage) før vi skriver inn teksten "veiledning" på den.
Forhold
Følgende metoder brukes i betinget og looping operasjoner —
- isEnabled() brukes når du vil verifisere om et bestemt element er aktivert eller ikke før du utfører en kommando.
- isDisplayed() brukes når du vil verifisere om et bestemt element vises eller ikke før du utfører en kommando.
- isSelected() brukes når du vil verifisere om en viss avmerkingsboks, alternativknapp eller alternativ i en rullegardinboks er valgt. Det fungerer ikke på andre elementer.
Bruker ExpectedConditions
ExpectedConditions-klassen tilbyr et bredere sett med betingelser som du kan bruke sammen med WebDriverWaits til()-metode.
Nedenfor er noen av de vanligste ExpectedConditions-metodene.
- alertIsPresent() – venter til en varselboks vises.
- elementToBeClickable() – Venter til et element er synlig og samtidig aktivert. Prøven Selenium Code nedenfor vil vente til elementet med id="brukernavn" blir synlig og aktivert før det tilordnes som en WebElement-variabel med navnet "txtUserName".
- frameToBeAvailableAndSwitchToIt() – Venter til den gitte rammen allerede er tilgjengelig, og bytter deretter automatisk til den.
Unntak for fangst
Når du bruker isEnabled(), isDisplayed() og isSelected(), antar WebDriver at elementet allerede eksisterer på siden. Ellers vil det kaste en NoSuchElementException. For å unngå dette bør vi bruke en try-catch-blokk slik at programmet ikke blir avbrutt.
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 bruker eksplisitte ventetider, er typen unntak du bør fange "TimeoutException".

.png)
.png)
.png)
.png)
.png)
.png)

.png)


.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)