Selenium Veebidraiver Java Programmi näide

⚡ Nutikas kokkuvõte

Selenium Veebidraiver Java Programminäide juhatab teid läbi teie esimese otsast lõpuni automatiseerimise skripti. LessNeed hõlmavad keskkonna seadistamist, elementide leidmist, sisendi saatmist, navigeerimist, valideerimist, ootamist, erandite käsitlemist ja usaldusväärsete WebDriveri testide parimaid tavasid.

  • ⚙️ Keskkonna seadistamine: paigaldama Java, Eclipse või IntelliJ, konfigureeri Selenium teegid ja vali oma brauseri versioonile sobiv draiveri binaarfail.
  • 🧭 Elementide lokaatorid: Kasutage elementide stabiilseks tuvastamiseks brauserites ja versioonides ID-d, nime, klassi, XPathi, CSS-i valijat ja linkTexti.
  • ⌨️ Toimingud ja sisend: WebDriver toetab klikke, sendKeys'e, submit'e, rippmenüüde valimist ja klaviatuurisündmusi täieliku kasutajastiilis interaktsiooni tagamiseks.
  • ⏳ Nutikad ootamised: Ebakindlate testide vältimiseks asendage Thread.sleep parameetriga ExpectedConditions parameetriga vaikimisi, selgelt ja sujuvalt ooteaegadega.
  • ???? Erandi käsitlemine: Püüa kinni NoSuchElementException, TimeoutException ja StaleElementReferenceException, et hoida automatiseerimiskomplektid vastupidavana.
  • 🤖 Tehisintellekti testi genereerimine: Tehisintellekti assistendid genereerivad standardseid WebDriveri skripte, pakuvad välja lokaatoreid ja parandavad automaatselt selektoreid, kui DOM muutub.

Selenium Veebidraiver Java Programm

Selenium Java Näide

kasutades Java klassi “myclass”, mille me eelmises õpetuses lõime, proovime luua WebDriveri skripti, mis:

Samm 1: tooma Mercury Toursi koduleht
Samm 2: kontrollige selle pealkirja
Samm 3: printige välja võrdluse tulemus
Samm 4: sulgege see enne kogu programmi lõpetamist.

Selenium WebDriveri näidis Code

Allpool on tegelik WebDriveri kood ülaltoodud stsenaariumi loogika jaoks

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

}

Märkus: Käivitamine Firefox 35, peate veebidraiveri kasutamiseks kasutama Mozilla loodud gecko draiverit. Selenium 3.0, geckol ja firefoxil on ühilduvusprobleeme ja nende õige seadistamine võib muutuda ülesmäge tekitavaks ülesandeks. Kui kood ei tööta, minge alla versioonile Firefox versioon 47 või vanem. Teise võimalusena saate oma skripte Chrome'is käitada. Selenium töötab Chrome'i jaoks karbist välja. Peate lihtsalt muutma 3 koodirida, et skript töötaks Chrome'iga või Firefox

Koodi selgitamine

Pakkide importimine

Alustamiseks peate importima järgmised kaks paketti:

  1. org.openqa.selenium.*– sisaldab klassi WebDriver, mis on vajalik konkreetse draiveriga laaditud uue brauseri loomiseks
  2. org.openqa.selenium.firefox.Firefoxjuht - sisaldab FirefoxA instantseerimiseks vajalik juhiklass Firefox-spetsiifiline draiver brauserisse, mille loob klass WebDriver

Kui teie test vajab keerukamaid toiminguid, nagu juurdepääs teisele klassile, brauseri ekraanipiltide tegemine või väliste failidega manipuleerimine, peate kindlasti importima rohkem pakette.

Objektide ja muutujate leidmine

Tavaliselt instantseeritakse draiveriobjekt nii.

WebDriver driver = new FirefoxDriver();

A FirefoxDraiveri klass ilma parameetriteta tähendab, et vaikimisi Firefox profiili käivitab meie Java programm. Vaikimisi Firefox profiil sarnaneb käivitamisega Firefox turvarežiimis (laiendusi ei laadita).

Mugavuse huvides salvestasime baasi. URL ja eeldatav pealkiri muutujatena.

Brauseri seansi käivitamine

WebDriver saada () meetodit kasutatakse uue brauseriseansi käivitamiseks ja selle suunamiseks URL mille määrate parameetrina.

driver.get(baseUrl);

Hankige tegelik lehe pealkiri

WebDriveri klassis on getTitle () meetod, mida kasutatakse alati hetkel laaditud lehe pealkirja hankimiseks.

actualTitle = driver.getTitle();

Võrrelge eeldatavat ja tegelikku väärtust

See koodiosa kasutab lihtsalt põhikoodi Java if-else struktuur, et võrrelda tegelikku pealkirja oodatud pealkirjaga.

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

Brauseri seansi lõpetamine

"Sulge()” meetodit kasutatakse brauseriakna sulgemiseks.

driver.close();

Kogu programmi lõpetamine

Kui kasutate seda käsku ilma kõiki brauseriaknaid esmalt sulgemata, siis kogu oma Java programm lõpeb, jättes brauseriakna avatuks.

System.exit(0);

Testi käivitamine

Koodi käivitamiseks on kaks võimalust Eclipse SDI.

  1. On Eclipsei menüüribal, klõpsake Käivita > Käivita.
  2. press Ctrl + F11 kogu koodi käivitamiseks.

Testi käivitamine

Kui tegite kõik õigesti, Eclipse väljastaks "Test läbitud!"

Testi käivitamine

GUI elementide leidmine

Elementide leidmine WebDriveris tehakse kasutades "findElement (Autor.lokaator())” meetod. Koodi osa „lokaator” on sama, mis mis tahes lokaatoritel, mida on varem artiklis käsitletud Selenium IDE nende õpetuste peatükid. Tegelikult on soovitatav leida GUI elemendid IDE abil ja pärast edukat tuvastamist eksportida kood WebDriveri.

Siin on Selenium näidiskood, mis leiab elemendi selle ID järgi. Facebooki kasutatakse baasina 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);
}
}

Me kasutasime getTagName() meetod ex-i jaokstract selle konkreetse elemendi sildi nimi, mille ID on „email“. Käivitamisel peaks see kood suutma sildi nime „input“ õigesti tuvastada ja selle välja prindima. Eclipsekonsooli aken.

GUI elementide leidmine

Kokkuvõte elementide asukoha määramiseks

Variatsioon Kirjeldus Proov
By.className leiab elemente atribuudi “class” väärtuse põhjal findElement(By.className("someClassName")
Autor.cssSelector leiab elemendid draiveri CSS-i valija mootori põhjal findElement(By.cssSelector("input#email")
Autor.id otsib elemendid nende atribuudi "id" väärtuse järgi findElement(By.id("someId")
 
By.linkText leiab lingielemendi täpselt kuvatava teksti järgi findElement(By.linkText("REGISTRATION")
 
Nime järgi otsib elemendid atribuudi "name" väärtuse järgi findElement (nime järgi ("mingi nimi")
 
By.partialLinkText otsib elemendid, mis sisaldavad antud lingi teksti findElement(By.partialLinkText("REG")
 
Autor.tagName otsib elemendid nende sildi nime järgi findElement(By.tagName("div")
 
Autor.xpath otsib elemente XPathi kaudu 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]”))

Märkus findElement(By.cssSelector()) kasutamise kohta

By.cssSelector() ei toeta funktsiooni "sisaldab". Kaaluge Selenium IDE kood allpool -

Märkus findElement(By.cssSelector()) kasutamise kohta

In Selenium IDE ülal, kogu test läbis. Kuid aastal Selenium Alloleva WebDriveri skripti puhul tekitas sama test tõrke, kuna WebDriver ei toeta meetodi By.cssSelector() puhul märksõna "sisaldab".

Märkus findElement(By.cssSelector()) kasutamise kohta

Ühised käsud

Veebielementide loomine

Selle asemel, et kasutada pikka süntaksit „driver.findElement(By.locator())” iga kord, kui konkreetsele elemendile juurde pääsete, saame selle jaoks luua WebElementi objekti. WebElement klass sisaldub paketis “org.openqa.selenium.*”.

Veebielementide loomine

Elemendil klõpsamine

Klõpsamine on ehk kõige levinum viis veebielementidega suhtlemiseks. The click() meetodit kasutatakse mis tahes elemendi klõpsamise simuleerimiseks. Järgmised Selenium Java näide näitab, kuidas click() kasutati klõpsamiseks Mercury Toursi nupp "Sisselogimine".

Elemendil klõpsamine

Click() meetodi kasutamisel tuleb tähele panna järgmisi asju.

  • See ei nõua ühtegi parameetrit/argumenti.
  • Meetod ootab vajaduse korral automaatselt uue lehe laadimist.
  • Klõpsatav element peab olema nähtav (kõrgus ja laius ei tohi olla võrdne nulliga).

Hankige käske

Hangi käsud toovad lehe/elemendi kohta erinevat olulist teavet. Siin on mõned olulised hankimiskäsud, mida peate teadma.

Käsud Kasutus
saada ()

Kasutamise näidis:

  • See avab automaatselt uue brauseriakna ja tõmbab sulgudes määratud lehe.
  • See on vaste Selenium IDE käsk "avatud".
  • Parameeter peab olema a nöör objekt
getTitle ()

Kasutamise näidis:

  • Ei vaja parameetreid
  • Tõmbab praeguse lehe pealkirja
  • Eesmised ja lõpus olevad tühikud on kärbitud
  • Tagastab nullstringi, kui lehel pole pealkirja
getPageSource()

Kasutamise näidis:

  • Ei vaja parameetreid
  • Tagastab stringi väärtusena lehe lähtekoodi
getCurrentUrl()

Kasutamise näidis:

  • Ei vaja parameetreid
  • Tõmbab stringi, mis esindab praegust URL mida brauser vaatab
getText ()

Kasutamise näidis:

  • Toob teie määratud elemendi sisemise teksti

Navigeerimiskäsklused

Need käsud võimaldavad teil erinevatel veebilehtedel värskendada, siseneda ja lülituda edasi-tagasi.

navigate().to()

Kasutamise näidis:

  • See avab automaatselt uue brauseriakna ja tõmbab sulgudes määratud lehe.
  • See teeb täpselt sama asja, mis get() meetod.
navigate().refresh()

Kasutamise näidis:

  • Ei vaja parameetreid.
  • See värskendab praegust lehte.
navigate().tagasi()

Kasutamise näidis:

  • Ei vaja parameetreid
  • Viib teid brauseri ajaloos ühe lehekülje võrra tagasi.
navigate().forward()

Kasutamise näidis:

  • Ei vaja parameetreid
  • Viib teid brauseri ajaloos ühe lehekülje võrra edasi.

Brauseri sulgemine ja sulgemine Windows

Sulge()

Kasutamise näidis:

  • Ei vaja parameetreid
  • See sulgeb ainult brauseriakna, mida WebDriver praegu juhib.
loobuda ()

Kasutamise näidis:

  • Ei vaja parameetreid
  • See sulgeb kõik aknad, mille WebDriver on avanud.

Brauseri sulgemine ja sulgemine Windows

Et selgelt illustreerida erinevust close() ja quit(), proovige allolevat koodi käivitada. See kasutab veebilehte, mis avab lehe laadimisel automaatselt akna ja pärast väljumist avab teise.

Brauseri sulgemine ja sulgemine Windows

Pange tähele, et ainult ülembrauseri aken suleti, mitte aga kaks hüpikakent.

Brauseri sulgemine ja sulgemine Windows

Kuid kui kasutate quit(), suletakse kõik aknad – mitte ainult ülem. Proovige allolevat koodi käivitada ja märkate, et ka kaks ülaltoodud hüpikakent suletakse automaatselt.

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

Kaadrite vahel vahetamine

Raami GUI elementidele juurde pääsemiseks peaksime esmalt suunama WebDriveri keskenduma raamile või hüpikaknale, enne kui pääseme juurde nende elementidele. Võtame näiteks veebilehe https://demo.guru99.com/selenium/deprecated.html

Kaadrite vahel vahetamine

Sellel lehel on 3 raami, mille "name" atribuudid on ülaltoodud. Soovime juurdepääsu lingile „Aegunud”, mis on ümbritsetud kollasega. Selleks peame esmalt andma WebDriverile käsu lülituda „classFrame“ raamile, kasutades "switchTo().frame()" meetod. Kasutame osa "frame()" parameetrina raami atribuuti name.

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

Pärast selle koodi käivitamist näete, et "classFrame" raam viiakse lehele "Aegunud API", mis tähendab, et meie kood pääses edukalt juurde lingile "Aegunud".

Hüpikakende vahel vahetamine Windows

WebDriver võimaldab erinevalt rakendusest kuvada hüpikaknaid, nagu hoiatusi Selenium IDE. Hoiatuse elementidele (nt selles sisalduvale sõnumile) juurdepääsemiseks peame kasutama "switchTo().alert()" meetod. Allolevas koodis kasutame seda meetodit hoiatuskastile juurdepääsuks ja seejärel selle sõnumi allalaadimiseks, kasutades "getText()" meetodit ja sulgege seejärel automaatselt hoiatuskast, kasutades nuppu "switchTo().alert().accept()" meetod.

Esiteks, suunduge https://output.jsbin.com/usidix/1 ja klõpsake käsitsi nuppu "Mine!" nuppu seal ja vaadake ise sõnumi teksti.

Hüpikakende vahel vahetamine Windows

Vaatame, Selenium Näidiskood selle tegemiseks -

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

Kohta Eclipse konsooli, pange tähele, et prinditud hoiatusteade on:

Hüpikakende vahel vahetamine Windows

Ootab

Ootamist on kahte tüüpi.

  1. Kaudne ootamine – kasutatakse kogu programmis vaikimisi ooteaja määramiseks
  2. Otsene ootamine – kasutatakse ooteaja määramiseks ainult konkreetse eksemplari jaoks

Kaudne ootamine

  • Kodeerimine on lihtsam kui selgesõnaline ootamine.
  • Tavaliselt deklareeritakse see koodi eksemplariosas.
  • Importimiseks on vaja ainult ühte lisapaketti.

Kaudse ootamise alustamiseks peate selle paketi oma koodi importima.

Kaudne ootamine

Seejärel lisage see oma koodi käivitamisossa.

Kaudne ootamine

Selgesõnaline ootamine

Selgesõnaline ootamine toimub klasside WebDriverWait ja ExpectedCondition abil. Järgneva jaoks Selenium WebDriveri näites ootame kuni 10 sekundit, kuni element, mille ID on "kasutajanimi", muutub nähtavaks, enne kui jätkame järgmise käsuga. Siin on sammud.

Samm 1:

Importige need kaks paketti:

Selgesõnaline ootamine

Samm 2:

Deklareerige WebDriverWait muutuja. Selles näites kasutame muutuja nimena "myWaitVar".

Selgesõnaline ootamine

Samm 3:

Kasutage myWaitVar koos ExpectedConditionsiga osades, kus vajate selget ootamist. Sel juhul kasutame "kasutajanime" (Mercury Tours HomePage), enne kui sisestame sellele teksti „õpetus”.

Selgesõnaline ootamine

Tingimused

Tingimuslikes ja loo-režiimides kasutatakse järgmisi meetodeid:ping operatsioonid —

  • isEnabled() kasutatakse siis, kui soovite enne käsu täitmist kontrollida, kas teatud element on lubatud või mitte.

Tingimused on lubatud ()

  • on Kuvatud() kasutatakse siis, kui soovite enne käsu täitmist kontrollida, kas teatud elementi kuvatakse või mitte.

Tingimused isDisplayed()

  • isSelected() kasutatakse siis, kui soovite kontrollida, kas teatud märkeruut, raadionupp või valik rippmenüüst on valitud. See ei tööta teiste elementidega.

Tingimused on valitud()

Oodatavate tingimuste kasutamine

Klass ExpectedConditions pakub laiemat tingimuste kogumit, mida saate kasutada koos WebDriverWait meetodiga till().

Allpool on toodud mõned kõige levinumad ExpectedConditions meetodid.

  • alertIsPresent() – ootab, kuni kuvatakse hoiatuskast.

Kasutades ExpectedConditions alertIsPresent()

  • elementToBeClickable() – Ootab, kuni element on nähtav ja samal ajal lubatud. Näidis Selenium Code Allpool ootab, kuni element id=”kasutajanimi” muutub nähtavaks ja lubatuks, enne kui sellele elemendile määratakse WebElement muutuja nimega „txtUserName”.

Oodatavate tingimuste kasutamine

  • raamSaadavalJaLülitaSelle() – Ootab, kuni antud kaader on juba saadaval, ja seejärel lülitub sellele automaatselt.

Kasutades ExpectedConditions elementiToBeClickable()

Erandite püüdmine

IsEnabled(), isDisplayed() ja isSelected() kasutamisel eeldab WebDriver, et element on lehel juba olemas. Vastasel korral viskab a NoSuchElementException. Selle vältimiseks peaksime kasutama try-catch plokki, et programm ei katkeks.

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

Kui kasutate selget ootamist, on erandi tüüp, mille peaksite tabama, "TimeoutException".

Erandite püüdmine

KKK

Paigalda JDK, IDE, näiteks Eclipse või IntelliJ Selenium Java teekide ja vastava brauseri draiveri abil. Looge automatiseerimistööriistu nagu Maven või Gradle lihtsustada sõltuvuste haldamist.

Tehisintellekt parandab automaatselt lokaatoreid, genereerib kasutajalugudest testjuhtumeid ja tuvastab ebakindlaid teste. Platvormid nagu Testim, Mabl ja Applitools sisaldavad tehisintellekti nutikamate autorite, teostuse ja visuaalse valideerimise jaoks.

Jah. GitHub Copilot, Cursor ja JetBrains AI genereerib Java Selenium skriptid tavakeeles etappidest, sh ooteajad, väited ja leheobjektid. Need vähendavad oluliselt uute testistsenaariumide jaoks vajalikku malli.

findElement tagastab esimese sobiva WebElement'i või viskab NoSuchElementException'i. findElements tagastab kõigi vastete loendi ja tühja loendi, kui ühtegi vastet ei leita, erandit ei viska.

Thread.sleep peatab lehe olekust olenemata fikseeritud ajaks, aeglustades kiireid töid ja nurjudes aeglaseid. Kasutage WebDriverWaiti koos ExpectedConditionsiga, et oodata ainult nii kaua kui vaja.

Selenium toetab ChromeDriverit ja GeckoDriverit Firefox, EdgeDriver, SafariDriver ja IEDriverServer. Selenium Versioonis 4 laadib Manager õige draiveri automaatselt alla.

Chrome'i valikute või FirefoxValikud objekt funktsiooniga setAcceptInsecureCerts(true). See annab brauserile märku kehtetute sertifikaatide ignoreerimiseks, et WebDriveri seanss saaks jätkuda.

WebDriverManager laadib automaatselt alla ja konfigureerib teie installitud brauseriversiooni jaoks õige brauseri draiveri binaarfaili, eemaldades käsitsi draiverite hoolduse vajaduse ja vähendades uute kaasautorite seadistusaega.

Võta see postitus kokku järgmiselt: