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

Indholdsfortegnelse:

Anonim

Brug Java-klassen "myclass", som vi oprettede i den foregående tutorial, lad os prøve at oprette et WebDriver-script, der ville:

  1. hent Mercury Tours 'hjemmeside
  2. bekræft dens titel
  3. udskriv resultatet af sammenligningen
  4. luk det, inden du afslutter hele programmet.

WebDriver-kode

Nedenfor er den faktiske WebDriver-kode for den logik, der præsenteres af ovenstående scenario

Bemærk: Når du starter Firefox 35, skal du bruge gecko-driver oprettet af Mozilla for at bruge Web Driver. Selen 3.0, gecko og firefox har kompatibilitetsproblemer, og det kan blive en opadgående opgave at indstille dem korrekt. Hvis koden ikke virker, skal du nedgradere til Firefox version 47 eller derunder. Alternativt kan du køre dine scripts på Chrome. Selen fungerer ud af kassen til Chrome. Du skal bare ændre 3 linjer kode for at få dit script til at fungere med Chrome eller Firefox

pakke nyprojekt;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// kommenter ovenstående linje og fjern kommentar under linjen for at bruge Chrome// import org.openqa.selenium.chrome.ChromeDriver;offentlig klasse PG1 {public static void main (String [] args) {// erklæring og instantiering af objekter / variablerSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver-driver = ny FirefoxDriver ();// kommenter ovenstående 2 linjer og kommentar under 2 linjer for at bruge Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// WebDriver driver = ny ChromeDriver ();Streng baseUrl = "http://demo.guru99.com/test/newtours/";String expectTitle = "Velkommen: Mercury Tours";String actualTitle = "";// start Fire fox og diriger den til Base URLdriver.get (baseUrl);// få den aktuelle værdi af titlenactualTitle = driver.getTitle ();/ ** Sammenlign den aktuelle titel på siden med den forventede og udskriv* resultatet som "bestået" eller "mislykkedes"* /hvis (actualTitle.contentEquals (forventet titel)) {System.out.println ("Test bestået!");} andet {System.out.println ("Test mislykkedes");}// luk ildrævdriver.close ();}}

Forklaring af koden

Importerer pakker

For at komme i gang skal du importere følgende to pakker:

  1. org.openqa.selenium. * - indeholder WebDriver-klassen, der er nødvendig for at starte en ny browser, der er indlæst med en bestemt driver
  2. org.openqa.selenium.firefox.FirefoxDriver - indeholder FirefoxDriver-klassen, der er nødvendig for at instantiere en Firefox-specifik driver til browseren, der er insti tificeret af WebDriver-klassen

Hvis din test har brug for mere komplicerede handlinger, såsom adgang til en anden klasse, tage browserskærmbilleder eller manipulere eksterne filer, skal du helt sikkert importere flere pakker.

Instantiering af objekter og variabler

Normalt er dette, hvordan et driverobjekt instantieres.

En FirefoxDriver-klasse uden parametre betyder, at Firefox-standardprofilen vil blive lanceret af vores Java-program. Standardprofilen til Firefox svarer til at starte Firefox i sikker tilstand (ingen udvidelser er indlæst).

For nemheds skyld gemte vi basis-URL og den forventede titel som variabler.

Start af en browsersession

WebDrivers get () -metode bruges til at starte en ny browsersession og dirigerer den til den URL, du angiver som parameter.

Få den aktuelle sidetitel

WebDriver-klassen har getTitle () -metoden, der altid bruges til at opnå sidetitlen på den aktuelt indlæste side.

Sammenlign de forventede og faktiske værdier

Denne del af koden bruger simpelthen en grundlæggende Java if-else-struktur til at sammenligne den faktiske titel med den forventede.

Afslutning af en browsersession

Metoden " close () " bruges til at lukke browservinduet.

Afslutning af hele programmet

Hvis du bruger denne kommando uden at lukke alle browservinduer først, slutter hele dit Java-program, mens browservinduet er åbent.

Kører testen

Der er to måder at udføre kode i Eclipse IDE.

  1. Klik på Kør> Kør på Eclipse's menulinje .
  2. Tryk på Ctrl + F11 for at køre hele koden.

Hvis du gjorde alt korrekt, ville Eclipse sende "Test bestået!"

Find GUI-elementer

