Selenium Webdriver Java Program példa

⚡ Okos összefoglaló

Selenium webdriver Java A Program Example végigvezet az első teljes körű automatizálási szkripteden. LessA leckék kiterjednek a környezet beállítására, az elemek megkeresésére, a bemenet küldésére, a navigációra, az érvényesítésre, a várakozásokra, a kivételkezelésre és a megbízható WebDriver tesztek ajánlott gyakorlataira.

  • 🇧🇷 Környezet beállítása: Telepítés Java, Eclipse vagy IntelliJ, konfigurálás Selenium könyvtárakat, és válassza ki a böngésző verziójához megfelelő illesztőprogram-bináris fájlt.
  • 🧭 Elemlokátorok: Használj azonosítót, nevet, osztályt, XPath-ot, CSS-szelektort és linkText-et az elemek böngészők és verziók közötti stabil azonosításához.
  • ⌨️ Műveletek és bevitel: A WebDriver támogatja a kattintás, a sendKeys, a submit, a legördülő menük kiválasztása és a billentyűzetes eseményeket a teljes felhasználói stílusú interakció érdekében.
  • Intelligens várakozások: Cserélje le a Thread.sleep függvényt implicit, explicit és fluent várakozásokra, amelyeket az ExpectedConditions vezérel, hogy kiküszöbölje a flancos teszteket.
  • ???? Kivételek kezelése: A NoSuchElementException, TimeoutException és StaleElementReferenceException hibák elfogásával biztosítható az automatizálási csomagok rugalmassága.
  • 🤖 AI tesztgenerálás: A mesterséges intelligencia asszisztensei sablonos WebDriver szkripteket generálnak, helymeghatározókat javasolnak, és automatikusan javítják a szelektorokat, amikor a DOM megváltozik.

Selenium webdriver Java Program

Selenium Java Példa

az Java Az előző oktatóanyagban létrehozott „myclass” osztályban próbáljunk meg létrehozni egy WebDriver szkriptet, amely:

Lépés 1: lekérés Mercury Tours honlapja
Lépés 2: ellenőrizze a címét
Lépés 3: nyomtassa ki az összehasonlítás eredményét
Lépés 4: zárja be a teljes program befejezése előtt.

Selenium WebDriver minta Code

Az alábbiakban látható a tényleges WebDriver kód a fenti forgatókönyv által bemutatott logikához

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

}

Megjegyzés: Indítás Firefox 35, a Web Driver használatához a Mozilla által létrehozott gecko illesztőprogramot kell használnia. Selenium 3.0, a gecko és a firefox kompatibilitási problémái vannak, és ezek helyes beállítása nehézkes feladat lehet. Ha a kód nem működik, váltson vissza a következőre Firefox 47-es vagy régebbi verzió. Alternatív megoldásként futtathatja a szkripteket a Chrome-on. Selenium a Chrome-hoz már kiindulva működik. Csak 3 sor kódot kell módosítania, hogy a szkript működjön a Chrome-mal vagy Firefox

A kód magyarázata

Csomagok importálása

A kezdéshez a következő két csomagot kell importálnia:

  1. org.openqa.selenium.*– tartalmazza a WebDriver osztályt, amely egy adott meghajtóval betöltött új böngésző példányosításához szükséges
  2. org.openqa.selenium.firefox.FirefoxVezető – tartalmazza a FirefoxA példányosításhoz szükséges járművezetői osztály a Firefox-specifikus illesztőprogram a WebDriver osztály által példányosított böngészőbe

Ha a tesztnek bonyolultabb műveletekre van szüksége, mint például egy másik osztály elérése, a böngésző képernyőképeinek készítése vagy a külső fájlok manipulálása, akkor feltétlenül több csomagot kell importálnia.

Objektumok és változók példányosítása

Normális esetben egy illesztőprogram-objektum példányosítása így történik.

WebDriver driver = new FirefoxDriver();

A FirefoxA paraméterek nélküli illesztőprogram-osztály azt jelenti, hogy az alapértelmezett Firefox profilt indítjuk el Java program. Az alapértelmezett Firefox profil hasonló az indításhoz Firefox csökkentett módban (nincs bővítmény betöltve).

