Hogyan kell kezelni az iFrame-eket Selenium Webdriver: switchTo()
iFrame be Selenium Webdriver
iFrame be Selenium Webdriver egy weboldal vagy egy soron belüli keret, amely egy másik weboldalba van beágyazva, vagy egy másik HTML dokumentumba ágyazott HTML dokumentumba. Az iframe-et gyakran használják más forrásokból származó tartalom, például hirdetés hozzáadására egy weboldalhoz. Az iframe-et aiframe> címke.
Hogyan lehet azonosítani az iFrame-et
Nem tudjuk észlelni a kereteket az oldal megtekintésével vagy a Firebug vizsgálatával.
Figyelje meg az alábbi képet, a megjelenített hirdetés egy Iframe, ezt nem tudjuk megtalálni vagy felismerni, ha csak Firebug segítségével ellenőrizzük. Tehát a kérdés az, hogyan lehet azonosítani az iframe-et?

Meg tudjuk azonosítani a kereteket Selenium az alábbi módszerekkel:
- Kattintson a jobb gombbal az elemre. Ha megtalálja a „Ez a keret” opciót, akkor ez egy iframe. (Kérjük, tekintse meg a fenti ábrát)
- Kattintson a jobb gombbal az oldalra, majd kattintson az 'Oldalforrás megtekintése' és Keresés az 'iframe'-mel. Ha talál bármilyen címkenevet az 'iframe'-mel, akkor az azt jelenti, hogy az oldal egy iframe-ből áll.
A fenti diagramon láthatja, hogy "Ez a keret' opció elérhető jobb kattintással, így most már biztosak vagyunk abban, hogy iframe-ről van szó.
Még az iframe-ek teljes számát is azonosíthatjuk az alábbi kódrészlet használatával.
Int size = driver.findElements(By.tagName("iframe")).size();
Hogyan kezeljük a kereteket Selenium a WebDriver parancsok használatával
Alapvetően át tudjuk váltani az elemeket és kezelhetjük a kereteket Selenium 3 módot használva.
- Index szerint
- Név vagy Id
- A Web Element által
1. módszer: Váltás a keretre index szerint
Az index a keretkezelés egyik attribútuma Selenium amelyen keresztül át tudunk váltani arra.
Az iframe indexe „0”-val kezdődik.
Tegyük fel, hogy ha 100 képkocka van az oldalon, akkor átválthatunk bekeretezésre Selenium index használatával.
driver.switchTo().frame(0);
driver.switchTo().frame(1);
2. módszer: Váltson a keretre név vagy azonosító alapján
A név és az azonosító a keretek kezelésének attribútumai Selenium amelyen keresztül át tudunk váltani az iframe-re.
driver.switchTo().frame("iframe1");
driver.switchTo().frame("id of the element");
Példa iframe-re való váltásra azonosítón keresztül:
a kerethez a Web Element által
Ezt az iframe-et az alábbi URL-en keresztül érhetjük el: https://demo.guru99.com/test/guru99home/
Az iframe-re közvetlenül nem lehet kattintani XPath mivel ez egy iframe. Először át kell váltanunk a keretre, majd az xpath segítségével kattinthatunk.
Step 1)
WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); driver.manage().window().maximize();
- Inicializáljuk a Firefox sofőr.
- Keresse meg a „guru99” webhelyet, amely az iframe-ből áll.
- Maximalizálta az ablakot.
Step 2)
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.
- Ezután váltson át az iframe-re az azonosítón keresztül.
Step 3)
driver.findElement(By.xpath("html/body/a/img")).click();
- Itt meg kell találnunk a kattintandó elem xpath-át.
- Kattintson az elemre a fent látható web-illesztőprogram-paranccsal.
Itt a teljes kód:
public class SwitchToFrame_ID { public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); //navigates to the Browser driver.get("https://demo.guru99.com/test/guru99home/"); // navigates to the page consisting an iframe driver.manage().window().maximize(); driver.switchTo().frame("a077aa5e"); //switching the frame by ID System.out.println("********We are switch to the iframe*******"); driver.findElement(By.xpath("html/body/a/img")).click(); //Clicks the iframe System.out.println("*********We are done***************"); } }
output:
A böngésző a fenti iframe-et tartalmazó oldalra navigál, és rákattint az iframe-re.
3. módszer: Váltson a keretre a Web Element segítségével
Akár web elem használatával is válthatunk az iframe-re.
driver.switchTo().frame(WebElement);
Hogyan válthat vissza a főkeretre
Ki kell lépnünk az iframe-ből.
A szülő kerethez való visszalépéshez használhatja a switchTo().parentFrame() parancsot, vagy ha vissza szeretne térni a fő (vagy a legtöbb szülő) kerethez, akkor a switchTo().defaultContent();
driver.switchTo().parentFrame(); driver.switchTo().defaultContent();
Hogyan válthatunk át a keretre, ha NEM LEHET váltani 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 nem tudjuk, hogy melyik iframe elemből töltődik 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 az indexen keresztül át kell váltanunk az iframe-re.
Az alábbiakban bemutatjuk annak a keretnek az indexének megtalálásának lépéseit, amelyen keresztül az elem betöltődik az alábbi részlet használatával
Step 1)
WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); driver.manage().window().maximize();
- Inicializálja a Firefox sofőr.
- Keresse meg a „guru99” webhelyet, amely az iframe-et tartalmazza.
- Maximalizálta az ablakot.
Step 2)
int size = driver.findElements(By.tagName("iframe")).size();
- A fenti kód megkeresi az oldalon belül található iframe-ek teljes számát az „iframe” címkenév használatával.
Step 3)
Cél a ez a lépés az iframe indexének megállapítása.
for(int i=0; i<=size; i++){ driver.switchTo().frame(i); int total=driver.findElements(By.xpath("html/body/a/img")).size(); System.out.println(total); driver.switchTo().defaultContent();}
A „forloop” fölött az oldal összes iframe-jét iterálja, és „1”-et ír ki, ha a szükséges iframe-et megtalálták, ellenkező esetben „0”-t ad vissza.
Íme a teljes kód a 3. lépésig:
public class IndexOfIframe { public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); driver.manage().window().maximize(); //driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS); int size = driver.findElements(By.tagName("iframe")).size(); for(int i=0; i<=size; i++){ driver.switchTo().frame(i); int total=driver.findElements(By.xpath("html/body/a/img")).size(); System.out.println(total); driver.switchTo().defaultContent();}}}
Futtassa ezt a programot, és a kimenet a következőképpen néz ki:
output:
1 0 0 0 0 0
Ellenőrizd a kimenetet, megtalálod a 0 és 1 sorozatát.
- Ahol megtalálja az „1”-et a kimenetben, ez annak a keretnek az indexe, amellyel az elem betöltődik.
- Mivel az iframe indexe „0”-val kezdődik, ha az 1-et megtalálja az 1-bensthelyen, akkor az index 0.
- Ha 1 a 3-ból találrd helyen, az index 2.
A for ciklust kommentálhatjuk, ha megtaláltuk az indexet.
Step 4)
driver.switchTo().frame(0);
- Ha megtalálta az elem indexét, a fenti paranccsal válthat a keret között.
- driver.switchTo().frame(index a 3. lépésből található);
Step 5)
driver.findElement(By.xpath("html/body/a/img")).click();
- A fenti kód rákattint az iframe-re vagy az iframe elemre.
Tehát a teljes kód így néz ki:
public class SwitchToframe { public static void main(String[] args) throws NoSuchElementException{ WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); driver.manage().window().maximize(); //int size = driver.findElements(By.tagName("iframe")).size(); /*for(int i=0; i<=size; i++){ driver.switchTo().frame(i); int total=driver.findElements(By.xpath("html/body/a/img")).size(); System.out.println(total); driver.switchTo().defaultContent(); //switching back from the iframe }*/ //Commented the code for finding the index of the element driver.switchTo().frame(0); //Switching to the frame System.out.println("********We are switched to the iframe*******"); driver.findElement(By.xpath("html/body/a/img")).click(); //Clicking the element in line with Advertisement System.out.println("*********We are done***************"); } }
output:
A böngésző a fenti iframe-et tartalmazó oldalra navigál, és rákattint az iframe-re.
Beágyazott keretek koncepciója Selenium
Tételezzük fel, hogy két keret van egymásban, mint az alábbi képen látható, és követelményünk a szöveg kinyomtatása a külső és a belső keretben.
Beágyazott keretek esetén
- Először a külső keretre kell váltanunk az iframe indexe vagy azonosítója alapján
- Miután átváltunk a külső keretre, megtudhatjuk a külső kereten belüli iframe-ek teljes számát, és
- A belső keretre válthatunk bármelyik ismert módszerrel.
A keretből való kilépés közben ugyanabban a sorrendben kell kilépnünk, ahogyan először a belső, majd a külső keretből beléptünk.
A fenti beágyazott keret HTML-kódja az alábbiak szerint látható.
A fenti HTML-kód egyértelműen elmagyarázza az iframe címkét (zölddel kiemelve) egy másik iframe címkén belül, jelezve a beágyazott iframe-ek jelenlétét.
Az alábbiakban bemutatjuk a külső keretre váltás és a szöveg külső keretekre való nyomtatásának lépéseit:
Step 1)
WebDriver driver=new FirefoxDriver(); driver.get("Url"); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS); int size = driver.findElements(By.tagName("iframe")).size(); System.out.println("Total Frames --" + size); // prints the total number of frames driver.switchTo().frame(0); // Switching the Outer Frame System.out.println (driver.findElement(By.xpath("xpath of the outer element ")).getText());
- Váltson a külső keretre.
- A szöveget a külső keretre nyomtatja.
Miután átváltunk a külső keretre, tudnunk kell, hogy van-e belső keret a külső kereten belül
Step 2)
size = driver.findElements(By.tagName("iframe")).size(); // prints the total number of frames inside outer frame System.out.println("Total Frames --" + size);
- Megkeresi a külső kereten belüli iframe-ek teljes számát.
- Ha a mérete '0', akkor nincs belső keret a kereten belül.
Step 3)
driver.switchTo().frame(0); // Switching to innerframe System.out.println(driver.findElement(By.xpath("xpath of the inner element ")).getText());
- Váltson a belső keretre
- A szöveget a belső keretre nyomtatja.
Itt a teljes kód:
public class FramesInsideFrames { public static void main(String[] args) { WebDriver driver=new FirefoxDriver(); driver.get("Url"); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS); int size = driver.findElements(By.tagName("iframe")).size(); System.out.println("Total Frames --" + size); // prints the total number of frames driver.switchTo().frame(0); // Switching the Outer Frame System.out.println (driver.findElement(By.xpath("xpath of the outer element ")).getText()); //Printing the text in outer frame size = driver.findElements(By.tagName("iframe")).size(); // prints the total number of frames inside outer frame System.out.println("Total Frames --" + size); driver.switchTo().frame(0); // Switching to innerframe System.out.println(driver.findElement(By.xpath("xpath of the inner element ")).getText()); //Printing the text in inner frame driver.switchTo().defaultContent(); } }
teljesítmény:
A fenti kód kimenete a belső és a külső keretben lévő szöveget nyomtatná ki.