Lokalisering af elementer i WebDriver udføres ved hjælp af metoden " findElement (By. Locator ()) ". Den "lokaliserende" del af koden er den samme som en hvilken som helst af de lokaliseringer, der tidligere er diskuteret i Selenium IDE-kapitlerne i disse tutorials. Faktisk anbefales det, at du finder GUI-elementer ved hjælp af IDE og en gang identificeret med succes eksporterer koden til WebDriver.

Her er en Selenium-prøvekode, der lokaliserer et element efter dets id. Facebook bruges som basis-URL.

pakke nyprojekt;importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import 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 ();Streng 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 brugte metoden getTagName () til at udtrække tagnavnet på det bestemte element, hvis id er "e-mail". Når den køres, skal denne kode være i stand til korrekt at identificere tagnavnet "input" og vil udskrive det i Eclipses konsolvindue.

Resume for lokalisering af elementer

Variation Beskrivelse Prøve
Ved. className finder elementer baseret på værdien af ​​attributten "klasse" findElement (By.className ("someClassName"))
Ved. cssSelector finder elementer baseret på driverens underliggende CSS Selector-motor findElement (By.cssSelector ("input # email"))
Ved. id lokaliserer elementer efter værdien af ​​deres "id" -attribut findElement (By.id ("someId"))
Ved. linkText finder et linkelement med den nøjagtige tekst, det viser findElement (By.linkText ("REGISTRATION"))
Ved. navn lokaliserer elementer efter værdien af ​​attributten "navn" findElement (By.name ("someName"))
Ved. partialLinkText lokaliserer elementer, der indeholder den givne linktekst findElement (By.partialLinkText ("REG"))
Ved. tagnavn lokaliserer elementer efter deres tagnavn findElement (By.tagName ("div"))
Ved. 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 / tabel / tbody / tr [5] "))

Bemærk om brug af findElement (By.cssSelector ())

By.cssSelector () understøtter ikke funktionen "indeholder" . Overvej Selen IDE-koden nedenfor -

I Selen IDE ovenfor bestod hele testen. Men i Selenium WebDriver-scriptet nedenfor genererede den samme test en fejl, fordi WebDriver ikke understøtter nøgleordet "indeholder", når det bruges i By.cssSelector () -metoden.

Almindelige kommandoer

Instantiering af webelementer

I stedet for at bruge den lange "driver.findElement (By.locator ())" syntaks hver gang du får adgang til et bestemt element, kan vi instantiere et WebElement-objekt til det. WebElement-klassen findes i pakken "org.openqa.selenium. *".

Klik på et element

Klik er måske den mest almindelige måde at interagere med webelementer på . Klik () -metoden bruges til at simulere klik på ethvert element. Følgende Selenium Java-eksempel viser, hvordan klik () blev brugt til at klikke på Mercury Tours '"Log-in" -knap.

Følgende ting skal bemærkes, når du bruger metoden click ().

  • Det kræver ikke nogen parameter / argument.
  • Metoden venter automatisk på, at en ny side indlæses, hvis det er relevant.
  • Elementet, der skal klikkes på, skal være synligt (højde og bredde må ikke være lig med nul).

Få kommandoer

Få kommandoer til at hente forskellige vigtige oplysninger om siden / elementet. Her er nogle vigtige "get" -kommandoer, du skal være fortrolig med.

Kommandoer Anvendelse
get () Eksempel på brug:
  • Det åbner automatisk et nyt browservindue og henter den side, du angiver inden for parenteserne.
  • Det er modstykket til Selen IDEs "åbne" kommando.
  • Parameteren skal være et strengobjekt .
getTitle () Eksempel på brug:
  • Behøver ingen parametre
  • Henter titlen på den aktuelle side
  • Ledende og bageste hvide rum er trimmet
  • Returnerer en nullstreng, hvis siden ikke har nogen titel
getPageSource () Eksempel på brug:
  • Behøver ingen parametre
  • Returnerer kildekoden på siden som en strengværdi
getCurrentUrl () Eksempel på brug:
  • Behøver ingen parametre
  • Henter den streng, der repræsenterer den aktuelle URL , som browseren ser på
getText () Eksempel på brug:
  • Henter den indre tekst af det element, du angiver

Naviger kommandoer

Disse kommandoer giver dig mulighed for at opdatere, gå ind og skifte frem og tilbage mellem forskellige websider.

naviger (). til () Eksempel på brug:
  • Det åbner automatisk et nyt browservindue og henter den side , du angiver inden for parenteserne.
  • Det gør nøjagtigt det samme som get () -metoden.
naviger (). opdater () Eksempel på brug:
  • Behøver ingen parametre.
  • Det opdaterer den aktuelle side.
