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.

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:
- 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
- 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.
- On Eclipsemenüsorán kattintson Futtatás > Futtatás.
- Sajtó Ctrl + F11 a teljes kód futtatásához.
Ha mindent jól csináltál, Eclipse a „Teszt sikeres!”
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.
Ö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 –
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.
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.
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.
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: |
|
| getTitle()
Használati minta: |
|
| getPageSource()
Használati minta: |
|
| getCurrentUrl()
Használati minta: |
|
| getText()
Használati minta: |
|
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: |
|
| navigate().refresh()
Használati minta: |
|
| navigate().back()
Használati minta: |
|
| navigate().forward()
Használati minta: |
|
A böngésző bezárása és kilépése Windows
| Bezárás()
Használati minta: |
|
| Kilépés()
Használati minta: |
|
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.
Figyelje meg, hogy csak a szülőböngésző ablak volt bezárva, a két felugró ablak nem.
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
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.
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ár
Kétféle várakozás létezik.
- Implicit várakozás – az alapértelmezett várakozási idő beállítására szolgál az egész programban
- 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.
Ezután adja hozzá ezt a kód példányosítási részéhez.
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:
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.
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.
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.
- isdisplayed() akkor használatos, ha egy parancs végrehajtása előtt ellenőrizni szeretné, hogy egy adott elem megjelenik-e vagy sem.
- 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.
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ő.
- 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á.
- frameToLehetőÉs VáltsonToIt() – Megvárja, amíg az adott keret már elérhető, majd automatikusan átvált rá.
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”.

.png)
.png)
.png)
.png)
.png)
.png)

.png)


.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)