Selenium Webdriver Java Programpélda (mintakód)

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 mintakód

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 = "http://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 változóként mentettük az alap URL-t és a várt címet.

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

WebDriver get () metódussal indítható el egy új böngésző munkamenet, és a paraméterként megadott URL-re irányítja azt.

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. nyomja meg 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 Facebook alap URL-ként szolgál.

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 az adott elem címkenevének kinyerésére, amelynek azonosítója „email”. Futtatáskor ennek a kódnak képesnek kell lennie az „input” címkenév helyes azonosítására, és ki kell nyomtatnia Eclipsea Konzol ablakában.

GUI-elemek megkeresése

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

Variáció Description 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 a böngésző által keresett aktuális URL-t képviselő karakterláncot
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 http://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("http://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

Körülmények

A következő módszereket alkalmazzák a feltételes és hurkolt műveletekben -

  • 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 Az alábbi kód megvárja, amíg az id=”username” elem láthatóvá válik és engedélyezve lesz, mielőtt az elemet „txtUserName” nevű WebElement változóként rendeli 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

Összegzésként

  • A WebDriver API használatának megkezdéséhez importálnia kell legalább ezt a két csomagot.
  • org.openqa.selenium.*
  • org.openqa.selenium.firefox.FirefoxVezető
  • A get() módszer megfelelője Selenium Az IDE „open” parancsa.
  • Az elemek megtalálása a WebDriverben a következővel történik: findElement() módszer.
  • A következő lehetőségek állnak rendelkezésre az elemek megkeresésére a WebDriverben:
  • By.className
  • Készítette.cssSelector
  • By.id
  • By.linkText
  • Név szerint
  • By.partialLinkText
  • By.tagName
  • By.xpath
  • A By.cssSelector() nem támogassa a "tartalmaz" funkciót.
  • Egy elemet példányosíthat a WebElement osztály segítségével.
  • Egy elemre kattintva a click() módszer.
  • A WebDriver ezeket a hasznos get parancsokat biztosítja:
  • get ()
  • getTitle()
  • getPageSource()
  • getCurrentUrl()
  • getText()
  • A WebDriver ezeket a hasznos navigációs parancsokat biztosítja
  • navigate().forward()
  • navigate().back()
  • navigate().to()
  • navigate().refresh()
  • A close() és quit() metódusok a böngészőablakok bezárására szolgálnak. Close() egyetlen ablak bezárására szolgál; míg quit() a WebDriver objektum által vezérelt szülőablakhoz társított összes ablak bezárására szolgál.
  • A switchTo().frame() és a switchTo().alert() metódusokat használnak arra, hogy a WebDriver fókuszát egy keretre vagy riasztásra irányítsák.
  • Implicit waits a várakozási idő beállítására szolgál az egész program során, míg explicit waits csak meghatározott adagokban használják.
  • Használhatja az isEnabled(), isDisplayed(),isSelected() és ezek kombinációját WebDriverVárjon és a Várható feltételek módszerek egy elem állapotának ellenőrzésére. Nem ellenőrzik azonban, hogy az elem nem létezik-e.
  • Ha az isEnabled(), isDisplayed(), vagy isSelected() meghívásra került, miközben az elem nem létezett, a WebDriver egy NoSuchElementException.
  • Amikor a WebDriverWait és az ExpectedConditions metódusokat meghívták, miközben az elem nem létezett, a WebDriver egy TimeoutException.

Jegyzet:

driver.get(): Ezzel a módszerrel egy adott webhelyre navigálhat. Azonban nem tárolja a böngészési előzményeket vagy a cookie-kat. Emiatt az előre és hátra gombok nem működnek, és a rájuk kattintva nem ütemezi be az oldalnavigációt.

driver.navigate(): Ezt a módszert egy adott webhelyre való navigálásra is használják, de a böngészési előzményeket és a sütiket is megőrzi. Ez lehetővé teszi az előre és vissza gombok használatát az oldalak közötti navigációhoz, miközben tesztesetet kódol.

Olvasson többet Bővebben