navigere (). tilbage () Eksempel på brug:
  • Behøver ingen parametre
  • Fører dig tilbage med en side i browserens historie.
navigere (). fremad () Eksempel på brug:
  • Behøver ingen parametre
  • Fører dig fremad med en side i browserens historie.

Lukning og afslutning af browservinduer

close () Eksempel på brug:
  • Behøver ingen parametre
  • Det lukker kun det browservindue, som WebDriver i øjeblikket styrer .
afslut () Eksempel på brug:
  • Behøver ingen parametre
  • Det lukker alle vinduer, som WebDriver har åbnet.

For at tydeligt illustrere forskellen mellem close () og quit () skal du prøve at udføre koden nedenfor. Det bruger en webside, der automatisk dukker op et vindue ved sideindlæsning og åbner en ny efter afslutning.

Bemærk, at kun det overordnede browservindue blev lukket og ikke de to pop op-vinduer.

Men hvis du bruger quit (), lukkes alle vinduer - ikke kun den overordnede. Prøv at køre koden nedenfor, og du vil bemærke, at de to pop op-vinduer ovenfor også automatisk lukkes.

pakke nyprojekt;import org.openqa.selenium.WebDriver;import 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 at bruge QUIT lukkes alle vinduer}}

Skift mellem rammer

For at få adgang til GUI-elementer i en ramme, skal vi først lede WebDriver til at fokusere på rammen eller pop op-vinduet først, før vi kan få adgang til elementer i dem. Lad os f.eks. Tage websiden http://demo.guru99.com/selenium/deprecated.html

Denne side har 3 rammer, hvis "navn" -attributter er angivet ovenfor. Vi ønsker at få adgang til linket "Forældet" omgivet ovenfor med gult. For at gøre dette skal vi først instruere WebDriver om at skifte til "classFrame" -rammen ved hjælp af metoden "switchTo (). Frame ()" . Vi bruger navneattributten på rammen som parameter for "frame ()" -delen.

pakke nyprojekt;importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import 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 ("Forældet")). klik ();driver.close ();}}

Efter udførelse af denne kode vil du se, at "classFrame" -rammen føres til siden "Forældet API", hvilket betyder, at vores kode med succes kunne få adgang til linket "Forældet".

Skift mellem pop op-vinduer

WebDriver tillader, at pop op-vinduer som alarmer vises, i modsætning til Selenium IDE. For at få adgang til elementerne i alarmen (såsom den meddelelse, den indeholder), skal vi bruge metoden "switchTo (). Alarm ()" . I koden nedenfor bruger vi denne metode til at få adgang til advarselsboksen og derefter hente dens meddelelse ved hjælp af "getText ()" -metoden og derefter lukke alarmfeltet automatisk ved hjælp af "switchTo (). Alarm (). Accept () " metode.

Gå først til http://jsbin.com/usidix/1 og klik manuelt på "Gå!" knappen der og se selv beskedteksten.

Lad os se Selenium-eksempelkoden for at gøre dette-

pakke min pakke;importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import 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! \ "]")). klik ();alarmMessage = driver.switchTo (). alarm (). getText ();driver.switchTo (). alarm (). accepter ();System.out.println (alertMessage);driver.quit ();}}

På Eclipse-konsollen skal du bemærke, at den udskrevne besked er:

Venter

Der er to slags ventetider.

  1. Implicit ventetid - bruges til at indstille standard ventetid i hele programmet
  2. Eksplicit ventetid - bruges kun til at indstille ventetiden til en bestemt forekomst

Implicit Vent

  • Det er lettere at kode end eksplicit ventetid.
  • Det erklæres normalt i kodes instantieringsdel.
  • Du skal kun bruge en ekstra pakke for at importere.

For at begynde at bruge en implicit ventetid skal du importere denne pakke til din kode.

Derefter tilføjes dette på instantieringsdelen af ​​din kode.

Eksplicit Vent

Eksplicit ventetid udføres ved hjælp af klasserne WebDriverWait og ExpectedCondition . I det følgende Selenium WebDriver-eksempel venter vi op til 10 sekunder på, at et element, hvis id er "brugernavn", bliver synligt, før vi fortsætter til næste kommando. Her er trinene.

Trin 1

Importer disse to pakker:

Trin 2

Erklær en WebDriverWait-variabel. I dette eksempel bruger vi "myWaitVar" som navnet på variablen.

Trin 3

Brug myWaitVar med ExpectedConditions på dele, hvor du har brug for den eksplicitte ventetid for at forekomme. I dette tilfælde bruger vi eksplicit ventetid på "brugernavn" (Mercury Tours HomePage) -input, inden vi skriver teksten "tutorial" på den.

Betingelser

Følgende metoder anvendes i betingede operationer og looping-operationer -

  • isEnabled () bruges, når du vil kontrollere, om et bestemt element er aktiveret eller ej, før du udfører en kommando.
  • isDisplayed () bruges, når du vil kontrollere, om et bestemt element vises eller ej, før du udfører en kommando.
  • isSelected () bruges, når du vil kontrollere, om et bestemt afkrydsningsfelt, alternativknap eller mulighed i et rullemenu er valgt. Det virker ikke på andre elementer.

Brug af ExpectedConditions

Klassen ExpectedConditions tilbyder et bredere sæt betingelser, som du kan bruge sammen med WebDriverWait's indtil () -metode.

Nedenfor er nogle af de mest almindelige ExpectedConditions-metoder.

  • alarmIsPresent () - venter, indtil en advarselsboks vises.
  • elementToBeClickable () - venter, indtil et element er synligt og på samme tid aktiveret. Eksemplet på Selenium-koden nedenfor venter, indtil elementet først bliver synligt og aktiveret, før det tildeles elementet som en WebElement-variabel med navnet "txtUserName".
  • frameToBeAvailableAndSwitchToIt () - venter, indtil den givne ramme allerede er tilgængelig, og skifter derefter automatisk til den.

Fanger undtagelser

Når du bruger isEnabled (), isDisplayed () og isSelected (), antager WebDriver, at elementet allerede findes på siden. Ellers kaster det en NoSuchElementException . For at undgå dette skal vi bruge en prøvefangst-blok, så programmet ikke afbrydes.

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

Hvis du bruger eksplicit ventetid, er "TimeoutException" den undtagelsestype, du skal fange.

Resumé

  • For at begynde at bruge WebDriver API skal du importere mindst disse to pakker.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Metoden get () svarer til Selenium IDEs "åbne" kommando.
  • Lokalisering af elementer i WebDriver sker ved hjælp af findElement () -metoden.
  • Følgende er de tilgængelige muligheder for at finde elementer i WebDriver:
  • Ved. className
  • Ved. cssSelector
  • Ved. id
  • Ved. linkText
  • Ved. navn
  • Ved. partialLinkText
  • Ved. tagnavn
  • Ved. xpath
  • By.cssSelector () understøtter ikke funktionen "indeholder" .
  • Du kan instantiere et element ved hjælp af klassen WebElement .
  • At klikke på et element udføres ved hjælp af metoden click () .
  • WebDriver giver disse nyttige get-kommandoer :
  • få()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver giver disse nyttige navigeringskommandoer
  • navigere (). fremad ()
  • navigere (). tilbage ()
  • navigere (). til ()
  • naviger (). opdater ()
  • Metoderne close () og quit () bruges til at lukke browservinduer. Luk () bruges til at lukke et enkelt vindue; mens quit () bruges til at lukke alle vinduer, der er knyttet til det overordnede vindue, som WebDriver-objektet kontrollerede.
  • Den switchTo (). Ramme () og switchTo (). Alert () metoder anvendes til direkte WebDriver fokus på en ramme eller alarm, hhv.
  • Implicit ventetid bruges til at indstille ventetiden i hele programmet, mens eksplicit ventetid kun bruges på bestemte dele.
  • Du kan bruge isEnabled (), isDisplayed (), isSelected () og en kombination af metoder WebDriverWait og ExpectedCondition , når du verificerer tilstanden for et element. De verificerer dog ikke, om elementet ikke findes.
  • Når isEnabled (), isDisplayed () eller isSelected () blev kaldt, mens elementet ikke var eksisterende, vil WebDriver kaste en NoSuchElementException .
  • Når metoder til WebDriverWait og ExpectedConditions blev kaldt, mens elementet ikke var eksisterende, ville WebDriver kaste en TimeoutException .

Bemærk:

driver.get (): Det bruges til at gå til det bestemte websted, men det opretholder ikke browserhistorikken og cookies, så vi kan ikke bruge knappen frem og tilbage, hvis vi klikker på det, får siden ikke tidsplan

driver.navigate (): det bruges til at gå til det bestemte websted, men det opretholder browserhistorikken og cookies, så vi kan bruge fremad- og bagudknappen til at navigere mellem siderne under kodningen af ​​Testcase