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.

  • ⚙️ Miljøoppsett: Install Java, Eclipse eller IntelliJ, konfigurer Selenium biblioteker, og velg riktig driverbinærfil for nettleserversjonen din.
  • 🧭 Elementlokalisering: Bruk ID, navn, klasse, XPath, CSS-selektor og linkText for å identifisere elementer stabilt på tvers av nettlesere og versjoner.
  • ⌨️ Handlinger og innspill: WebDriver støtter klikk-, send-Keys-, send-, velg-nedtrekksmenyer og tastaturhendelser for full brukervennlig interaksjon.
  • Smarte ventetider: Erstatt Thread.sleep med implisitte, eksplisitte og flytende ventetider drevet av ExpectedConditions for å eliminere ustabile tester.
  • 🚨 Avvikshåndtering: Fang opp NoSuchElementException, TimeoutException og StaleElementReferenceException for å holde automatiseringssuiter robuste.
  • 🤖 Generering av AI-test: AI-assistenter genererer standard WebDriver-skript, foreslår lokatorer og automatisk reparerer velgere når DOM-en endres.

Selenium webdriver Java Program

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:

  1. org.openqa.selenium.*– inneholder WebDriver-klassen som trengs for å instansiere en ny nettleser lastet med en bestemt driver
  2. 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.

  1. On Eclipses menylinje, klikk Kjør > Kjør.
  2. Press Ctrl + F11 for å kjøre hele koden.

Kjører testen

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

Kjører testen

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.

Finne GUI-elementer

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 -

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

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.

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

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.

Instantiering av webelementer

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.

Klikk på et element

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:

  • Den åpner automatisk et nytt nettleservindu og henter siden du spesifiserer innenfor parentesen.
  • Det er motstykket til Selenium IDEs "åpne" kommando.
  • Parameteren må være en String gjenstand.
getTitle()

Eksempelbruk:

  • Trenger ingen parametere
  • Henter tittelen på gjeldende side
  • Førende og etterfølgende hvite områder er trimmet
  • Returnerer en null-streng hvis siden ikke har noen tittel
getPageSource()

Eksempelbruk:

  • Trenger ingen parametere
  • Returnerer kildekoden til siden som en strengverdi
getCurrentUrl()

Eksempelbruk:

  • Trenger ingen parametere
  • Henter strengen som representerer gjeldende URL som nettleseren ser på
getText()

Eksempelbruk:

  • Henter den indre teksten til elementet du angir

Naviger i kommandoer

Disse kommandoene lar deg oppdatere, gå inn i og bytte frem og tilbake mellom forskjellige nettsider.

naviger().to()

Eksempelbruk:

  • Den åpner automatisk et nytt nettleservindu og henter siden du spesifiserer innenfor parentesen.
  • Den gjør akkurat det samme som get() metoden.
navigate().refresh()

Eksempelbruk:

  • Trenger ingen parametere.
  • Den oppdaterer gjeldende side.
navigate().back()

Eksempelbruk:

  • Trenger ingen parametere
  • Tar deg én side tilbake i nettleserens historikk.
navigate().forward()

Eksempelbruk:

  • Trenger ingen parametere
  • Tar deg fremover med én side i nettleserens historikk.

Lukke og avslutte nettleseren Windows

Lukk()

Eksempelbruk:

  • Trenger ingen parametere
  • Den lukker bare nettleservinduet som WebDriver for øyeblikket kontrollerer.
slutte()

Eksempelbruk:

  • Trenger ingen parametere
  • Den lukker alle vinduer som WebDriver har åpnet.

Lukke og avslutte nettleseren Windows

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.

Lukke og avslutte nettleseren Windows

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

Lukke og avslutte nettleseren Windows

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

Bytte mellom rammer

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.

Bytte mellom popup-vinduer Windows

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:

Bytte mellom popup-vinduer Windows

Venter

Det er to typer ventetid.

  1. Implisitt ventetid – brukes til å angi standard ventetid gjennom hele programmet
  2. 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.

Implisitt vent

Deretter legger du til dette i instansieringsdelen av koden din.

Implisitt vent

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:

Eksplisitt vent

Steg XNUMX:

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

Eksplisitt vent

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.

Eksplisitt vent

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.

Betingelser isEnabled()

  • isDisplayed() brukes når du vil verifisere om et bestemt element vises eller ikke før du utfører en kommando.

Betingelsene vises()

  • 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.

Betingelser er valgt()

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.

Bruk av ExpectedConditions alertIsPresent()

  • 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".

Bruker ExpectedConditions

  • frameToBeAvailableAndSwitchToIt() – Venter til den gitte rammen allerede er tilgjengelig, og bytter deretter automatisk til den.

Bruke ExpectedConditions elementToBeClickable()

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".

Unntak for fangst

Spørsmål og svar

Installer JDK, et IDE som f.eks. Eclipse eller IntelliJ, den Selenium Java biblioteker og den tilhørende nettleserdriveren. Bygg automatiseringsverktøy som Maven eller Gradle forenkle avhengighetshåndtering.

AI reparerer automatisk lokatorer, genererer testtilfeller fra brukerhistorier og identifiserer ustabile tester. Plattformer som Testim, Mabl og Applitools bygger inn AI for smartere redigering, utførelse og visuell validering.

Ja. GitHub Copilot, markør og JetBrains AI-generering Java Selenium skript fra trinn i enkle språk, inkludert ventetider, påstander og sideobjekter. De reduserer standardteksten betraktelig for nye testscenarier.

findElement returnerer det første samsvarende WebElementet eller kaster NoSuchElementException. findElements returnerer en liste over alle treff og returnerer en tom liste hvis ingen blir funnet, uten å kaste unntaket.

Thread.sleep pauser i en fast varighet uavhengig av sidens tilstand, noe som bremser raske kjøringer og mislykkes med trege kjøringer. Bruk WebDriverWait med ExpectedConditions for å vente bare så lenge som nødvendig.

Selenium støtter ChromeDriver, GeckoDriver for Firefox, EdgeDriver, SafariDriver og IEDriverServer. Selenium Manager i versjon 4 laster ned riktig driver automatisk.

Konfigurer ChromeOptions eller FirefoxOptions-objekt med setAcceptInsecureCerts(true). Dette forteller nettleseren at den skal ignorere ugyldige sertifikater slik at WebDriver-økten kan fortsette.

WebDriverManager laster automatisk ned og konfigurerer riktig binærfil for nettleserdriveren for den installerte nettleserversjonen din, noe som fjerner manuelt drivervedlikehold og reduserer oppsetttiden for nye bidragsytere.

Oppsummer dette innlegget med: