Selenium Web-ohjain Java Ohjelmaesimerkki (näytekoodi)

Selenium Java esimerkki

Käyttäen Java luokka "myclass", jonka loimme edellisessä opetusohjelmassa, yritetään luoda WebDriver-skripti, joka:

Vaihe 1: noutaa Mercury Toursin kotisivut
Vaihe 2: tarkista sen otsikko
Vaihe 3: tulosta vertailun tulos
Vaihe 4: sulje se ennen kuin lopetat koko ohjelman.

Selenium WebDriver mallikoodi

Alla on todellinen WebDriver-koodi yllä olevan skenaarion esittämälle logiikalle

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 = "http://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();
    }

}

Huomautus: Käynnistetään Firefox 35, sinun on käytettävä Mozillan luomaa gecko-ohjainta käyttääksesi Web-ajuria. Selenium 3.0, geckolla ja firefoxilla on yhteensopivuusongelmia ja niiden oikea asettaminen voi olla vaikeaa. Jos koodi ei toimi, vaihda versioon Firefox versio 47 tai vanhempi. Vaihtoehtoisesti voit suorittaa skriptejä Chromessa. Selenium toimii alusta alkaen Chromelle. Sinun tarvitsee vain vaihtaa 3 koodiriviä, jotta skriptisi toimii Chromen tai Firefox

Koodin selittäminen

Pakettien tuonti

Aloita tuomalla seuraavat kaksi pakettia:

  1. org.openqa.selenium.*– sisältää WebDriver-luokan, joka tarvitaan tietyllä ohjaimella ladatun uuden selaimen luomiseen
  2. org.openqa.selenium.firefox.Firefoxkuljettaja – sisältää FirefoxKuljettajaluokka tarvitaan ilmentämiseen a Firefox-spesifinen ajuri WebDriver-luokan luomaan selaimeen

Jos testi vaatii monimutkaisempia toimia, kuten pääsyä toiseen luokkaan, selaimen kuvakaappausten ottamista tai ulkoisten tiedostojen käsittelyä, sinun on ehdottomasti tuotava lisää paketteja.

Objektien ja muuttujien ilmentäminen

Normaalisti näin ajuriobjekti instantoidaan.

WebDriver driver = new FirefoxDriver();

A FirefoxKuljettajaluokka ilman parametreja tarkoittaa, että oletusarvo Firefox profiilimme lanseeraa Java ohjelmoida. Oletus Firefox profiili on samanlainen kuin käynnistäminen Firefox vikasietotilassa (laajennuksia ei ladata).

Mukavuuden vuoksi tallensimme perus-URL-osoitteen ja odotetun otsikon muuttujiksi.

Selainistunnon käynnistäminen

WebDriver saada() -menetelmää käytetään uuden selainistunnon käynnistämiseen ja ohjaa sen parametriksi määrittämääsi URL-osoitteeseen.

driver.get(baseUrl);

Hanki todellinen sivun otsikko

WebDriver-luokassa on getTitle () menetelmä, jota käytetään aina lataamaan ladatun sivun otsikko.

actualTitle = driver.getTitle();

Vertaa odotettuja ja todellisia arvoja

Tämä koodin osa käyttää yksinkertaisesti peruskoodia Java if-else -rakenne, jolla voit verrata todellista otsikkoa odotettuun otsikkoon.

if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }

Selainistunnon lopettaminen

"kiinni()” -menetelmää käytetään selainikkunan sulkemiseen.

driver.close();

Koko ohjelman lopettaminen

Jos käytät tätä komentoa sulkematta ensin kaikkia selainikkunoita, koko Java ohjelma päättyy, kun selainikkuna jätetään auki.

System.exit(0);

Testin suorittaminen

On kaksi tapaa suorittaa koodia sisään Eclipse SDI.

  1. On Eclipsevalikkopalkissa, napsauta Suorita > Suorita.
  2. lehdistö Ctrl + F11 suorittaaksesi koko koodin.

Testin suorittaminen

Jos teit kaiken oikein, Eclipse antaisi tekstin "Testi läpäissyt!"

Testin suorittaminen

GUI-elementtien paikantaminen

Elementtien paikantaminen WebDriverissa tehdään käyttämällä "findElement(by.paikannin())”menetelmä. Koodin "locator"-osa on sama kuin mikä tahansa aiemmin käsitellyistä paikantimista Selenium IDE näiden opetusohjelmien lukuja. Itse asiassa on suositeltavaa, että etsit GUI-elementit IDE:n avulla ja kun se on onnistuneesti tunnistettu, vie koodi WebDriveriin.

Täällä on Selenium esimerkkikoodi, joka paikantaa elementin sen tunnuksen perusteella. Facebookia käytetään perus-URL-osoitteena.

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);
}
}

Käytimme getTagName() menetelmä poimia sen tietyn elementin tagin nimi, jonka tunnus on "email". Kun tämä koodi suoritetaan, sen pitäisi pystyä tunnistamaan tunnisteen nimi "input" oikein ja tulostaa se EclipseKonsoli-ikkunassa.

GUI-elementtien paikantaminen

Yhteenveto elementtien paikantamisesta

Vaihtelu Tuotetiedot Näyte
By.className etsii elementtejä "class"-attribuutin arvon perusteella findElement(By.className("joku luokannimi"))
Tekijä.cssSelector löytää elementit ohjaimen taustalla olevan CSS-valitsinmoottorin perusteella findElement(By.cssSelector("syöttö#sähköposti")
By.id paikantaa elementit niiden "id"-attribuutin arvon perusteella findElement(By.id("jokuId")
 
By.linkText löytää linkkielementin tarkalleen näyttämänsä tekstin perusteella findElement(By.linkText("REKISTERÖINTI")
 
Nimeltä paikantaa elementit "name"-attribuutin arvon perusteella findElement(By.name("jokuNimi"))
 
By.partialLinkText etsii elementit, jotka sisältävät annetun linkkitekstin findElement(By.partialLinkText("REG")
 
By.tagName paikantaa elementit tunnisteen nimen perusteella findElement(By.tagName("div")
 
By.xpath paikantaa elementit XPathin kautta 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]”))

Huomautus findElementin käyttämisestä (By.cssSelector())

By.cssSelector() ei tue "sisältää"-ominaisuutta. Harkitse Selenium IDE koodi alla -

Huomautus findElementin käyttämisestä (By.cssSelector())

In Selenium IDE yllä, koko testi läpäistiin. Kuitenkin vuonna Selenium WebDriver-komentosarjan alla, sama testi aiheutti virheen, koska WebDriver ei tue "contains"-avainsanaa, kun sitä käytetään By.cssSelector()-menetelmässä.

Huomautus findElementin käyttämisestä (By.cssSelector())

Yhteiset komennot

Web-elementtien luominen

Sen sijaan, että käyttäisimme pitkää "driver.findElement(By.locator())" -syntaksia joka kerta, kun käytät tiettyä elementtiä, voimme luoda sille WebElement-objektin. WebElement-luokka sisältyy "org.openqa.selenium.*" -pakettiin.

Web-elementtien luominen

Elementin napsauttaminen

Napsauttaminen on ehkä yleisin tapa olla vuorovaikutuksessa verkkoelementtien kanssa. The click() menetelmää käytetään minkä tahansa elementin napsautuksen simulointiin. Seuraavat Selenium Java esimerkki osoittaa kuinka click() käytettiin napsauttamaan Mercury Toursin "Kirjaudu sisään" -painike.

Elementin napsauttaminen

Seuraavat asiat on huomioitava click()-menetelmää käytettäessä.

  • Se ei vaadi parametreja/argumentteja.
  • Menetelmä odottaa automaattisesti uuden sivun latautumista, jos mahdollista.
  • Napsautettavan elementin on oltava näkyvissä (korkeus ja leveys eivät saa olla nolla).

Hanki komentoja

Get-komennot hakevat useita tärkeitä tietoja sivusta/elementistä. Tässä on joitain tärkeitä "get"-komentoja, jotka sinun on tunnettava.

komennot Käyttö
saada()

Käyttönäyte:

  • Se avaa automaattisesti uuden selainikkunan ja hakee suluissa määrittämäsi sivun.
  • Se on vastine Selenium IDE:n "open"-komento.
  • Parametrin on oltava a jono esine.
getTitle ()

Käyttönäyte:

  • Ei vaadi parametreja
  • Hakee nykyisen sivun otsikon
  • Etu- ja perässä olevat välilyönnit leikataan
  • Palauttaa tyhjän merkkijonon, jos sivulla ei ole otsikkoa
getPageSource()

Käyttönäyte:

  • Ei vaadi parametreja
  • Palauttaa sivun lähdekoodin merkkijonoarvona
getCurrentUrl()

Käyttönäyte:

  • Ei vaadi parametreja
  • Hakee merkkijonon, joka edustaa nykyistä URL-osoitetta, jota selain tarkastelee
getText ()

Käyttönäyte:

  • Hakee määrittämäsi elementin sisätekstin

Navigointikomennot

Näiden komentojen avulla voit päivittää, siirtyä ja vaihtaa edestakaisin eri verkkosivujen välillä.

Navigoida johonkin()

Käyttönäyte:

  • Se avaa automaattisesti uuden selainikkunan ja hakee suluissa määrittämäsi sivun.
  • Se tekee täsmälleen saman asian kuin get() menetelmällä.
navigate().refresh()

Käyttönäyte:

  • Ei vaadi parametreja.
  • Se päivittää nykyisen sivun.
navigoi().takaisin()

Käyttönäyte:

  • Ei vaadi parametreja
  • Vie sinut yhden sivun verran taaksepäin selaimen historiassa.
navigoi().eteenpäin()

Käyttönäyte:

  • Ei vaadi parametreja
  • Vie sinut yhden sivun verran eteenpäin selaimen historiassa.

Selaimen sulkeminen ja sulkeminen Windows

kiinni()

Käyttönäyte:

  • Ei vaadi parametreja
  • Se sulkee vain selainikkunan, jota WebDriver tällä hetkellä hallitsee.
lopettaa()

Käyttönäyte:

  • Ei vaadi parametreja
  • Se sulkee kaikki ikkunat, jotka WebDriver on avannut.

Selaimen sulkeminen ja sulkeminen Windows

Selvästi havainnollistamaan eroa close() ja quit(), yritä suorittaa alla oleva koodi. Se käyttää verkkosivua, joka avaa automaattisesti ikkunan sivun latauksen yhteydessä ja avaa toisen poistuttuaan.

Selaimen sulkeminen ja sulkeminen Windows

Huomaa, että vain pääselainikkuna suljettiin, ei kahta ponnahdusikkunaa.

Selaimen sulkeminen ja sulkeminen Windows

Mutta jos käytät quit():tä, kaikki ikkunat suljetaan – ei vain pääikkuna. Yritä suorittaa alla oleva koodi ja huomaat, että myös kaksi yllä olevaa ponnahdusikkunaa suljetaan automaattisesti.

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
    }
}

Vaihtaminen kehysten välillä

Jotta voisimme käyttää kehyksen GUI-elementtejä, meidän tulee ensin ohjata WebDriver keskittymään kehykseen tai ponnahdusikkunaan, ennen kuin voimme käyttää niiden sisältämiä elementtejä. Otetaan esimerkiksi nettisivu http://demo.guru99.com/selenium/deprecated.html

Vaihtaminen kehysten välillä

Tällä sivulla on 3 kehystä, joiden "nimi"-attribuutit on ilmoitettu yllä. Haluamme käyttää "Käytöstä poistettu" -linkkiä, joka on ympäröity yllä keltaisella. Tätä varten meidän on ensin neuvottava WebDriver siirtymään "classFrame" -kehykseen käyttämällä "switchTo().frame()" menetelmä. Käytämme kehyksen name-attribuuttia "frame()"-osan parametrina.

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("http://demo.guru99.com/selenium/deprecated.html");
	        driver.switchTo().frame("classFrame");
	        driver.findElement(By.linkText("Deprecated")).click();
	        driver.close(); 
	    }
}

Kun olet suorittanut tämän koodin, näet, että "classFrame" -kehys viedään "Deprecated API" -sivulle, mikä tarkoittaa, että koodimme pääsi onnistuneesti käyttämään "Deprecated" -linkkiä.

Ponnahdusikkunoiden välillä vaihtaminen Windows

WebDriver mahdollistaa ponnahdusikkunoiden, kuten hälytysten, näyttämisen, toisin kuin in Selenium IDE. Käyttääksemme hälytyksen elementtejä (kuten sen sisältämää viestiä), meidän on käytettävä "switchTo().alert()" menetelmä. Alla olevassa koodissa käytämme tätä menetelmää päästäksemme hälytysruutuun ja noutaaksemme sen viestin käyttämällä "getText()" -menetelmää ja sulje sitten hälytysruutu automaattisesti käyttämällä "switchTo().alert().accept()" menetelmällä.

Ensinnäkin, suuntaa https://output.jsbin.com/usidix/1 ja napsauta manuaalisesti "Go!" painiketta siellä ja katso itse viestin teksti.

Ponnahdusikkunoiden välillä vaihtaminen Windows

Katsotaanpa Selenium esimerkkikoodi tämän tekemiseen -

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();
       
    }
}

On Eclipse konsoli, huomaa, että tulostettu hälytysviesti on:

Ponnahdusikkunoiden välillä vaihtaminen Windows

Odottaa

Odotuksia on kahdenlaisia.

  1. Implisiittinen odotus – käytetään oletusodotusajan asettamiseen koko ohjelman ajan
  2. Eksplisiittinen odotus – käytetään vain tietyn esiintymän odotusajan asettamiseen

Epäsuora odota

  • Se on yksinkertaisempaa koodata kuin Explicit Waits.
  • Se ilmoitetaan yleensä koodin toteutusosassa.
  • Tarvitset vain yhden lisäpaketin tuontia varten.

Jos haluat aloittaa implisiittisen odotuksen käytön, sinun on tuotava tämä paketti koodiisi.

Epäsuora odota

Lisää sitten tämä koodisi instanssiosaan.

Epäsuora odota

Selkeä odota

Eksplisiittiset odotukset tehdään WebDriverWait- ja ExpectedCondition-luokkien avulla. Seuraaville Selenium WebDriver-esimerkissä odotamme jopa 10 sekuntia, että elementti, jonka tunnus on "username", tulee näkyviin ennen kuin siirrymme seuraavaan komentoon. Tässä ovat vaiheet.

Vaihe 1:

Tuo nämä kaksi pakettia:

Selkeä odota

Vaihe 2:

Ilmoita WebDriverWait-muuttuja. Tässä esimerkissä käytämme muuttujan nimenä "myWaitVar".

Selkeä odota

Vaihe 3:

Käytä myWaitVar-toimintoa ExpectedConditionsin kanssa osissa, joissa tarvitset nimenomaisen odotuksen. Tässä tapauksessa käytämme nimenomaista odotusta "käyttäjänimessä" (Mercury Tours HomePage) -syöte ennen kuin kirjoitamme siihen tekstin "opastus".

Selkeä odota

olosuhteet

Seuraavia menetelmiä käytetään ehdollisissa ja silmukkaoperaatioissa -

  • on kytketty() käytetään, kun haluat varmistaa, onko tietty elementti käytössä vai ei ennen komennon suorittamista.

Ehdot isEnabled()

  • näytetään() käytetään, kun haluat varmistaa, näkyykö tietty elementti ennen komennon suorittamista.

Ehdot isDisplayed()

  • isSelected() käytetään, kun haluat varmistaa, onko tietty valintaruutu, valintanappi tai vaihtoehto avattavasta valikosta on valittu. Se ei toimi muilla elementeillä.

Ehdot on valittu()

Odotettujen olosuhteiden käyttö

ExpectedConditions-luokka tarjoaa laajemman joukon ehtoja, joita voit käyttää WebDriverWaitin till()-metodin kanssa.

Alla on joitain yleisimmistä ExpectedConditions-menetelmistä.

  • alertIsPresent() – odottaa, kunnes hälytysruutu tulee näkyviin.

ExpectedConditions alertIsPresent() käyttö

  • elementToBeClickable() – Odottaa, kunnes elementti on näkyvissä ja samalla käytössä. Näyte Selenium Alla oleva koodi odottaa, kunnes elementti, jonka id=”username” tulee näkyviin ja otetaan käyttöön, ennen kuin se määritetään WebElement-muuttujaksi nimeltä ”txtUserName”.

Odotettujen olosuhteiden käyttö

  • frameToBeavailableJa SwitchToIt() – Odottaa, kunnes annettu kehys on jo saatavilla, ja vaihtaa sitten siihen automaattisesti.

Käyttämällä ExpectedConditions elementtiäToBeClickable()

Poikkeusten kiinniotto

Käytettäessä isEnabled(), isDisplayed() ja isSelected() WebDriver olettaa, että elementti on jo olemassa sivulla. Muuten se heittää a NoSuchElementException. Tämän välttämiseksi meidän tulisi käyttää try-catch-lohkoa, jotta ohjelma ei keskeydy.

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());
 }

Jos käytät eksplisiittisiä odotuksia, poikkeuksen tyyppi, joka sinun pitäisi saada kiinni, on "TimeoutException".

Poikkeusten kiinniotto

Yhteenveto

  • Jotta voit aloittaa WebDriver API:n käytön, sinun on tuotava vähintään nämä kaksi pakettia.
  • org.openqa.selenium.*
  • org.openqa.selenium.firefox.Firefoxkuljettaja
  • - get() menetelmä on vastaava Selenium IDE:n "open"-komento.
  • Elementtien paikantaminen WebDriverissa tapahtuu käyttämällä findElement() menetelmällä.
  • Seuraavat ovat käytettävissä olevat vaihtoehdot elementtien paikallistamiseen WebDriverissa:
  • By.className
  • Tekijä.cssSelector
  • By.id
  • By.linkText
  • Nimeltä
  • By.partialLinkText
  • By.tagName
  • By.xpath
  • By.cssSelector() ei tukea "sisältää" ominaisuus.
  • Voit toteuttaa elementin käyttämällä WebElement-luokkaa.
  • Elementin napsauttaminen tapahtuu käyttämällä click() menetelmällä.
  • WebDriver tarjoaa nämä hyödylliset get-komennot:
  • saada()
  • getTitle ()
  • getPageSource()
  • getCurrentUrl()
  • getText ()
  • WebDriver tarjoaa nämä hyödylliset navigointikomennot
  • navigoi().eteenpäin()
  • navigoi().takaisin()
  • Navigoida johonkin()
  • navigate().refresh()
  • Sulje()- ja quit()-menetelmiä käytetään selainikkunoiden sulkemiseen. Close() käytetään yhden ikkunan sulkemiseen; sillä aikaa quit() käytetään sulkemaan kaikki ikkunat, jotka liittyvät pääikkunaan, jota WebDriver-objekti ohjasi.
  • - switchTo().frame() ja switchTo().alert() menetelmiä käytetään ohjaamaan WebDriverin kohdistus kehykseen tai hälytystilaan.
  • Implicit waits käytetään asettamaan odotusaika koko ohjelman aikana, kun explicit waits käytetään vain tietyissä osissa.
  • Voit käyttää isEnabled(), isDisplayed(),isSelected() ja yhdistelmää WebDriverOdota ja Odotetut olosuhteet menetelmiä elementin tilan tarkistamisessa. He eivät kuitenkaan tarkista, jos elementtiä ei ole olemassa.
  • Kun isEnabled(), isDisplayed(), tai isSelected() kutsuttiin, kun elementtiä ei ollut olemassa, WebDriver heittää NoSuchElementException.
  • Kun WebDriverWait- ja ExpectedConditions-menetelmiä kutsuttiin, kun elementtiä ei ollut olemassa, WebDriver heitti TimeoutException.

Huomautus:

driver.get(): Tätä menetelmää käytetään siirtymiseen tietylle verkkosivustolle. Se ei kuitenkaan säilytä selainhistoriaa tai evästeitä. Tämän seurauksena eteenpäin- ja taaksepäin-painikkeet eivät toimi, eikä niiden napsauttaminen ajoita sivunavigointia.

driver.navigate(): Tätä menetelmää käytetään myös siirtymiseen tietylle verkkosivustolle, mutta se säilyttää selainhistorian ja evästeet. Tämä mahdollistaa eteenpäin- ja taaksepäin-painikkeiden käytön sivujen välillä siirtymiseen koodattaessa testitapausta.

Lue lisää Readmore