Az iFrame kezelése a Selenium Webdriver programban: switchTo ()

iFrame a Selenium Webdriver programban

Az iFrame in Selenium Webdriver egy weboldal vagy egy belső keret, amely be van ágyazva egy másik weboldalba, vagy egy HTML dokumentum, amely egy másik HTML dokumentumba van ágyazva. Az iframe-et gyakran használják más forrásokból származó tartalmak, például egy hirdetés, weboldalra történő hozzáadásához. Az iframe-et az < iframe > címkével definiáljuk .

Ebben az oktatóanyagban megtudhatja -

  1. Az iframe azonosítása:
  2. Hogyan kapcsolhatjuk át az iframe elemeket a Web Driver parancsok használatával:
  3. A beágyazott keretek fogalma (keretek a keretekben):

Az iframe azonosítása:

Nem tudjuk észlelni a kereteket pusztán az oldal megtekintésével vagy a Firebug ellenőrzésével.

Figyelje meg az alábbi képet. A megjelenített hirdetés Iframe keret, ezt nem tudjuk megtalálni vagy felismerni a Firebug használatával végzett ellenőrzéssel. Tehát a kérdés az, hogyan lehet azonosítani az iframe-et?

Hogyan lehet azonosítani az iframe-et a Selenium WebDriver használatával

Az alábbiakban megadott módszerekkel azonosíthatjuk a szelén kereteit:

  • Kattintson a jobb gombbal az elemre. Ha megtalálja a 'This Frame' opciót, akkor az iframe. (Kérjük, olvassa el a fenti ábrát)
  • Kattintson jobb gombbal az oldalra, majd kattintson az „Oldalforrás megtekintése” elemre, majd kattintson az „iframe” keresésre, ha bármilyen címke nevet talál az „iframe” névvel, akkor azt jelenti, hogy az oldalt iframe-ből állítja.

A fenti ábrán láthatja, hogy a ' This Frame ' opció jobb egérgombbal kattintva érhető el, így most biztosak vagyunk abban, hogy iframe-ről van szó.

Az alábbi kódrészlet használatával akár az iframe-ek teljes számát is azonosíthatjuk.

Int méret = driver.findElements (By.tagName ("iframe")). Size ();

Az iframe elemek átkapcsolása a Web Driver parancsok használatával:

Alapvetően háromféle módon kapcsolhatjuk át az elemeket és kezelhetjük a kereteket a Seleniumban.

  • Index szerint
  • Név vagy azonosító szerint
  • Webelem által

Váltás indexre képkockára:

Az index a Selenium keretkezelésének egyik attribútuma, amelyen át tudunk váltani.

Az iframe indexe 0-val kezdődik.

Tegyük fel, hogy ha 100 képkocka van az oldalon, az index használatával átválthatunk a Szelén keretére.

  • driver.switchTo (). keret (0);
  • driver.switchTo (). keret (1);

Váltás a keretre név vagy azonosító szerint:

A név és az azonosító a Selenium kereteinek kezeléséhez szükséges attribútumok, amelyeken keresztül átválthatunk az iframe-re.

  • driver.switchTo (). frame ("iframe1");
  • driver.switchTo (). frame ("az elem azonosítója");

Példa az iframe-re való váltásra ID-n keresztül:

Vegyünk egy példát a keretváltásra az alábbi képen látható szelénben. A követelmény az, hogy kattintson az iframe-re.

Ezt az iframe-et az alábbi URL-címen érhetjük el: http: //demo.guru99.com/test/guru99home/

Lehetetlen közvetlenül az iframe-re kattintani az XPath-on keresztül, mivel ez iframe-es. Először át kell váltanunk a keretre, majd az xpath segítségével kattinthatunk.

1. lépés)

WebDriver illesztőprogram = new FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();
  • Inicializáljuk a Firefox illesztőprogramot.
  • Keresse meg a "guru99" webhelyet, amely az iframe-et tartalmazza.
  • Maximalizálta az ablakot.

2. lépés)

driver.switchTo (). frame ("a077aa5e");
  • Ebben a lépésben meg kell találnunk az iframe azonosítóját a Firebug segítségével történő ellenőrzéssel.
  • Ezután váltson az iframe-re az azonosítón keresztül.

3. lépés)

driver.findElement (By.xpath ("html / body / a / img")). kattintson ();
  • Itt meg kell találnunk a kattintandó elem xpath-ját.
  • Kattintson az elemre a fent látható webillesztő segítségével.

Itt van a teljes kód:

public class SwitchToFrame_ID {public static void main (String [] érvel) {WebDriver illesztőprogram = new FirefoxDriver (); // navigál a böngészőhözdriver.get ("http://demo.guru99.com/test/guru99home/");// navigál az iframe-et tartalmazó oldalradriver.manage (). window (). maximize ();driver.switchTo (). frame ("a077aa5e"); // a keret váltása azonosító szerintSystem.out.println ("******** Átváltunk az iframe-re *******");driver.findElement (By.xpath ("html / body / a / img")). kattintson ();// Kattintson az iframe-reSystem.out.println ("********* Befejeztük ***************");}}

Kimenet:

A böngésző a fenti iframe-et tartalmazó oldalra navigál, és rákattint az iframe-re.

Váltás a keretre a Web Element segítségével:

Akár az iframe-re is átállhatunk webes elem segítségével.

  • driver.switchTo (). frame (WebElement);

Hogyan lehet visszakapcsolni a fő keretre

Ki kell jönnünk az iframe-ből.

A szülő kerethez való visszatéréshez használhatja a switchTo (). ParentFrame () elemet, vagy ha vissza szeretne térni a fő (vagy a legtöbb szülő) kerethez, használhatja a switchTo (). DefaultContent ();

driver.switchTo (). parentFrame ();driver.switchTo (). defaultContent ();

Hogyan lehet váltani a képkockán, ha NEM kapcsolhatunk át ID vagy Web Element használatával:

Tegyük fel, hogy ha 100 képkocka van az oldalon, és nincs elérhető azonosító, ebben az esetben csak azt nem tudjuk, hogy melyik iframe szükséges elemet töltjük be (Ez az az eset, amikor nem ismerjük a keret indexét is).

A fenti probléma megoldása az, hogy meg kell találnunk annak az iframe-nek az indexét, amelyen keresztül az elem betöltődik, majd át kell váltanunk az iframe-re az indexen keresztül.

Az alábbiakban bemutatjuk azokat a kereteket, amelyek alapján az elemet betöltjük az alábbi kódrészlet használatával

1. lépés)

WebDriver illesztőprogram = new FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();
  • Inicializálja a Firefox illesztőprogramot.
  • Keresse meg az iframe-et tartalmazó "guru99" webhelyet.
  • Maximalizálta az ablakot.

2. lépés)

int méret = driver.findElements (By.tagName ("iframe")). size ();
  • A fenti kód megtalálja az oldalon belüli iframe-ek összes számát az 'iframe' címke felhasználásával.

3. lépés)

Ennek a lépésnek az lenne a célja, hogy megtudja az iframe indexét.

for (int i = 0; i <= méret; i ++) {driver.switchTo (). keret (i);int összesen = driver.findElements (By.xpath ("html / body / a / img")). méret ();System.out.println (összesen);driver.switchTo (). defaultContent ();}

A "forloop" felett iterál az oldal összes iframe-je, és kiírja az "1" -et, ha a szükséges iframe-jünket megtaláltuk, a "0" -ot ad vissza.

Itt van a teljes kód a 3. lépésig:

public class IndexOfIframe {public static void main (String [] érvel) {WebDriver illesztőprogram = new FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();//driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);int méret = driver.findElements (By.tagName ("iframe")). size ();for (int i = 0; i <= méret; i ++) {driver.switchTo (). keret (i);int összesen = driver.findElements (By.xpath ("html / body / a / img")). méret ();System.out.println (összesen);driver.switchTo (). defaultContent ();}}}

Futtassa ezt a programot, és a kimenet az alábbiak szerint alakul:

Kimenet:

100000
Ellenőrizze a kimenetet, megtalálja a 0 és 1 sorokat.
  • Bárhol találja a kimenetben az '1' jelet, amely a keret indexe, amelyre az elemet betöltik.
  • Mivel az index az iframe kezdődik: „0”, ha megtaláljuk a 1 az 1 st hely, akkor az index értéke 0.
  • Ha a harmadik helyen 1-et talál , az index 2.
Kommentelhetjük a for ciklust, ha megtaláljuk az indexet. 4. lépés)
driver.switchTo (). keret (0); 
  • Miután megtalálta az elem indexét, a fenti paranccsal átválthatja a keretet.
  • driver.switchTo (). frame (a 3. lépésben található index);
5. lépés)
driver.findElement (By.xpath ("html / body / a / img")). kattintson ();
  • A fenti kód az iframe-re vagy az iframe elemére kattint.
Tehát a teljes kód az alábbi lenne:
public class SwitchToframe {public static void main (String [] args) dobja a NoSuchElementException {WebDriver illesztőprogram = new FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// int méret = driver.findElements (By.tagName ("iframe")). size ();/ * (int i = 0; i <= méret; i ++) {driver.switchTo (). keret (i);int összesen = driver.findElements (By.xpath ("html / body / a / img")). méret ();System.out.println (összesen);driver.switchTo (). defaultContent (); // visszakapcsolás az iframe-ről} * /// Megjegyezte a kódot az elem indexének megtalálásáhozdriver.switchTo (). keret (0); // Váltás a keretreSystem.out.println ("******** Átváltunk az iframe-re *******");driver.findElement (By.xpath ("html / body / a / img")). kattintson ();// Kattintson az elemre a Reklám szerintSystem.out.println ("********* Befejeztük ***************");}}
Kimenet: A böngésző a fenti iframe-et tartalmazó oldalra navigál, és az iframe-re kattint.

A beágyazott keretek fogalma (keretek a keretekben):

Tegyük fel, hogy két képkocka van egymáson belül, amint az az alábbi képen látható, és követelményünk a szöveg nyomtatása a külső keretbe és a belső keretbe. Beágyazott keretek esetén
  • Eleinte az iframe indexével vagy ID-jével kell a külső keretre váltanunk
  • Amint áttérünk a külső keretre, megtalálhatjuk az iframe-ek összes számát a külső keretben, és
  • A belső keretre bármelyik ismert módszerrel átválthatunk.
Miközben kilépünk a keretből, ugyanabban a sorrendben kell kilépnünk, mint amilyenbe először a belső, majd a külső keretből léptünk be.
Beágyazott iFrames a Selenium WebDriver programban

A fenti beágyazott keret HTML kódja az alábbiakban látható.

A fenti HTML-kód világosan megmagyarázza az iframe taget (zöld színnel kiemelve) egy másik iframe tagen belül, jelezve a beágyazott iframe-ek meglétét.

Az alábbiakban bemutatjuk a külső keretre váltás és a szöveg külső keretekre történő nyomtatásának lépéseit: 1. lépés

WebDriver illesztőprogram = new FirefoxDriver ();driver.get ("Url");driver.manage (). window (). maximize ();driver.manage (). timeouts (). implicitlyWait (2, TimeUnit.SECONDS);int méret = driver.findElements (By.tagName ("iframe")). size ();System.out.println ("Összes képkocka -" + méret);// kinyomtatja a keretek teljes számátdriver.switchTo (). keret (0); // A külső keret átkapcsolásaSystem.out.println (driver.findElement (By.xpath ("a külső elem xpath-ja")). GetText ()); 
  • Váltson a külső keretre.
  • A szöveget a külső keretre nyomtatja.

Amint a külső keretre váltunk, tudnunk kell, hogy van-e belső keret a külső kereten belül

2. lépés)

size = driver.findElements (By.tagName ("iframe")). size ();// kinyomtatja a keretek teljes számát a külső kereten belülSystem.out.println ("Összes képkocka -" + méret);
  • Megkeresi a külső kereten belüli iframe-ek teljes számát.
  • Ha a méretet „0” -nak találták, akkor a kereten belül nincs belső keret.
3. lépés)
driver.switchTo (). keret (0); // Váltás belső keretreSystem.out.println (driver.findElement (By.xpath ("a belső elem xpath-je")). GetText ());
  • Váltson a belső keretre
  • Kinyomtatja a szöveget a belső keretre.
Itt van a teljes kód:
public class FramesInsideFrames {public static void main (String [] érvel) {WebDriver illesztőprogram = new FirefoxDriver ();driver.get ("Url");driver.manage (). window (). maximize ();driver.manage (). timeouts (). implicitlyWait (2, TimeUnit.SECONDS);int méret = driver.findElements (By.tagName ("iframe")). size ();System.out.println ("Összes képkocka -" + méret);// kinyomtatja a keretek teljes számátdriver.switchTo (). keret (0); // A külső keret átkapcsolásaSystem.out.println (driver.findElement (By.xpath ("a külső elem xpath-ja")). GetText ());// A szöveg kinyomtatása a külső keretbesize = driver.findElements (By.tagName ("iframe")). size ();// kinyomtatja a keretek teljes számát a külső kereten belülSystem.out.println ("Összes képkocka -" + méret);driver.switchTo (). keret (0); // Váltás belső keretreSystem.out.println (driver.findElement (By.xpath ("a belső elem xpath-je")). GetText ());// A szöveg nyomtatása belső keretbedriver.switchTo (). defaultContent ();}}
Kimenet : A fenti kód kimenete kinyomtatja a szöveget a belső keretben és a külső keretben.

érdekes cikkek...