Selenium Webstuurprogramma Java Programmavoorbeeld

⚡ Slimme samenvatting

Selenium webdriver Java Het programmavoorbeeld leidt u door uw eerste complete automatiseringsscript. LessDe tests behandelen onderwerpen zoals het instellen van de testomgeving, het lokaliseren van elementen, het verzenden van invoer, navigatie, validatie, wachten, foutafhandeling en best practices voor betrouwbare WebDriver-tests.

  • ⚙️ Omgeving instellen: Install Java, Eclipse of IntelliJ, configureren Selenium bibliotheken, en kies het juiste stuurprogramma-binair bestand voor uw browserversie.
  • 🧭 Elementzoekers: Gebruik ID, naam, klasse, XPath, CSS-selector en linkText om elementen consistent te identificeren in verschillende browsers en versies.
  • Acties en invoer: WebDriver ondersteunt klik-, sendKeys-, submit-, selectie- en toetsenbordgebeurtenissen voor een volledige gebruikersinteractie.
  • Slim wachten: Vervang Thread.sleep door impliciete, expliciete en vloeiende wachtbewerkingen op basis van ExpectedConditions om onbetrouwbare tests te voorkomen.
  • 🚨 Afhandeling van uitzonderingen: Vang NoSuchElementException, TimeoutException en StaleElementReferenceException op om de robuustheid van automatiseringssuites te waarborgen.
  • 🤖 Generatie van AI-tests: AI-assistenten genereren standaard WebDriver-scripts, stellen locators voor en herstellen selectors automatisch wanneer de DOM verandert.

Selenium webdriver Java Programma

Selenium Java Voorbeeld

De Java class “myclass” die we in de vorige tutorial hebben gemaakt, laten we proberen een WebDriver-script te maken dat:

Stap 1: halen Mercury De startpagina van Tours
Stap 2: verifieer de titel ervan
Stap 3: druk het resultaat van de vergelijking af
Stap 4: sluit het voordat u het hele programma beëindigt.

Selenium WebDriver-voorbeeld Code

Hieronder vindt u de daadwerkelijke WebDriver-code voor de logica die in het bovenstaande scenario wordt gepresenteerd

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

}

Opmerking: starten Firefox 35, moet u het door Mozilla gemaakte gekko-stuurprogramma gebruiken om Web Driver te gebruiken. Selenium 3.0, gecko en firefox hebben compatibiliteitsproblemen en het correct instellen ervan kan een lastige opgave worden. Als de code niet werkt, downgrade dan naar Firefox versie 47 of lager. Als alternatief kunt u uw scripts uitvoeren in Chrome. Selenium werkt out of the box voor Chrome. U hoeft slechts 3 regels code te wijzigen om uw script te laten werken met Chrome of Firefox

De code uitleggen

Pakketten importeren

Om te beginnen moet u de volgende twee pakketten importeren:

  1. org.openqa.selenium.*– bevat de WebDriver-klasse die nodig is om een ​​nieuwe browser te instantiëren die is geladen met een specifiek stuurprogramma
  2. org.openqa.selenium.firefox.Firefoxbestuurder - bevat de FirefoxBestuurdersklasse die nodig is om a te instantiëren Firefox-specifiek stuurprogramma naar de browser die wordt geïnstantieerd door de WebDriver-klasse

Als uw test ingewikkelder acties vereist, zoals toegang krijgen tot een andere klasse, browserscreenshots maken of externe bestanden manipuleren, zult u zeker meer pakketten moeten importeren.

Objecten en variabelen instantiëren

Normaal gesproken is dit de manier waarop een driverobject wordt geïnstantieerd.

WebDriver driver = new FirefoxDriver();

A FirefoxStuurprogrammaklasse zonder parameters betekent dat de standaard Firefox profiel wordt gelanceerd door onze Java programma. De standaard Firefox profiel is vergelijkbaar met lanceren Firefox in de veilige modus (er zijn geen extensies geladen).

Voor het gemak hebben we de basis opgeslagen. URL en de verwachte titel als variabelen.

Een browsersessie starten

WebDrivers krijgen() Deze methode wordt gebruikt om een ​​nieuwe browsersessie te starten en deze door te sturen naar de URL die u als parameter opgeeft.

driver.get(baseUrl);

Haal de werkelijke paginatitel op

De WebDriver-klasse heeft de getTitle () methode die altijd wordt gebruikt om de paginatitel van de momenteel geladen pagina te verkrijgen.

actualTitle = driver.getTitle();

Vergelijk de verwachte en werkelijke waarden

Dit gedeelte van de code gebruikt eenvoudigweg een basis Java if-else-structuur om de werkelijke titel te vergelijken met de verwachte titel.

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

Een browsersessie beëindigen

De "dichtbij()”-methode wordt gebruikt om het browservenster te sluiten.

driver.close();

Het hele programma beëindigen

Als u deze opdracht gebruikt zonder eerst alle browservensters te sluiten, wordt uw hele Java het programma eindigt terwijl het browservenster open blijft.

System.exit(0);

De test uitvoeren

Er zijn twee manieren om code uit te voeren Eclipse IDE.

  1. On Eclipse's menubalk, klik op Uitvoeren > Uitvoeren.
  2. Media Ctrl + F11 om de volledige code uit te voeren.

De test uitvoeren

Als je alles goed hebt gedaan, Eclipse zou "Test geslaagd!" weergeven

De test uitvoeren

GUI-elementen lokaliseren

Het lokaliseren van elementen in WebDriver gebeurt met behulp van de “findElement(door.locator())methode. Het “locator”-gedeelte van de code is hetzelfde als elk van de locators die eerder zijn besproken in de Selenium IDE hoofdstukken van deze tutorials. In feite wordt aanbevolen dat u GUI-elementen lokaliseert met behulp van IDE en, zodra deze succesvol zijn geïdentificeerd, de code naar WebDriver exporteert.

Hier is een Selenium Voorbeeldcode die een element lokaliseert aan de hand van zijn ID. Facebook wordt als basis gebruikt. 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);
}
}

We gebruikten de getTagNaam() methode om uit tetract de tagnaam van dat specifieke element met de id "email". Wanneer deze code wordt uitgevoerd, zou deze de tagnaam "input" correct moeten kunnen identificeren en deze moeten afdrukken. Eclipse's Consolevenster.

GUI-elementen lokaliseren

Samenvatting voor het lokaliseren van elementen

Variatie Beschrijving Sample
By.className vindt elementen op basis van de waarde van het attribuut “class”. findElement(By.className(“someClassName”))
Door.cssSelector vindt elementen op basis van de onderliggende CSS Selector-engine van het stuurprogramma findElement(By.cssSelector(“input#email”))
Door.id lokaliseert elementen op basis van de waarde van hun 'id'-attribuut findElement(By.id(“someId”))
 
Door.linkText vindt een linkelement op basis van de exacte tekst die het weergeeft findElement(By.linkText(“REGISTRATIE”))
 
Bij naam lokaliseert elementen op basis van de waarde van het attribuut “name”. findElement(By.name(“eenNaam”))
 
Door.gedeeltelijkeLinkText lokaliseert elementen die de gegeven linktekst bevatten findElement(By.partialLinkText(“REG”))
 
Op.tagnaam lokaliseert elementen op basis van hun tagnaam findElement(By.tagName(“div”))
 
Door.xpath lokaliseert elementen 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]”))

Opmerking over het gebruik van findElement(By.cssSelector())

By.cssSelector() ondersteunt de functie "bevat" niet. Houd rekening met de Selenium IDE-code hieronder –

Opmerking over het gebruik van findElement(By.cssSelector())

In Selenium IDE hierboven, de hele test is geslaagd. Echter in de Selenium WebDriver-script hieronder genereerde dezelfde test een fout omdat WebDriver het trefwoord “bevat” niet ondersteunt bij gebruik in de methode By.cssSelector().

Opmerking over het gebruik van findElement(By.cssSelector())

Gemeenschappelijke commando's

Webelementen instantiëren

In plaats van de lange syntaxis "driver.findElement(By.locator())" te gebruiken elke keer dat u een bepaald element wilt benaderen, kunnen we een WebElement-object hiervoor instantiëren. De WebElement-klasse is opgenomen in het pakket "org.openqa.selenium.*".

Webelementen instantiëren

Klikken op een element

Klikken is misschien wel de meest gebruikelijke manier van interactie met webelementen. De click() methode wordt gebruikt om het klikken op een element te simuleren. De volgende Selenium Java voorbeeld laat zien hoe click() werd gebruikt om op te klikken Mercury De knop 'Inloggen' van Tours.

Klikken op een element

Bij het gebruik van de click()-methode moet u op de volgende zaken letten.

  • Er zijn geen parameters/argumenten voor nodig.
  • De methode wacht automatisch tot er een nieuwe pagina wordt geladen, indien van toepassing.
  • Het op te klikken element moet zichtbaar zijn (hoogte en breedte mogen niet gelijk zijn aan nul).

Krijg opdrachten

Get-opdrachten halen verschillende belangrijke informatie over de pagina/het element op. Hier zijn enkele belangrijke “get”-opdrachten waarmee u bekend moet zijn.

commando's Gebruik
krijgen()

Voorbeeld gebruik:

  • Er wordt automatisch een nieuw browservenster geopend en de pagina opgehaald die u tussen de haakjes opgeeft.
  • Het is de tegenhanger van Selenium IDE's "open" -commando.
  • De parameter moet a zijn Draad voorwerp.
getTitle ()

Voorbeeld gebruik:

  • Heeft geen parameters nodig
  • Haalt de titel van de huidige pagina op
  • Voor- en achterliggende witte ruimtes worden weggesneden
  • Retourneert een nultekenreeks als de pagina geen titel heeft
getPageSource()

Voorbeeld gebruik:

  • Heeft geen parameters nodig
  • Retourneert de broncode van de pagina als een tekenreekswaarde
getCurrentUrl()

Voorbeeld gebruik:

  • Heeft geen parameters nodig
  • Haalt de tekenreeks op die de huidige waarde vertegenwoordigt. URL dat de browser bekijkt
getText ()

Voorbeeld gebruik:

  • Haalt de binnentekst op van het element dat u opgeeft

Navigeer door opdrachten

Met deze opdrachten kunt u verschillende webpagina's vernieuwen, openen en heen en weer schakelen.

navigeren naar()

Voorbeeld gebruik:

  • Er wordt automatisch een nieuw browservenster geopend en de pagina opgehaald die u tussen de haakjes opgeeft.
  • Het doet precies hetzelfde als de get() methode.
navigeren().vernieuwen()

Voorbeeld gebruik:

  • Heeft geen parameters nodig.
  • Het vernieuwt de huidige pagina.
navigeren().terug()

Voorbeeld gebruik:

  • Heeft geen parameters nodig
  • Brengt u één pagina terug in de geschiedenis van de browser.
navigeren().vooruit()

Voorbeeld gebruik:

  • Heeft geen parameters nodig
  • Brengt u één pagina vooruit in de geschiedenis van de browser.

Browser sluiten en afsluiten Windows

dichtbij()

Voorbeeld gebruik:

  • Heeft geen parameters nodig
  • Het sluit alleen het browservenster dat WebDriver momenteel beheert.
quit ()

Voorbeeld gebruik:

  • Heeft geen parameters nodig
  • Hiermee worden alle vensters gesloten die WebDriver heeft geopend.

Browser sluiten en afsluiten Windows

Om het verschil tussen duidelijk te illustreren close() en quit(), probeer de onderstaande code uit te voeren. Het maakt gebruik van een webpagina die automatisch een venster opent bij het laden van de pagina en een ander opent na het afsluiten.

Browser sluiten en afsluiten Windows

Merk op dat alleen het bovenliggende browservenster werd gesloten en niet de twee pop-upvensters.

Browser sluiten en afsluiten Windows

Maar als u quit() gebruikt, worden alle vensters gesloten, niet alleen het bovenliggende venster. Probeer de onderstaande code uit te voeren en u zult merken dat de twee pop-ups hierboven ook automatisch worden gesloten.

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

Schakelen tussen frames

