Az előző oktatóanyagban létrehozott "myclass" Java osztály segítségével próbáljunk meg létrehozni egy WebDriver parancsfájlt, amely:
- töltse le a Mercury Tours honlapját
- igazolja a címét
- nyomtassa ki az összehasonlítás eredményét
- zárja be, mielőtt befejezi a teljes programot.
WebDriver kód
Az alábbiakban látható a fenti forgatókönyv által bemutatott logika tényleges WebDriver-kódja
Megjegyzés: A Firefox 35 indításakor a Mozilla által létrehozott gekkó illesztőprogramot kell használnia a webillesztő használatához. A Selenium 3.0, a gecko és a Firefox kompatibilitási problémákkal küzd, és ezek helyes beállítása felfelé irányuló feladattá válhat. Ha a kód nem működik, váltson át a Firefox 47-es vagy régebbi verziójára. Alternatív megoldásként futtathatja a szkripteket a Chrome-on. A szelén dobozon kívül működik a Chrome számára. Csak 3 kódsort kell megváltoztatnia, hogy a szkript működjön a Chrome-tal vagy a Firefox-szal
csomag newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// a Chrome használatához írja le a fenti sort, és kommentelje az alábbi sort// import org.openqa.selenium.chrome.ChromeDriver;PG1 nyilvános osztály {public static void main (String [] érvel) {// objektumok / változók deklarálása és példányosításaSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver illesztőprogram = new FirefoxDriver ();// kommentálja a fenti 2 sort, és kommentelje 2 sor alatt a Chrome használatához//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// WebDriver illesztőprogram = new ChromeDriver ();Karaktersorozat baseUrl = "http://demo.guru99.com/test/newtours/";String várhatóTitle = "Üdvözöljük: Mercury Tours";String actualTitle = "";// indítsa el a Fire foxot, és irányítsa az Alap URL-redriver.get (baseUrl);// megkapja a cím tényleges értékétactualTitle = driver.getTitle ();/ ** hasonlítsa össze az oldal tényleges címét a vártval és nyomtassa ki* az eredmény "sikeres" vagy "sikertelen"* /if (actualTitle.contentEquals (várhatóTitle)) {System.out.println ("A teszt sikeres!");} más {System.out.println ("Sikertelen teszt");}// bezár Tűz rókadriver.close ();}}
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 illesztőprogrammal töltött új böngésző példányosításához szükséges
- org.openqa.selenium.firefox.FirefoxDriver - tartalmazza a FirefoxDriver osztályt, amely szükséges ahhoz, hogy a Firefox-specifikus illesztőprogram a WebDriver osztály által példányosított böngészőhöz példányos legyen.
Ha a tesztnek bonyolultabb műveletekre van szüksége, például egy másik osztály elérésére, böngésző képernyőképeinek elkészítésére vagy külső fájlok manipulálására, akkor mindenképpen több csomagot kell importálnia.
Objektumok és változók beindítása
Normális esetben ez az illesztőprogram objektum példányosítása.
A paraméter nélküli FirefoxDriver osztály azt jelenti, hogy az alapértelmezett Firefox profilt a Java programunk indítja el. Az alapértelmezett Firefox-profil hasonló a Firefox csökkentett módban történő indításához (nincsenek betöltések).
A kényelem kedvéért változókként elmentettük az Alap URL-t és a várható címet.
Böngésző munkamenet indítása
A WebDriver get () metódusát egy új böngésző munkamenet indításához használják, és a paraméterként megadott URL-re irányítja.
Szerezd meg a Tényleges oldal címet
A WebDriver osztály rendelkezik a getTitle () módszerrel, amelyet mindig az aktuálisan betöltött oldal címének megszerzésére használnak.
Hasonlítsa össze a várható és a tényleges értékeket
A kódnak ez a része egyszerűen egy alapvető Java if-else struktúrát használ a tényleges cím és a várt cím összehasonlításához.
Böngésző munkamenet megszüntetése
A " bezárás () " módszer a böngészőablak bezárására szolgál.
A teljes program megszüntetése
Ha ezt a parancsot anélkül használja, hogy először bezárná az összes böngészőablakot, akkor a teljes Java program befejeződik, miközben a böngészőablak nyitva marad.
A teszt futtatása
Kétféle módon lehet végrehajtani a kódot az Eclipse IDE programban.
- Az Eclipse menüsorán kattintson a Futtatás> Futtatás elemre .
- Nyomja meg a Ctrl + F11 billentyűkombinációt a teljes kód futtatásához.
Ha mindent helyesen csinálna, az Eclipse a "Teszt sikeres!"
A GUI elemek megkeresése
Az elemek helymeghatározása a WebDriver programban a " findElement (By. Locator ()) " módszerrel történik. A kód "lokátor" része megegyezik bármelyik lokátorral, amelyet korábban ezen oktatóanyagok Selenium IDE fejezeteiben tárgyaltunk. Valójában azt javasoljuk, hogy keresse meg a GUI elemeket az IDE használatával, és miután sikeresen azonosította, exportálja a kódot a WebDriver programba.
Itt van egy szelén mintakód, amely az elemet azonosítója alapján keresi meg. A Facebook az alap URL.
csomag newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;PG2 nyilvános osztály {public static void main (String [] érvel) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver illesztőprogram = 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);}}
A getTagName () metódust alkalmaztuk annak az elemnek a címkéjének nevéhez, amelynek azonosítója "email". Futtatásakor ennek a kódnak képesnek kell lennie a címke nevének "input" azonosítására, és kinyomtatja az Eclipse Console ablakában.
Összefoglaló az elemek felkutatásához
Variáció | Leírás | Minta |
---|---|---|
Által. osztály név | elemeket talál az "class" attribútum értéke alapján | findElement (By.className ("someClassName")) |
Által. cssSelector | elemeket talál a vezető mögöttes CSS Selector motorja alapján | findElement (By.cssSelector ("input # email")) |
Által. id | az elemeket az "id" attribútumuk értéke alapján keresi meg | findElement (By.id ("someId")) |
Által. linkText | megtalálja a link elemet a megjelenített szöveg alapján | findElement (By.linkText ("REGISZTRÁCIÓ")) |
Által. név | az elemeket a "név" attribútum értéke alapján keresi meg | findElement (By.name ("someName")) |
Által. részlegesLinkText | megkeresi azokat az elemeket, amelyek a megadott link szöveget tartalmazzák | findElement (By.partialLinkText ("REG")) |
Által. tagName | az elemeket a címke nevük alapján keresi meg | findElement (By.tagName ("div")) |
Által. xpath | az elemeket az XPath útján keresi meg | 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 használatához (By.cssSelector ())
A By.cssSelector () nem támogatja a "tartalmazza" funkciót . Vegye figyelembe az alábbi szelén IDE kódot -
A fenti Selenium IDE-ben a teljes teszt sikeres volt. Azonban az alábbi Selenium WebDriver szkriptben ugyanaz a teszt hibát generált, mert a WebDriver nem támogatja a "tartalmazza" kulcsszót, amikor a By.cssSelector () metódusban használják.
Közös parancsok
A webes elemek beindítása
Ahelyett, hogy a hosszú "driver.findElement (By.locator ())" "szintaxist használnánk minden alkalommal, amikor egy adott elemhez hozzáférünk, példányosíthatunk egy WebElement objektumot hozzá. A WebElement osztály az "org.openqa.selenium. *" Csomagban található.
Kattintson egy elemre
A kattintás talán a webelementekkel való interakció leggyakoribb módja . A click () metódust bármely elem kattintásának szimulálására használják. A következő Selenium Java példa bemutatja, hogy a click () segítségével hogyan kattintottak a Mercury Tours "Bejelentkezés" gombra.
A click () metódus használatakor a következőket kell figyelembe venni.
- Nem tartalmaz paramétert / argumentumot.
- A módszer adott esetben automatikusan megvárja az új oldal betöltését .
- A rákattintandó elemnek láthatónak kell lennie (a magasság és a szélesség nem lehet egyenlő nullával).
Kap parancsokat
Parancsok kérése az oldal / elem különféle fontos információinak letöltéséhez. Íme néhány fontos "get" parancs, amelyeket ismernie kell.
Parancsok | Használat |
---|---|
get () minta minta: |
|
getTitle () Minta használat: |
|
getPageSource () Minta használat: |
|
getCurrentUrl () Minta használat: |
|
getText () Minta használat: |
|
Navigálás a parancsokban
Ezek a parancsok lehetővé teszik a frissítést, a belépést és az előre-hátra váltást a különböző weboldalak között.
navigate (). to () Minta használat: |
|
navigate (). refresh () Minta használat: |
|
navigate (). back () Mintahasználat: |
|
navigate (). forward () Mintahasználat: |
|
A böngésző Windows bezárása és bezárása
bezár () Minta felhasználás: |
|
quit () Minta használat: |
|
A close () és a quit () közötti különbség egyértelmű bemutatásához próbálja meg végrehajtani az alábbi kódot. Olyan weboldalt használ, amely az oldal betöltésekor automatikusan felbukkan egy ablakban, és kilépés után megnyit egy másikat.
Figyelje meg, hogy csak a szülő böngészőablakot zárták be, a két felugró ablakot nem.
De ha a quit () -t használja, akkor az összes ablak bezárul - nem csak a szülő. Próbálkozzon az alábbi kód futtatásával, és észreveszi, hogy a fenti két előugró ablak is automatikusan bezáródik.
csomag newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;PG3 nyilvános osztály {public static void main (String [] érvel) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver illesztőprogram = new FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // a QUIT használatával az összes ablak bezárul}}
Váltás keretek között
Ahhoz, hogy egy keretben hozzáférjünk a GUI elemekhez, először meg kell irányítanunk a WebDriver programot, hogy először a keretre vagy az előugró ablakra összpontosítson, mielőtt hozzájuk férnénk. Vegyük például a http://demo.guru99.com/selenium/deprecated.html weboldalt.
Ennek az oldalnak 3 kerete van, amelyek "name" attribútumait fentebb jeleztük. Hozzá kívánunk férni a fent sárga színnel körülvett "Elavult" linkhez. Ehhez először meg kell utasítanunk a WebDrivert, hogy váltson a "classFrame" keretre a "switchTo (). Frame ()" módszerrel. A keret név attribútumát fogjuk használni a "frame ()" rész paramétereként.
csomag newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;PG4 nyilvános osztály {public static void main (String [] érvel) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver illesztőprogram = new FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Elavult")). kattintson ();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 elérte az "Elavult" linket.
Váltás a felugró ablakok között
A WebDriver lehetővé teszi a felugró ablakok, például riasztások megjelenítését, ellentétben a Selenium IDE-vel. A riasztás elemeihez (például a benne lévő üzenethez) való hozzáféréshez a "switchTo (). Alert ()" módszert kell használnunk . Az alábbi kódban ezt a módszert fogjuk használni a riasztás mező eléréséhez, majd az üzenet letöltéséhez a "getText ()" módszerrel, majd a "switchTo (). Alert" (). Accept () használatával automatikusan bezárja a riasztó mezőt . " módszer.
Először lépjen a http://jsbin.com/usidix/1 webhelyre, és kattintson manuálisan a "Go!" gombra, és nézze meg maga az üzenet szövegét.
Lássuk a szelén példakódot erre.
csomagcsomag;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;nyilvános osztály myclass {public static void main (String [] érvel) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver illesztőprogram = new FirefoxDriver ();String alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value = \" Go! \ "]")). kattintson ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);driver.quit ();}}
Az Eclipse konzolon vegye figyelembe, hogy a nyomtatott 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
- Kifejezett várakozás - a várakozási idő beállítására szolgál csak egy adott példányra
Implicit Wait
- Kódolni egyszerűbb, mint az Explicit Waits.
- Általában a kód példányos 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 ezt a csomagot importálnia kell a kódjába.
Ezután adja hozzá a kód példányának részén.
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ő Selenium WebDriver példához legfeljebb 10 másodpercet kell várnunk, amíg egy elem, amelynek azonosítója "felhasználónév", láthatóvá válik, mielőtt folytatnánk a következő parancsot. Itt vannak a lépések.
1. lépés
Importálja ezt a két csomagot:
2. lépés
Nyújtson be egy WebDriverWait változót. Ebben a példában a "myWaitVar" -t fogjuk használni a változó neveként.
3. lépés
Használja a myWaitVar with ExpectedConditions elemeket azokon a részeken, ahol a kifejezett várakozásra van szükség. Ebben az esetben kifejezetten várakozunk a "felhasználónév" (Mercury Tours HomePage) bemeneten, mielőtt beírnánk a "bemutató" szöveget.
Körülmények
A feltételes és a ciklusos műveletekben a következő módszereket alkalmazzák:
- Az isEnabled () akkor használható, ha a parancs végrehajtása előtt ellenőrizni szeretné, hogy egy bizonyos elem engedélyezve van-e vagy sem.
- Az isDisplayed () akkor használható, ha a parancs végrehajtása előtt ellenőrizni szeretné, hogy egy bizonyos elem megjelenik-e vagy sem.
- Az isSelected () akkor használható, ha ellenőrizni szeretné, hogy a legördülő mezőben be van-e jelölve egy bizonyos jelölőnégyzet, választógomb vagy opció . Más elemeken nem működik.
Az ExpectedConditions használata
Az ExpectedConditions osztály szélesebb feltételkészletet kínál, amelyeket a WebDriverWait's (() módszerrel együtt használhat.
Az alábbiakban bemutatjuk a leggyakoribb ExpectedConditions módszereket.
- alertIsPresent () - megvárja, amíg egy riasztási mező megjelenik.
- elementToBeClickable () - Várakozás, amíg egy elem láthatóvá nem válik, és egyben engedélyezve van. Az alábbi Szelén-kód minta megvárja, amíg az elem láthatóvá válik és először engedélyezve van, mielőtt hozzárendelné az elemet "txtUserName" nevű WebElement változóhoz.
- frameToBeAvailableAndSwitchToIt () - Várakozik, amíg az adott keret már elérhető, majd automatikusan átkapcsol rá.
Kivételek megfogása
Az isEnabled (), isDisplayed () és isSelected () használatakor a WebDriver feltételezi, hogy az elem már létezik az oldalon. Ellenkező esetben NoSuchElementException-t dob . Ennek elkerülése érdekében használjunk egy try-catch blokkot, hogy a program ne szakadjon meg.
WebElement txtbox_username = driver.findElement (By.id ("felhasználónév"));próbáld ki{if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("oktatóanyag");}}fogás (NoSuchElementException nsee) {System.out.println (nsee.toString ());}
Ha explicit várakozást használ, akkor a „TimeoutException” típusú kivételt el kell fogadnia.
Összegzés
- A WebDriver API használatának megkezdéséhez legalább ezt a két csomagot importálnia kell.
- org.openqa.selenium. *
- org.openqa.selenium.firefox.FirefoxDriver
- A get () metódus megegyezik a Selenium IDE "open" parancsával.
- Az elemek helymeghatározása a WebDriver programban a findElement () módszerrel történik.
- Az alábbiak az elérhető lehetőségek az elemek elhelyezéséhez a WebDriver programban:
- Által. osztály név
- Által. cssSelector
- Által. id
- Által. linkText
- Által. név
- Által. részlegesLinkText
- Által. tagName
- Által. xpath
- A By.cssSelector () nem támogatja a "tartalmazza" funkciót.
- Példányosíthat egy elemet a WebElement osztály használatával.
- Az elemre kattintás a click () módszerrel történik.
- A WebDriver a következő hasznos parancsokat biztosítja :
- kap()
- getTitle ()
- getPageSource ()
- getCurrentUrl ()
- getText ()
- A WebDriver biztosítja ezeket a hasznos navigációs parancsokat
- navigate (). előre ()
- navigate (). back ()
- navigate (). to ()
- navigate (). refresh ()
- A close () és a quit () metódusok a böngészőablakok bezárására szolgálnak. A Bezárás () segítségével egyetlen ablak bezárható; míg a quit () az összes ablak bezárására szolgál, amely a WebDriver objektum által vezérelt szülőablakhoz kapcsolódik.
- A switchTo (). Frame () és a switchTo (). Alert () módszerekkel a WebDriver fókuszát keretre vagy riasztásra irányítják.
- Az implicit várakozás a várakozási idő beállítására szolgál az egész programban, míg az explicit várakozás csak meghatározott részeken történik.
- Az elem állapotának ellenőrzésénél használhatja az isEnabled (), isDisplayed (), isSelected (), valamint a WebDriverWait és az ExpectedConditions metódusok kombinációját . Azonban nem ellenőrzik, hogy az elem nem létezik-e.
- Amikor az isEnabled (), az isDisplayed () vagy az isSelected () meghívásra került, amíg az elem nem létezett, a WebDriver egy NoSuchElementException-t dob .
- Amikor a WebDriverWait és az ExpectedConditions metódusokat meghívták, miközben az elem nem létezett, a WebDriver TimeoutException-t dob .
Jegyzet:
driver.get (): Az adott weboldalra szokták menni, de nem tartja karban a böngésző előzményeit és a cookie-kat, így nem használhatjuk az előre és a vissza gombot, ha erre kattintunk, az oldal nem kap ütemezést
driver.navigate (): arra használják, hogy az adott weboldalra lépjen, de fenntartja a böngésző előzményeit és a cookie-kat, így az előre és a vissza gombokkal navigálhatunk az oldalak között a Testcase kódolása során.