A kényelem kedvéért megmentettük az alapot. URL és a várható címet változóként.

Böngésző munkamenet indítása

WebDriver get () metódust egy új böngésző-munkamenet elindítására használják, és a következőre irányítják át: URL amit paraméterként adsz meg.

driver.get(baseUrl);

Szerezze meg az oldal tényleges címét

A WebDriver osztály rendelkezik a getTitle() módszer, amelyet mindig az aktuálisan betöltött oldal oldalcímének lekérésére használnak.

actualTitle = driver.getTitle();

Hasonlítsa össze a várható és tényleges értékeket

A kód ezen része egyszerűen egy alapszintet használ Java if-else struktúra a tényleges cím és a várt cím összehasonlításához.

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

Böngészési munkamenet megszakítása

AzBezárás()” metódus használható a böngészőablak bezárására.

driver.close();

A teljes program megszüntetése

Ha úgy használja ezt a parancsot, hogy nem zárja be először az összes böngészőablakot, akkor az egész Java A program leáll, miközben a böngésző ablak nyitva marad.

System.exit(0);

A teszt futtatása

Kétféle módon lehet kódot végrehajtani Eclipse SDI.

  1. On Eclipsemenüsorán kattintson Futtatás > Futtatás.
  2. Sajtó Ctrl + F11 a teljes kód futtatásához.

A teszt futtatása

Ha mindent jól csináltál, Eclipse a „Teszt sikeres!”

A teszt futtatása

GUI-elemek megkeresése

Az elemek megtalálása a WebDriverben a „findElement(By.lokátor()” módszerrel. A kód „helymeghatározó” része megegyezik a korábban tárgyalt helymeghatározók bármelyikével Selenium IDE ezeknek az oktatóanyagoknak a fejezetei. Valójában azt javasoljuk, hogy az IDE segítségével keresse meg a GUI-elemeket, és a sikeres azonosítás után exportálja a kódot a WebDriver-ba.

Itt van egy Selenium mintakód, amely egy elemet az azonosítója alapján keres meg. A Facebookot használjuk bázisként 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);
}
}

Mi használtuk a getTagName() módszer a kipróbálásratract annak az elemnek a tagneve, amelynek azonosítója „email”. Futtatáskor ennek a kódnak képesnek kell lennie a tagnév („input”) helyes azonosítására, és ki kell nyomtatnia azt a következőre: Eclipsea Konzol ablakában.

GUI-elemek megkeresése

Összefoglalás az elemek helymeghatározásához

Variáció Leírás Minta
By.className elemeket talál az „class” attribútum értéke alapján findElement(By.className(“valamilyenOsztálynév”))
Készítette.cssSelector megkeresi az elemeket az illesztőprogram mögöttes CSS Selector motorja alapján findElement(By.cssSelector(“bemenet#email”))
By.id az elemeket az „id” attribútum értéke alapján keresi meg findElement(By.id("someId")
 
By.linkText pont az általa megjelenített szöveg alapján talál hivatkozáselemet findElement(By.linkText("REGISZTRÁCIÓ")
 
Név szerint az elemeket a „name” attribútum értéke alapján keresi meg findElement(By.name("someName")
 
By.partialLinkText megkeresi az adott linkszöveget tartalmazó elemeket findElement(By.partialLinkText("REG")
 
By.tagName megkeresi az elemeket a címkenév alapján findElement(By.tagName("div")
 
By.xpath XPath segítségével találja meg az elemeket 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]”))

Megjegyzés a findElement(By.cssSelector()) használatával kapcsolatban

By.cssSelector() nem támogatja a „tartalmaz” funkciót. Fontolja meg a Selenium IDE kód lent –

Megjegyzés a findElement(By.cssSelector()) használatával kapcsolatban

In Selenium A fenti IDE, a teljes teszt sikeres volt. Azonban a Selenium Az alábbi WebDriver szkript, ugyanaz a teszt hibát generált, mert a WebDriver nem támogatja a „contains” kulcsszót, amikor a By.cssSelector() metódusban használják.

Megjegyzés a findElement(By.cssSelector()) használatával kapcsolatban

Közös parancsok

Webelemek példányosítása

Ahelyett, hogy a hosszú „driver.findElement(By.locator())” szintaxist használnánk minden alkalommal, amikor hozzáférünk egy adott elemhez, példányosíthatunk hozzá egy WebElement objektumot. A WebElement osztályt az „org.openqa.selenium.*” csomag tartalmazza.

Webelemek példányosítása

Egy elemre kattintva

A kattintás talán a webes elemekkel való interakció leggyakoribb módja. A click() módszer bármely elem kattintásának szimulálására szolgál. A következő Selenium Java példa mutatja, hogyan click() kattintásra használták Mercury A Tours „Bejelentkezés” gombja.

Egy elemre kattintva

A click() metódus használatakor a következőket kell figyelembe venni.

  • Nem igényel paramétert/argumentumot.
  • A módszer automatikusan megvárja az új oldal betöltését, ha szükséges.
  • A rákattintandó elemnek láthatónak kell lennie (magassága és szélessége nem lehet nulla).

Get Commands

A Get parancsok különféle fontos információkat kérnek le az oldalról/elemről. Íme néhány fontos „get” parancs, amelyeket ismernie kell.

Parancsok Használat
get ()

Használati minta:

  • Automatikusan megnyit egy új böngészőablakot, és lekéri a zárójelben megadott oldalt.
  • Ez a megfelelője Selenium Az IDE „open” parancsa.
  • A paraméternek a Húr tárgy.
getTitle()

Használati minta:

  • Nincs szükség paraméterekre
  • Lekéri az aktuális oldal címét
  • A bevezető és a záró szóközök le vannak vágva
  • Null karakterláncot ad vissza, ha az oldalnak nincs címe
getPageSource()

Használati minta:

  • Nincs szükség paraméterekre
  • Az oldal forráskódját karakterlánc értékként adja vissza
getCurrentUrl()

Használati minta:

  • Nincs szükség paraméterekre
  • Lekéri az aktuális karakterláncot. URL amit a böngésző néz
getText()

Használati minta:

  • Lekéri a megadott elem belső szövegét

Navigációs parancsok

Ezek a parancsok lehetővé teszik a különböző weboldalak frissítését, belépését és oda-vissza váltását.

navigate().to()

Használati minta:

  • Automatikusan megnyit egy új böngészőablakot, és lekéri a zárójelben megadott oldalt.
  • Pontosan ugyanazt csinálja, mint a get() módszer.
navigate().refresh()

Használati minta:

  • Nincs szükség paraméterekre.
  • Frissíti az aktuális oldalt.
navigate().back()

Használati minta:

  • Nincs szükség paraméterekre
  • Egy oldallal visszalép a böngésző előzményeiben.
navigate().forward()

Használati minta:

  • Nincs szükség paraméterekre
  • Egy oldallal előre viszi a böngésző előzményeit.

A böngésző bezárása és kilépése Windows

Bezárás()

Használati minta:

  • Nincs szükség paraméterekre
  • Csak azt a böngészőablakot zárja be, amelyet a WebDriver jelenleg vezérel.
Kilépés()

Használati minta:

  • Nincs szükség paraméterekre
  • Bezárja az összes WebDriver által megnyitott ablakot.

A böngésző bezárása és kilépése Windows

Hogy világosan szemléltesse a különbséget close() és a quit(), próbálja meg végrehajtani az alábbi kódot. Olyan weboldalt használ, amely automatikusan felugrik egy ablakot az oldal betöltésekor, és megnyit egy másikat a kilépés után.

A böngésző bezárása és kilépése Windows

Figyelje meg, hogy csak a szülőböngésző ablak volt bezárva, a két felugró ablak nem.

A böngésző bezárása és kilépése Windows

De ha a quit() parancsot használja, akkor minden ablak bezárul – nem csak a szülő. Próbálkozzon az alábbi kód futtatásával, és észre fogja venni, hogy a fenti két felugró ablak is automatikusan bezárul.

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

Váltás a keretek között

A keretben lévő grafikus felület elemeinek eléréséhez először a WebDrivert kell irányítanunk, hogy a keretre vagy a felugró ablakra összpontosítson, mielőtt hozzáférhetnénk a bennük lévő elemekhez. Vegyük például a weboldalt https://demo.guru99.com/selenium/deprecated.html

Váltás a keretek között

Ezen az oldalon 3 keret található, amelyek „name” attribútumait fentebb jeleztük. Szeretnénk elérni a fenti, sárgával körülvett „Elavult” hivatkozást. Ehhez először utasítanunk kell a WebDrivert, hogy váltson a „classFrame” keretre a "switchTo().frame()" módszer. A „frame()” rész paramétereként a frame name attribútumot fogjuk használni.

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

A kód végrehajtása után látni fogja, hogy a „classFrame” keret az „Elavult API” oldalra kerül, ami azt jelenti, hogy kódunk sikeresen hozzáfért az „Elavult” hivatkozáshoz.

Váltás a felugró ablakok között Windows

A WebDriver lehetővé teszi a felugró ablakok, például a figyelmeztetések megjelenítését, ellentétben az in Selenium IDE. A riasztáson belüli elemek (például a benne lévő üzenet) eléréséhez használnunk kell a "switchTo().alert()" módszer. Az alábbi kódban ezt a módszert használjuk a figyelmeztető mező eléréséhez, majd az üzenet lekéréséhez a "getText()" módszert, majd automatikusan zárja be a figyelmeztető ablakot a gombbal "switchTo().alert().accept()" módszer.

Először is menj oda https://output.jsbin.com/usidix/1 és manuálisan kattintson a "Go!" gombot ott, és nézze meg saját szemével az üzenet szövegét.

Váltás a felugró ablakok között Windows

Lássuk a Selenium példa kód erre-

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

A Eclipse konzolon, vegye figyelembe, hogy a kinyomtatott figyelmeztető üzenet:

Váltás a felugró ablakok között Windows

Vár

Kétféle várakozás létezik.

  1. Implicit várakozás – az alapértelmezett várakozási idő beállítására szolgál az egész programban
  2. Explicit várakozás – csak egy adott példány várakozási idejének beállítására szolgál

Implicit várakozás

  • Egyszerűbb a kódolás, mint az Explicit Waits.
  • Általában a kód példányosítási részében deklarálják.
  • Csak egy további csomagra lesz szüksége az importáláshoz.

Az implicit várakozás használatához importálnia kell ezt a csomagot a kódjába.

Implicit várakozás

Ezután adja hozzá ezt a kód példányosítási részéhez.

Implicit várakozás

Kifejezett várakozás

Az explicit várakozás a WebDriverWait és az ExpectedCondition osztályok használatával történik. A következőkhöz Selenium A WebDriver példájában legfeljebb 10 másodpercig várunk, amíg egy „felhasználónév” azonosítójú elem láthatóvá válik, mielőtt a következő parancsra lépnénk. Itt vannak a lépések.

Lépés 1:

Importálja ezt a két csomagot:

Kifejezett várakozás

Lépés 2:

Deklaráljon egy WebDriverWait változót. Ebben a példában a „myWaitVar” értéket fogjuk használni a változó neveként.

Kifejezett várakozás

Lépés 3:

Használja a myWaitVar-t az ExpectedConditions paraméterrel azokon a részeken, ahol kifejezett várakozásra van szüksége. Ebben az esetben explicit várakozást fogunk használni a „felhasználónéven” (Mercury Tours HomePage) bevitelét, mielőtt beírnánk az „oktatóanyag” szöveget.

Kifejezett várakozás

Feltételek

A következő metódusokat használjuk feltételes és loo módbanping műveletek —

  • engedélyezve() akkor használatos, ha egy parancs végrehajtása előtt ellenőrizni szeretné, hogy egy adott elem engedélyezve van-e vagy sem.

Feltételek Enabled()

  • isdisplayed() akkor használatos, ha egy parancs végrehajtása előtt ellenőrizni szeretné, hogy egy adott elem megjelenik-e vagy sem.

Feltételek isDisplayed()

  • isSelected() akkor használatos, ha ellenőrizni szeretné, hogy egy bizonyos jelölőnégyzetet, rádiógombot vagy opciót egy legördülő menüben van kiválasztva. Más elemeken nem működik.

Feltételek kijelölve()

Az ExpectedConditions használata

Az ExpectedConditions osztály a feltételek szélesebb körét kínálja, amelyeket a WebDriverWait till() metódusával együtt használhat.

Az alábbiakban bemutatjuk a leggyakoribb ExpectedConditions módszereket.

  • alertIsPresent() – megvárja, amíg megjelenik egy figyelmeztető mező.

Az ExpectedConditions alertIsPresent() használata

  • elementToBeClickable() – Megvárja, amíg egy elem láthatóvá válik, és ezzel egyidejűleg engedélyezve lesz. A minta Selenium Code Az alábbi utasítás megvárja, amíg a „username” azonosítójú elem láthatóvá és engedélyezetté válik, mielőtt ezt az elemet „txtUserName” nevű WebElement változóként rendelné hozzá.

Az ExpectedConditions használata

  • frameToLehetőÉs VáltsonToIt() – Megvárja, amíg az adott keret már elérhető, majd automatikusan átvált rá.

Az ExpectedConditions elemToBeClickable() használata

Kivételek elkapása

Az isEnabled(), isDisplayed() és isSelected() esetén a WebDriver feltételezi, hogy az elem már létezik az oldalon. Ellenkező esetben dobni fog a NoSuchElementException. Ennek elkerülésére használjunk try-catch blokkot, hogy a program ne szakadjon meg.

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

Ha kifejezett várakozást használ, a kivétel típusa, amelyet el kell fognia, az „Időtúllépési kivétel”.

Kivételek elkapása

GYIK

Telepíts JDK-t, egy IDE-t, mint például Eclipse vagy IntelliJ, a Selenium Java könyvtárakat és a hozzá illő böngészőillesztőt. Készítsen automatizálási eszközöket, mint például a Maven vagy Gradle egyszerűsítse a függőségek kezelését.

A mesterséges intelligencia automatikusan megjavítja a lokátorokat, teszteseteket generál felhasználói történetekből, és azonosítja a bizonytalan teszteket. Olyan platformok, mint a TestimA , a Mabl és az Applitools mesterséges intelligenciát ágyaz be az intelligensebb szerkesztés, végrehajtás és vizuális validáció érdekében.

Igen. GitHub Copilot, Cursor és JetBrains AI generál Java Selenium szkriptek egyszerű nyelvi lépésekből, beleértve a várakozásokat, az assertioneket és az oldalobjektumokat. Ezek jelentősen lerövidítik a sablonos teszteket az új tesztelési forgatókönyvekhez.

A findElement függvény visszaadja az első egyező WebElement elemet, vagy NoSuchElementException kivételt dob. A findElements függvény visszaadja az összes egyezés listáját, és egy üres listát ad vissza, ha egyet sem talál, soha nem dob kivételt.

A Thread.sleep függvény fix időtartamra szünetel, függetlenül az oldal állapotától, lelassítva a gyors futtatásokat és meghiúsítva a lassúakat. Használd a WebDriverWait függvényt az ExpectedConditions feltételekkel, hogy csak a szükséges ideig várj.

Selenium támogatja a ChromeDriver és a GeckoDriver fájlokat Firefox, EdgeDriver, SafariDriver és IEDriverServer. Selenium A 4-es verziójú Manager automatikusan letölti a megfelelő illesztőprogramot.

Konfigurálja a ChromeOptions vagy FirefoxOptions objektum a setAcceptInsecureCerts(true) függvénnyel. Ez arra utasítja a böngészőt, hogy hagyja figyelmen kívül az érvénytelen tanúsítványokat, hogy a WebDriver munkamenet folytatódhasson.

A WebDriverManager automatikusan letölti és konfigurálja a telepített böngészőverzióhoz tartozó megfelelő böngészőillesztő bináris fájlt, így kiküszöböli a manuális illesztőprogram-karbantartást és csökkenti az új közreműködők telepítési idejét.

Foglald össze ezt a bejegyzést a következőképpen: