Første Selen Webdriver-skript: Eksempel på JAVA-prøvekode

Innholdsfortegnelse:

Anonim

Bruk Java-klassen "myclass" som vi opprettet i forrige opplæring, og la oss prøve å lage et WebDriver-skript som:

  1. hente Mercury Tours hjemmeside
  2. bekreft tittelen
  3. skriv ut resultatet av sammenligningen
  4. lukk den før du avslutter hele programmet.

WebDriver-kode

Nedenfor er den faktiske WebDriver-koden for logikken presentert av scenariet ovenfor

Merk: Når du starter Firefox 35, må du bruke gecko-driver opprettet av Mozilla for å bruke Web Driver. Selen 3.0, gecko og firefox har kompatibilitetsproblemer og å sette dem riktig kan bli en oppoverbakkeoppgave. Hvis koden ikke fungerer, kan du nedgradere til Firefox versjon 47 eller eldre. Alternativt kan du kjøre skriptene dine på Chrome. Selen fungerer ut av esken for Chrome. Du trenger bare å endre 3 kodelinjer for å få skriptet til å fungere med Chrome eller Firefox

pakke newproject;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.firefox.FirefoxDriver;// kommenter linjen ovenfor og kommentar under linjen for å bruke Chrome// importer org.openqa.selenium.chrome.ChromeDriver;offentlig klasse PG1 {public static void main (String [] args) {// erklæring og instantiering av objekter / variablerSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-driver = ny FirefoxDriver ();// kommenter de ovennevnte 2 linjene og kommenter under 2 linjer for å bruke Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// WebDriver driver = ny ChromeDriver ();Streng baseUrl = "http://demo.guru99.com/test/newtours/";String expectTitle = "Velkommen: Merkur-turer";String actualTitle = "";// start Fire fox og diriger den til Base URLdriver.get (baseUrl);// få den faktiske verdien av tittelenactualTitle = driver.getTitle ();/ ** Sammenlign den faktiske tittelen på siden med den forventede og skriv ut* resultatet som "Bestått" eller "Mislyktes"* /hvis (actualTitle.contentEquals (forventet tittel)) {System.out.println ("Test bestått!");} annet {System.out.println ("Test mislyktes");}// lukk Brannrevendriver.close ();}}

Forklare koden

Importerer pakker

For å komme i gang, må du importere følgende to pakker:

  1. org.openqa.selenium. * - inneholder WebDriver-klassen som trengs for å starte en ny nettleser lastet med en bestemt driver
  2. org.openqa.selenium.firefox.FirefoxDriver - inneholder FirefoxDriver-klassen som trengs for å instantiere en Firefox-spesifikk driver til nettleseren som er instansert av WebDriver-klassen

Hvis testen din trenger mer kompliserte handlinger som å få tilgang til en annen klasse, ta skjermbilder i nettleseren eller manipulere eksterne filer, må du definitivt importere flere pakker.

Instantierende objekter og variabler

Normalt er dette hvordan et driverobjekt blir instantiert.

En FirefoxDriver-klasse uten parametere betyr at standard Firefox-profilen vil bli lansert av vårt Java-program. Standard Firefox-profilen ligner på å starte Firefox i sikker modus (ingen utvidelser er lastet inn).

For enkelhets skyld lagret vi grunn-URL og forventet tittel som variabler.

Starter en nettlesersesjon

WebDrivers get () -metode brukes til å starte en ny leserøkt og dirigerer den til URL-en du angir som parameter.

Få den faktiske sidetittelen

WebDriver-klassen har getTitle () -metoden som alltid brukes til å skaffe sidetittelen til den lastede siden.

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.

Avslutte en nettlesersesjon

Metoden " close () " brukes til å lukke nettleservinduet.

Avslutte hele programmet

Hvis du bruker denne kommandoen uten å lukke alle nettleservinduer først, vil hele Java-programmet ditt avsluttes mens nettleservinduet åpnes.

Kjører testen

Det er to måter å utføre kode i Eclipse IDE.

  1. På Eclipses menylinje klikker du Kjør> Kjør.
  2. Trykk Ctrl + F11 for å kjøre hele koden.

Hvis du gjorde alt riktig, ville Eclipse sende ut "Test bestått!"

Finne GUI-elementer

Finne elementer i WebDriver gjøres ved å bruke metoden " findElement (By. Locator ()) ". "Locator" -delen av koden er den samme som noen av locatorene som tidligere ble diskutert i Selenium IDE-kapitlene i denne veiledningen. Faktisk, anbefales det at du finner GUI-elementer ved hjelp av IDE og en gang vellykket identifisert, eksporterer du koden til WebDriver.

Her er en Selen-prøvekode som lokaliserer et element etter id. Facebook brukes som basis-URL.

pakke newproject;importer org.openqa.selenium.By;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.firefox.FirefoxDriver;offentlig klasse PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-driver = ny 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 metoden getTagName () for å trekke ut taggenavnet til det bestemte elementet hvis id er "e-post". Når den kjøres, skal denne koden kunne identifisere kodenavnet "input" korrekt og vil skrive det ut i Eclipse's Console-vindu.

Sammendrag for lokalisering av elementer

Variasjon Beskrivelse Prøve
Av. klassenavn finner elementer basert på verdien av attributtet "class" findElement (By.className ("someClassName"))
Av. cssSelector finner elementer basert på førerens underliggende CSS Selector-motor findElement (By.cssSelector ("input # email"))
Av. id lokaliserer elementer etter verdien av deres "id" -attributt findElement (By.id ("someId"))
Av. linkText finner et koblingselement etter den eksakte teksten den viser findElement (By.linkText ("REGISTRATION"))
Av. Navn lokaliserer elementer etter verdien av "navn" -attributtet findElement (By.name ("someName"))
Av. partialLinkText lokaliserer elementer som inneholder den gitte lenketeksten findElement (By.partialLinkText ("REG"))
Av. tagName lokaliserer elementer etter taggenavnet 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 / tabell / tbody / tr [5] "))

Merknad om bruk av findElement (By.cssSelector ())

By.cssSelector () støtter ikke "inneholder" -funksjonen . Vurder Selen IDE-koden nedenfor -

I Selen IDE ovenfor besto hele testen. I Selenium WebDriver-skriptet nedenfor genererte den samme testen imidlertid en feil fordi WebDriver ikke støtter "inneholder" nøkkelordet når det brukes i By.cssSelector () -metoden.

Vanlige kommandoer

Instantierende nettelementer

I stedet for å bruke den lange "driver.findElement (By.locator ())" - syntaksen hver gang du får tilgang til et bestemt element, kan vi starte et WebElement-objekt for det. WebElement-klassen er inkludert i pakken "org.openqa.selenium. *".

Klikk på et element

Å klikke er kanskje den vanligste måten å samhandle med webelementer på . Click () -metoden brukes til å simulere klikkingen av et hvilket som helst element. Følgende Selenium Java-eksempel viser hvordan klikk () ble brukt til å klikke på Mercury Tours '"Pålogging" -knapp.

Følgende ting må bemerkes når du bruker click () -metoden.

  • Det krever ingen parameter / argument.
  • Metoden venter automatisk på at en ny side skal 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 til å hente ulike viktige opplysninger om siden / elementet. Her er noen viktige "get" -kommandoer du må være kjent med.

Kommandoer Bruk
få () prøvebruk:
  • Det åpner automatisk et nytt nettleservindu og henter siden du angir i parentesene.
  • Det er motstykket til Selenium IDEs "åpne" kommando.
  • Parameteren må være et strengobjekt .
getTitle () Eksempel på bruk:
  • Trenger ingen parametere
  • Henter tittelen på den gjeldende siden
  • Ledende og etterfølgende hvite mellomrom er trimmet
  • Returnerer en nullstreng hvis siden ikke har noen tittel
getPageSource () Eksempelbruk:
  • Trenger ingen parametere
  • Returnerer kildekoden til siden som en strengverdi
getCurrentUrl () Eksempel på bruk:
  • Trenger ingen parametere
  • Henter strengen som representerer den nåværende URL-en som nettleseren ser på
getText () Eksempel på bruk:
  • Henter den indre teksten til elementet du spesifiserer

Naviger kommandoer

Disse kommandoene lar deg oppdatere, gå inn og veksle frem og tilbake mellom forskjellige websider.

naviger (). til () Eksempelbruk:
  • Det åpner automatisk et nytt nettleservindu og henter siden du angir i parentesene.
  • Det gjør nøyaktig det samme som get () -metoden.
naviger (). oppdater () Eksempelbruk:
  • Trenger ingen parametere.
  • Den oppdaterer gjeldende side.
navigere (). tilbake () Eksempelbruk:
  • Trenger ingen parametere
  • Tar deg tilbake med én side i nettleserens historie.
navigere (). fremover () Eksempelbruk:
  • Trenger ingen parametere
  • Tar deg frem med én side i nettleserens historie.

Lukke og avslutte nettleservinduer

lukk () prøvebruk:
  • Trenger ingen parametere
  • Den lukker bare nettleservinduet som WebDriver for øyeblikket kontrollerer .
avslutte () prøvebruk:
  • Trenger ingen parametere
  • Den lukker alle vinduer som WebDriver har åpnet.

For å tydelig illustrere forskjellen mellom close () og quit (), prøv å utføre koden nedenfor. Den bruker en webside som automatisk dukker opp et vindu ved sideinnlasting og åpner en ny etter avsluttet.

Legg merke til at bare det overordnede nettleservinduet ble lukket, og ikke de to popup-vinduene.

Men hvis du bruker avslutte (), lukkes alle vinduer - ikke bare den overordnede. Prøv å kjøre koden nedenfor, og du vil legge merke til at de to popup-vinduene ovenfor automatisk også lukkes.

pakke newproject;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.firefox.FirefoxDriver;offentlig klasse PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-driver = ny FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // ved å bruke QUIT lukkes alle vinduer}}

Bytte mellom rammer

For å få tilgang til GUI-elementer i en ramme, bør vi først lede WebDriver til å fokusere på rammen eller popup-vinduet først før vi får tilgang til elementer i dem. La oss ta for eksempel websiden http://demo.guru99.com/selenium/deprecated.html

Denne siden har 3 rammer hvis "navn" -attributter er angitt ovenfor. Vi ønsker å få tilgang til "Utfaset" -linken omkranset i gult. For å gjøre det, må vi først instruere WebDriver om å bytte til "classFrame" -rammen ved å bruke "switchTo (). Frame ()" -metoden. Vi vil bruke navneattributtet til rammen som parameter for "frame ()" -delen.

pakke newproject;importer org.openqa.selenium.By;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.firefox.FirefoxDriver;offentlig klasse PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-driver = ny FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("utdatert")). klikk ();driver.close ();}}

Etter at du har kjørt denne koden, vil du se at "classFrame" -rammen blir ført til siden "Utdatert API", noe som betyr at koden vår var vellykket i stand til å få tilgang til "Utdatert" -lenken.

Bytte mellom popup-vinduer

WebDriver lar popup-vinduer som varsler vises, i motsetning til i Selen IDE. For å få tilgang til elementene i varselet (for eksempel meldingen den inneholder), må vi bruke metoden "switchTo (). Alert ()" . I koden nedenfor bruker vi denne metoden for å få tilgang til varslingsboksen og deretter hente meldingen ved hjelp av "getText ()" -metoden, og lukker deretter varslingsboksen automatisk ved å bruke "switchTo (). Alarm (). Godta () " metode.

Først går du til http://jsbin.com/usidix/1 og klikker manuelt på "Go!" knappen der og se selv meldingen.

La oss se Selenium-eksempelkoden for å gjøre dette-

pakke min pakke;importer org.openqa.selenium.By;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.firefox.FirefoxDriver;offentlig klasse myclass {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-driver = ny FirefoxDriver ();String alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value = \" Go! \ "]")). klikk ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alarm (). godta ();System.out.println (alertMessage);driver.quit ();}}

På Eclipse-konsollen må du merke at den utskrevne varselmeldingen er:

Venter

Det er to typer ventetider.

  1. Implisitt ventetid - brukes til å angi standard ventetid i hele programmet
  2. Eksplisitt ventetid - brukes kun til å stille inn ventetiden for en bestemt forekomst

Implisitt Vent

  • Det er enklere å kode enn Explicit Waits.
  • Det blir vanligvis erklært i koden for instantiering.
  • Du trenger bare en ekstra pakke for å importere.

For å begynne å bruke en implisitt ventetid, må du importere denne pakken til koden din.

Deretter legger du til dette på instantieringsdelen av koden din.

Eksplisitt Vent

Eksplisitt venting gjøres ved hjelp av klasser WebDriverWait og ExpectedCondition . For det følgende Selenium WebDriver-eksemplet, må vi vente i opptil 10 sekunder på at et element hvis id er "brukernavn" skal bli synlig før vi fortsetter til neste kommando. Her er trinnene.

Trinn 1

Importer disse to pakkene:

Steg 2

Erklære en WebDriverWait-variabel. I dette eksemplet vil vi bruke "myWaitVar" som navnet på variabelen.

Trinn 3

Bruk myWaitVar med ExpectedConditions på deler der du trenger den eksplisitte ventetiden for å oppstå. I dette tilfellet vil vi bruke eksplisitt venting på "brukernavn" (Mercury Tours HomePage) -inngangen før vi skriver teksten "tutorial" på den.

Forhold

Følgende metoder brukes i betingede og looping operasjoner -

  • isEnabled () brukes når du vil kontrollere om et bestemt element er aktivert eller ikke før du utfører en kommando.
  • isDisplayed () brukes når du vil kontrollere om et bestemt element vises eller ikke før du utfører en kommando.
  • isSelected () brukes når du vil kontrollere om en bestemt avkrysningsrute, alternativknapp eller alternativ i en rullegardin er valgt. Det fungerer ikke på andre elementer.

Bruke ExpectedConditions

ExpectedConditions-klassen tilbyr et bredere sett med betingelser som du kan bruke i forbindelse med WebDriverWait til () -metoden.

Nedenfor er noen av de vanligste ExpectedConditions-metodene.

  • alertIsPresent () - venter til en varselboks vises.
  • elementToBeClickable () - Venter til et element er synlig og samtidig aktivert. Eksemplet på Selenium-koden nedenfor vil vente til elementet først blir synlig og aktivert før det tildeles elementet som en WebElement-variabel kalt "txtUserName".
  • frameToBeAvailableAndSwitchToIt () - Venter til den gitte rammen allerede er tilgjengelig, og bytter deretter automatisk til den.

Fangst unntak

Når du bruker isEnabled (), isDisplayed () og isSelected (), antar WebDriver at elementet allerede finnes på siden. Ellers vil det kaste et NoSuchElementException . For å unngå dette, bør vi bruke en prøvefangerblokk slik at programmet ikke blir avbrutt.

WebElement txtbox_username = driver.findElement (By.id ("brukernavn"));prøve{hvis (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("tutorial");}}fangst (NoSuchElementException nsee) {System.out.println (nsee.toString ());}

Hvis du bruker eksplisitte venter, er "TimeoutException" typen unntak du bør fange.

Sammendrag

  • For å begynne å bruke WebDriver API, må du importere minst disse to pakkene.
  • org.openqa.selen. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Den get () metoden er tilsvarende selen IDE er "åpen" -kommandoen.
  • Finne elementer i WebDriver gjøres ved å bruke metoden findElement () .
  • Følgende er de tilgjengelige alternativene for å finne elementer i WebDriver:
  • Av. klassenavn
  • Av. cssSelector
  • Av. id
  • Av. linkText
  • Av. Navn
  • Av. partialLinkText
  • Av. tagName
  • Av. xpath
  • Den By.cssSelector () ikke støtter "inneholder" funksjonen.
  • Du kan instansiere et element ved hjelp av WebElement- klassen.
  • Å klikke på et element gjøres ved å bruke metoden click () .
  • WebDriver gir disse nyttige get-kommandoene :
  • få()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver tilbyr disse nyttige navigasjonskommandoer
  • naviger (). fremover ()
  • naviger (). tilbake ()
  • navigere til()
  • naviger (). oppdater ()
  • Metodene close () og quit () brukes til å lukke nettleservinduer. Lukk () brukes til å lukke et enkelt vindu; while quit () brukes til å lukke alle vinduer som er tilknyttet foreldrevinduet som WebDriver-objektet kontrollerte.
  • Den switchTo (). Ramme () og switchTo (). Alert () metoder brukes til direkte WebDriver fokus på en ramme eller varsel, henholdsvis.
  • Implisitte venter brukes til å stille ventetiden gjennom hele programmet, mens eksplisitte venter bare brukes på bestemte porsjoner.
  • Du kan bruke isEnabled (), isDisplayed (), isSelected () og en kombinasjon av WebDriverWait og ExpectedConditions- metoder når du verifiserer tilstanden til et element. Imidlertid verifiserer de ikke om elementet ikke eksisterer.
  • Når isEnabled (), isDisplayed () eller isSelected () ble kalt mens elementet ikke eksisterte, vil WebDriver kaste et NoSuchElementException .
  • Når metodene WebDriverWait og ExpectedConditions ble kalt mens elementet ikke var eksisterende, ville WebDriver kaste et TimeoutException .

Merk:

driver.get (): Det brukes til å gå til det aktuelle nettstedet, men det opprettholder ikke nettleserens historie og informasjonskapsler, så vi kan ikke bruke fremover og bakover-knappen, hvis vi klikker på det, vil siden ikke få tidsplan

driver.navigate (): den brukes til å gå til det aktuelle nettstedet, men den opprettholder nettleserhistorikken og informasjonskapslene, slik at vi kan bruke fremover og bakover-knappen for å navigere mellom sidene under kodingen av Testcase