Om toegang te krijgen tot GUI-elementen in een frame, moeten we WebDriver eerst opdracht geven zich eerst op het frame of het pop-upvenster te concentreren voordat we toegang krijgen tot elementen daarin. Laten we bijvoorbeeld de webpagina nemen https://demo.guru99.com/selenium/deprecated.html

Schakelen tussen frames

Deze pagina heeft 3 frames waarvan de “naam”-attributen hierboven zijn aangegeven. We willen toegang krijgen tot de link 'Verouderd' die hierboven in het geel is omcirkeld. Om dat te doen, moeten we WebDriver eerst de opdracht geven om over te schakelen naar het “classFrame”-frame met behulp van de “schakelNaar().frame()” methode. We zullen het naamattribuut van het frame gebruiken als de parameter voor het gedeelte “frame()”.

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

Na het uitvoeren van deze code zult u zien dat het ‘classFrame’-frame naar de pagina ‘Verouderde API’ wordt gebracht, wat betekent dat onze code met succes toegang heeft gekregen tot de link ‘Verouderd’.

Schakelen tussen pop-ups Windows

WebDriver maakt het mogelijk om pop-upvensters weer te geven die lijken op waarschuwingen, in tegenstelling tot Selenium IDE. Om toegang te krijgen tot de elementen binnen de waarschuwing (zoals het bericht dat deze bevat), moeten we de "switchTo().alert()" methode. In de onderstaande code gebruiken we deze methode om toegang te krijgen tot het waarschuwingsvenster en vervolgens het bericht op te halen met behulp van de "getText()" methode, en sluit vervolgens automatisch het waarschuwingsvenster met behulp van de "switchTo().alert().accept()" methode.

Ga eerst naar https://output.jsbin.com/usidix/1 en klik handmatig op de knop "Go!" knop daar en bekijk zelf de berichttekst.

Schakelen tussen pop-ups Windows

Laten we eens kijken Selenium voorbeeldcode om dit te doen-

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

Op de Eclipse console, merk op dat het afgedrukte waarschuwingsbericht het volgende is:

Schakelen tussen pop-ups Windows

Wacht

Er zijn twee soorten wachttijden.

  1. Impliciet wachten – wordt gebruikt om de standaardwachttijd voor het hele programma in te stellen
  2. Expliciet wachten – wordt gebruikt om de wachttijd alleen voor een bepaald exemplaar in te stellen

Impliciete wachttijd

  • Het is eenvoudiger te coderen dan Explicit Waits.
  • Het wordt meestal gedeclareerd in het instantiatiegedeelte van de code.
  • U heeft slechts één extra pakket nodig om te importeren.

Om een ​​impliciete wachttijd te gaan gebruiken, moet u dit pakket in uw code importeren.

Impliciete wachttijd

Voeg dit vervolgens toe aan het instantiatiegedeelte van uw code.

Impliciete wachttijd

Expliciete wachttijd

Expliciete wachttijden worden uitgevoerd met behulp van de klassen WebDriverWait en ExpectedCondition. Voor de volgende Selenium WebDriver zullen we bijvoorbeeld maximaal 10 seconden wachten totdat een element met de id “gebruikersnaam” zichtbaar wordt voordat we doorgaan met de volgende opdracht. Hier zijn de stappen.

Stap 1:

Importeer deze twee pakketten:

Expliciete wachttijd

Stap 2:

Declareer een WebDriverWait-variabele. In dit voorbeeld gebruiken we “myWaitVar” als de naam van de variabele.

Expliciete wachttijd

Stap 3:

Gebruik myWaitVar met ExpectedConditions voor gedeelten waar u expliciet moet wachten. In dit geval gebruiken we expliciet wachten op de “gebruikersnaam” (Mercury Tours HomePage) invoer voordat we de tekst “tutorial” erop typen.

Expliciete wachttijd

Voorwaarden

De volgende methoden worden gebruikt in voorwaardelijke en loo-constructies.ping operaties —

  • is ingeschakeld() wordt gebruikt wanneer u wilt verifiëren of een bepaald element is ingeschakeld of niet voordat u een opdracht uitvoert.

Voorwaarden isEnabled()

  • wordt weergegeven() wordt gebruikt als u wilt controleren of een bepaald element wordt weergegeven voordat u een opdracht uitvoert.

Voorwaarden isDisplayed()

  • is geselecteerd() wordt gebruikt wanneer u wilt verifiëren of een bepaalde selectievakje, keuzerondje of optie in een vervolgkeuzelijst is geselecteerd. Op andere elementen werkt het niet.

Voorwaarden isSelected()

Verwachte voorwaarden gebruiken

De klasse ExpectedConditions biedt een bredere set voorwaarden die u kunt gebruiken in combinatie met de methode until() van WebDriverWait.

Hieronder staan ​​enkele van de meest voorkomende ExpectedConditions-methoden.

  • alertIsAanwezig() – wacht totdat er een waarschuwingsvenster wordt weergegeven.

Het gebruik van ExpectedConditions alertIsPresent()

  • elementToBeClickable() – Wacht tot een element zichtbaar en tegelijkertijd ingeschakeld is. Het voorbeeld Selenium Code Hieronder wordt gewacht totdat het element met id=”username” eerst zichtbaar en ingeschakeld is, voordat aan dat element een WebElement-variabele met de naam “txtUserName” wordt toegewezen.

Verwachte voorwaarden gebruiken

  • frameToBeAvailableAndSwitchToIt() – Wacht tot het opgegeven frame al beschikbaar is en schakelt er vervolgens automatisch naar over.

Met behulp van ExpectedConditions elementToBeClickable()

Uitzonderingen opvangen

Bij gebruik van isEnabled(), isDisplayed() en isSelected() gaat WebDriver ervan uit dat het element al op de pagina bestaat. Anders zal het een Geen DergelijkElementUitzondering. Om dit te voorkomen, moeten we een try-catch-blok gebruiken, zodat het programma niet wordt onderbroken.

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

Als u expliciete wachttijden gebruikt, is het type uitzondering dat u moet opvangen de “TimeoutException”.

Uitzonderingen opvangen

Veelgestelde vragen

Installeer JDK en een IDE zoals Eclipse of IntelliJ, de Selenium Java bibliotheken en het bijbehorende browserstuurprogramma. Build-automatiseringstools zoals Maven of Gradle Vereenvoudig het beheer van afhankelijkheden.

AI herstelt automatisch locators, genereert testcases op basis van user stories en identificeert onbetrouwbare tests. Platforms zoals TestimMabl en Applitools integreren AI voor slimmer ontwerpen, uitvoeren en visueel valideren.

Ja. GitHub Copilot, Cursor en JetBrains AI genereert Java Selenium Scripts worden gegenereerd op basis van stappen in eenvoudige taal, inclusief wachttijden, beweringen en paginaobjecten. Dit vermindert de hoeveelheid standaardcode voor nieuwe testscenario's aanzienlijk.

findElement retourneert het eerste overeenkomende WebElement of genereert een NoSuchElementException. findElements retourneert een lijst met alle overeenkomsten en retourneert een lege lijst als er geen gevonden worden, waarbij de uitzondering nooit wordt gegenereerd.

Thread.sleep pauzeert voor een vaste tijdsduur, ongeacht de paginastatus, waardoor snelle uitvoeringen worden vertraagd en langzame uitvoeringen mislukken. Gebruik WebDriverWait met ExpectedConditions om alleen zo lang te wachten als nodig is.

Selenium ondersteunt ChromeDriver, GeckoDriver voor FirefoxEdgeDriver, SafariDriver en IEDriverServer. Selenium In versie 4 downloadt Manager automatisch het juiste stuurprogramma.

Configureer de ChromeOptions of FirefoxEen Options-object met setAcceptInsecureCerts(true). Dit geeft de browser de opdracht om ongeldige certificaten te negeren, zodat de WebDriver-sessie kan worden voortgezet.

WebDriverManager downloadt en configureert automatisch het juiste browserstuurprogramma voor uw geïnstalleerde browserversie, waardoor handmatig stuurprogrammaonderhoud overbodig wordt en de installatietijd voor nieuwe bijdragers wordt verkort.

Vat dit bericht samen met: