Selenium Webdriver Java Program eksempel

⚡ Smart opsummering

Selenium webdriver Java Programeksempelet guider dig gennem dit første end-to-end automatiseringsscript. LessOns dækker miljøopsætning, lokalisering af elementer, afsendelse af input, navigation, validering, ventetider, håndtering af undtagelser og bedste praksis for pålidelige WebDriver-tests.

  • 🇧🇷 Miljøopsætning: Installer Java, Eclipse eller IntelliJ, konfigurer Selenium biblioteker, og vælg den rigtige driverbinære fil til din browserversion.
  • 🧭 Elementlokalisering: Brug ID, navn, klasse, XPath, CSS-selektor og linkText til at identificere elementer stabilt på tværs af browsere og udgivelser.
  • ⌨️ Handlinger og input: WebDriver understøtter klik-, send-taster-, send-, vælg-rullemenuer og tastaturhændelser for fuld brugerinteraktion.
  • Smarte ventetider: Erstat Thread.sleep med implicitte, eksplicitte og flydende ventetider drevet af ExpectedConditions for at eliminere ustabile tests.
  • ???? Undtagelseshåndtering: Fang NoSuchElementException, TimeoutException og StaleElementReferenceException for at holde automatiseringspakker robuste.
  • 🤖 Generering af AI-test: AI-assistenter genererer standard WebDriver-scripts, foreslår lokatorer og automatisk helbredelsesselektorer, når DOM'en ændres.

Selenium webdriver Java Program

Selenium Java Eksempel

Brug af Java klasse "myclass", som vi oprettede i den forrige tutorial, lad os prøve at oprette et WebDriver-script, der ville:

Trin 1: hente Mercury Tours' hjemmeside
Trin 2: bekræfte dens titel
Trin 3: udskrive resultatet af sammenligningen
Trin 4: luk den, før du afslutter hele programmet.

Selenium WebDriver-eksempel Code

Nedenfor er den faktiske WebDriver-kode for logikken præsenteret af 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();
    }

}

Bemærk: Starter Firefox 35, skal du bruge gekko-driver oprettet af Mozilla for at bruge Web Driver. Selenium 3.0, gekko og firefox har kompatibilitetsproblemer, og at indstille dem korrekt kan blive en op ad bakke opgave. Hvis koden ikke virker, nedgrader til Firefox version 47 eller derunder. Alternativt kan du køre dine scripts på Chrome. Selenium fungerer ud af æsken til Chrome. Du skal blot ændre 3 linjer kode for at få dit script til at fungere med Chrome eller Firefox

Forklaring af koden

Import af pakker

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

  1. org.openqa.selenium.*– indeholder den WebDriver-klasse, der er nødvendig for at instantiere en ny browser indlæst med en bestemt driver
  2. org.openqa.selenium.firefox.FirefoxChauffør – indeholder FirefoxDriverklasse er nødvendig for at instantiere en Firefox-specifik driver til browseren instansieret af WebDriver-klassen

Hvis din test har brug for mere komplicerede handlinger, såsom at få 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 det sådan, et driverobjekt instantieres.

WebDriver driver = new FirefoxDriver();

A FirefoxDriverklasse uden parametre betyder, at standarden Firefox profil vil blive lanceret af vores Java program. Standarden Firefox profil ligner lancering Firefox i sikker tilstand (ingen udvidelser er indlæst).

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

Start af en browsersession

WebDrivers få() Metoden bruges til at starte en ny browsersession og dirigerer den til URL som du angiver som dens parameter.

driver.get(baseUrl);

Få den faktiske sidetitel

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

actualTitle = driver.getTitle();

Sammenlign de forventede og faktiske værdier

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

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

Afslutning af en browsersession

Den "tæt()”-metoden bruges til at lukke browservinduet.

driver.close();

Afslutning af hele programmet

Hvis du bruger denne kommando uden først at lukke alle browservinduer, vil hele din Java programmet afsluttes, mens browservinduet forbliver åbent.

System.exit(0);

Kører testen

Der er to måder at udføre kode på Eclipse SDI.

  1. On Eclipses menulinje, klik Kør > Kør.
  2. Presse Ctrl + F11 at køre hele koden.

Kører testen

Hvis du gjorde alt rigtigt, Eclipse ville udsende "Test bestået!"

Kører testen

Lokalisering af GUI-elementer

Lokalisering af elementer i WebDriver udføres ved at bruge "findElement(Af.locator())” metode. "Lokator"-delen af ​​koden er den samme som enhver af lokalisatorerne, der tidligere er diskuteret i Selenium IDE kapitler i disse selvstudier. Faktisk anbefales det, at du finder GUI-elementer ved hjælp af IDE og eksporterer koden til WebDriver, når de er identificeret.

Her er en Selenium eksempelkode, der lokaliserer et element ved hjælp af dets id. Facebook bruges 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 brugte getTagName() metode til at f.eks.tract tagnavnet på det specifikke element, hvis id er "email". Når denne kode køres, skal den være i stand til korrekt at identificere tagnavnet "input" og udskrive det på Eclipse's konsolvindue.

Lokalisering af GUI-elementer

Sammenfatning for lokalisering af elementer

Variation Beskrivelse Prøve
Efter.klassenavn finder elementer baseret på værdien af ​​"class"-attributten findElement(By.className(“nogetKlassenavn”))
By.cssSelector finder elementer baseret på førerens underliggende CSS Selector-motor findElement(By.cssSelector(“input#email”))
Af.id lokaliserer elementer ud fra værdien af ​​deres "id"-attribut findElement(By.id(“someId”))
 
By.linkText finder et linkelement ved den nøjagtige tekst, det viser findElement(By.linkText(“REGISTRERING”))
 
Ved navn lokaliserer elementer efter værdien af ​​"name"-attributten findElement(By.name(“noget Navn”))
 
By.partialLinkText lokaliserer elementer, der indeholder den givne linktekst findElement(By.partialLinkText(“REG”))
 
By.tagName lokaliserer elementer ved deres tagnavn findElement(By.tagName(“div”))
 
Af.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]”))

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

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

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

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

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

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 instansiere et WebElement-objekt for det. WebElement-klassen er indeholdt i pakken "org.openqa.selenium.*".

Instantiering af webelementer

Klik på et element

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

Klik på et element

Følgende ting skal noteres, når du bruger click()-metoden.

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

Få kommandoer

Hent kommandoer henter forskellige vigtige oplysninger om siden/elementet. Her er nogle vigtige "hent"-kommandoer, du skal være bekendt med.

Kommandoer Brug
få()

Eksempel på brug:

  • Den åbner automatisk et nyt browservindue og henter den side, du angiver inden for dens parentes.
  • Det er modstykket til Selenium IDE's "åbn" kommando.
  • Parameteren skal være en String objekt.
getTitle ()

Eksempel på brug:

  • Behøver ingen parametre
  • Henter titlen på den aktuelle side
  • Førende og efterstillede hvide rum er trimmet
  • Returnerer en nul-streng, hvis siden ikke har nogen titel
getPageSource()

Eksempel på brug:

  • Behøver ingen parametre
  • Returnerer sidens kildekode som en strengværdi
getCurrentUrl()

Eksempel på brug:

  • Behøver ingen parametre
  • Henter strengen, der repræsenterer den aktuelle URL som browseren kigger på
getText ()

Eksempel på brug:

  • Henter den indre tekst af det element, du angiver

Naviger i kommandoer

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

naviger().to()

Eksempel på brug:

  • Den åbner automatisk et nyt browservindue og henter den side, du angiver inden for dens parentes.
  • Den gør præcis det samme som get() fremgangsmåde.
navigate().refresh()

Eksempel på brug:

  • Behøver ingen parametre.
  • Det opdaterer den aktuelle side.
naviger().tilbage()

Eksempel på brug:

  • Behøver ingen parametre
  • Tager dig én side tilbage i browserens historik.
navigate().forward()

Eksempel på brug:

  • Behøver ingen parametre
  • Tager dig en side frem i browserens historik.

Lukning og afslutning af browser Windows

tæt()

Eksempel på brug:

  • Behøver ingen parametre
  • Den lukker kun det browservindue, som WebDriver i øjeblikket kontrollerer.
Afslut()

Eksempel på brug:

  • Behøver ingen parametre
  • Den lukker alle vinduer, som WebDriver har åbnet.

Lukning og afslutning af browser Windows

For tydeligt at illustrere forskellen mellem close() og quit(), prøv at udføre koden nedenfor. Den bruger en webside, der automatisk dukker et vindue op ved sideindlæsning og åbner et andet efter at have afsluttet.

Lukning og afslutning af browser Windows

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

Lukning og afslutning af browser Windows

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

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

Skift mellem rammer

For at få adgang til GUI-elementer i en Frame, bør vi først bede WebDriver om at fokusere på rammen eller pop op-vinduet, før vi kan få adgang til elementer i dem. Lad os for eksempel tage websiden https://demo.guru99.com/selenium/deprecated.html

Skift mellem rammer

Denne side har 3 rammer, hvis "navn"-attributter er angivet ovenfor. Vi ønsker at få adgang til linket "Forældet" omkranset ovenfor med gult. For at gøre det skal vi først instruere WebDriver om at skifte til "classFrame"-rammen ved hjælp af "switchTo().frame()" metode. Vi bruger rammens name-attribut 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(); 
	    }
}

Efter at have udført denne kode, vil du se, at "classFrame"-rammen føres til siden "Deprecated API", hvilket betyder, at vores kode med succes kunne få adgang til "Deprecated"-linket.

Skift mellem pop-up Windows

WebDriver tillader pop-up-vinduer som advarsler at blive vist, i modsætning til i Selenium IDE. For at få adgang til elementerne i advarslen (såsom meddelelsen, den indeholder), skal vi bruge "switchTo().alert()" metode. I koden nedenfor vil vi bruge denne metode til at få adgang til advarselsboksen og derefter hente dens besked ved hjælp af "getText()" metode, og luk derefter automatisk advarselsboksen ved hjælp af "switchTo().alert().accept()" fremgangsmåde.

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

Skift mellem pop-up Windows

Lad os se Selenium eksempelkode til at gø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 konsol, bemærk, at den udskrevne advarselsmeddelelse er:

Skift mellem pop-up Windows

Venter

Der er to slags ventetider.

  1. Implicit ventetid – bruges til at indstille standardventetiden gennem hele programmet
  2. Eksplicit ventetid – bruges kun til at indstille ventetiden for et bestemt tilfælde

Implicit Vent

  • Det er lettere at kode end Explicit Waits.
  • Det er normalt erklæret i instansieringsdelen af ​​koden.
  • Du skal kun bruge én ekstra pakke for at importere.

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

Implicit Vent

Tilføj derefter dette i instansieringsdelen af ​​din kode.

Implicit Vent

Eksplicit Vent

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

Trin 1:

Importer disse to pakker:

Eksplicit Vent

Trin 2:

Deklarer en WebDriverWait-variabel. I dette eksempel vil vi bruge "myWaitVar" som navnet på variablen.

Eksplicit Vent

Trin 3:

Brug myWaitVar med ExpectedConditions på portioner, hvor du har brug for den eksplicitte ventetid. I dette tilfælde vil vi bruge eksplicit ventetid på "brugernavnet" (Mercury Tours HomePage), før vi skriver teksten "tutorial" på den.

Eksplicit Vent

Betingelser

Følgende metoder bruges i betingede 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.

Betingelser er aktiveret()

  • vises() bruges, når du vil kontrollere, om et bestemt element vises eller ej, før du udfører en kommando.

Betingelser er vist()

  • isSelected() bruges, når du vil verificere, om en bestemt afkrydsningsfelt, alternativknap eller mulighed i en rullemenu er valgt. Det virker ikke på andre elementer.

Betingelser er valgt()

Brug af ExpectedConditions

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

Nedenfor er nogle af de mest almindelige ExpectedConditions-metoder.

  • alertIsPresent() – venter, indtil en advarselsboks vises.

Brug af ExpectedConditions alertIsPresent()

  • elementToBeClickable() – Venter, indtil et element er synligt og samtidig aktiveret. Prøven Selenium Code nedenfor vil vente, indtil elementet med id="brugernavn" bliver synligt og aktiveret, før elementet tildeles som en WebElement-variabel med navnet "txtUserName".

Brug af ExpectedConditions

  • frameToBeAvailableAndSwitchToIt() – Venter, indtil den givne ramme allerede er tilgængelig, og skifter derefter automatisk til den.

Brug af ExpectedConditions elementToBeClickable()

Fangst undtagelser

Når du bruger isEnabled(), isDisplayed() og isSelected(), antager WebDriver, at elementet allerede findes på siden. Ellers vil det kaste en NoSuchElementException. For at undgå dette bør vi bruge en try-catch-blok, så programmet ikke bliver afbrudt.

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 bruger eksplicitte ventetider, er den type undtagelse, du skal fange, "TimeoutException".

Fangst undtagelser

Ofte Stillede Spørgsmål

Installer JDK, et IDE som f.eks. Eclipse eller IntelliJ, den Selenium Java biblioteker og den tilhørende browserdriver. Byg automatiseringsværktøjer som Maven eller Gradle forenkle afhængighedsstyring.

AI reparerer automatisk lokatorer, genererer testcases fra brugerhistorier og identificerer ustabile tests. Platforme som f.eks. Testim, Mabl og Applitools integrerer AI for smartere redigering, udførelse og visuel validering.

Ja. GitHub Copilot, Cursor og JetBrains AI-generering Java Selenium scripts fra trin i letforståelige sprog, herunder ventetider, assertions og sideobjekter. De reducerer i høj grad standardkravene til nye testscenarier.

findElement returnerer det første matchende WebElement eller udløser NoSuchElementException. findElements returnerer en liste over alle matches og returnerer en tom liste, hvis ingen findes, uden at udløse undtagelsen.

Thread.sleep sætter en pause i en fast varighed uanset sidens tilstand, hvilket gør hurtige kørsel langsommere og langsomme kørsel fejler. Brug WebDriverWait med ExpectedConditions til kun at vente så længe som nødvendigt.

Selenium understøtter ChromeDriver, GeckoDriver til Firefox, EdgeDriver, SafariDriver og IEDriverServer. Selenium Manager i version 4 downloader automatisk den korrekte driver.

Konfigurer ChromeOptions eller FirefoxOptions-objekt med setAcceptInsecureCerts(true). Dette fortæller browseren, at den skal ignorere ugyldige certifikater, så WebDriver-sessionen kan fortsætte.

WebDriverManager downloader og konfigurerer automatisk den korrekte browserdriverbinære fil til din installerede browserversion, hvilket fjerner manuel drivervedligeholdelse og reducerer opsætningstiden for nye bidragydere.

Opsummer dette indlæg med: