iFrame v selenovom webdriveri
iFrame v selenovom webovom ovládači je webová stránka alebo vložený rámec, ktorý je vložený do inej webovej stránky alebo dokumentu HTML vloženého do iného dokumentu HTML. Iframe sa často používa na pridanie obsahu z iných zdrojov, napríklad z reklamy, na webovú stránku. Prvok iframe je definovaný značkou < iframe >.
V tomto výučbe sa dozviete -
- Ako identifikovať iframe:
- Ako prepínať prvky v prvkoch iframe pomocou príkazov webového ovládača:
- Koncept vnorených rámov (rámy vo vnútri rámov):
Ako identifikovať iframe:
Nemôžeme detekovať rámce iba tak, že uvidíme stránku alebo skontrolujeme Firebug.
Sledujte nasledujúci obrázok, pričom zobrazená reklama je iframe, nemôžeme ju nájsť alebo rozpoznať iba kontrolou pomocou nástroja Firebug. Otázkou teda je, ako môžete identifikovať iframe?

Rámy v seléne môžeme identifikovať pomocou nižšie uvedených metód:
- Kliknite pravým tlačidlom myši na prvok. Ak nájdete možnosť ako „Tento rám“, jedná sa o rám iframe. (Prečítajte si vyššie uvedený diagram.)
- Kliknite pravým tlačidlom myši na stránku a potom kliknite na položku „Zobraziť zdrojový kód stránky“ a vyhľadajte výraz „iframe“. Ak nájdete akýkoľvek názov značky s prvkom „iframe“, znamená to povedať, že ide o stránku pozostávajúcu z prvku iframe.
Vo vyššie uvedenom diagrame vidíte, že možnosť „ Tento rámec “ je k dispozícii po kliknutí pravým tlačidlom myši, takže sme si teraz istí, že ide o iframe.
Celkový úryvok iframe môžeme zistiť dokonca pomocou útržku kódu nižšie.
Int size = driver.findElements (By.tagName ("iframe")). Size ();
Ako prepínať prvky v prvkoch iframe pomocou príkazov webového ovládača:
V zásade môžeme prepínať prvky a manipulovať s rámami v seléne pomocou 3 spôsobov.
- Podľa indexu
- Podľa mena alebo ID
- Webovým prvkom
Prepnúť na snímku indexom:
Index je jedným z atribútov spracovania rámu v seléne, cez ktorý k nemu môžeme prepnúť.
Index prvku iframe začína „0“.
Predpokladajme, že ak je na stránke 100 snímok, môžeme pomocou indexu prepnúť na snímku v seléne.
- driver.switchTo (). rám (0);
- driver.switchTo (). rám (1);
Prepnúť na rám podľa mena alebo ID:
Názov a ID sú atribúty pre spracovanie rámcov v seléne, cez ktoré môžeme prepnúť na iframe.
- driver.switchTo (). frame ("iframe1");
- driver.switchTo (). frame ("id prvku");
Príklad prechodu na iframe prostredníctvom ID:
Vezmime si príklad na prepnutie rámu na seléne zobrazenom na obrázku nižšie. Našou požiadavkou je kliknúť na iframe.
K tomuto prvku iframe môžeme získať prístup prostredníctvom tejto adresy URL uvedenej nižšie: http: //demo.guru99.com/test/guru99home/
Nie je možné kliknúť na iframe priamo cez XPath, pretože ide o iframe. Najprv musíme prepnúť na rám a potom môžeme kliknúť pomocou xpath.
Krok 1)
Ovládač WebDriver = nový FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();
- Inicializujeme ovládač Firefox.
- Prejdite na web „guru99“, ktorý pozostáva z prvku iframe.
- Maximalizovalo okno.
Krok 2)
driver.switchTo (). frame ("a077aa5e");
- V tomto kroku musíme zistiť ID iframe kontrolou cez Firebug.
- Potom prepnite na iframe cez ID.
Krok 3)
driver.findElement (By.xpath ("html / body / a / img")). click ();
- Tu musíme zistiť xpath prvku, na ktorý sa má kliknúť.
- Kliknite na prvok pomocou vyššie uvedeného príkazu webového ovládača.
Tu je kompletný kód:
verejná trieda SwitchToFrame_ID {public static void main (String [] args) {Ovládač WebDriver = nový FirefoxDriver (); // prejde do Prehliadačadriver.get ("http://demo.guru99.com/test/guru99home/");// prejde na stránku pozostávajúcu z prvku iframedriver.manage (). window (). maximize ();driver.switchTo (). frame ("a077aa5e"); // prepnutie rámca podľa IDSystem.out.println ("******** Prechádzame na iframe *******");driver.findElement (By.xpath ("html / body / a / img")). click ();// Klikne na iframeSystem.out.println ("********* Hotovo ***************");}}
Výkon:
Prehliadač prejde na stránku pozostávajúcu z vyššie uvedeného prvku iframe a klikne na tento prvok.
Prepnúť na rámec pomocou webového prvku:
Pomocou webového prvku môžeme dokonca prejsť na iframe.
- driver.switchTo (). frame (WebElement);
Ako prepnúť späť na hlavný rám
Musíme vyjsť z iframe.
Ak sa chcete vrátiť späť do nadradeného rámca, môžete použiť buď switchTo (). ParentFrame (), alebo ak sa chcete vrátiť späť do hlavného (alebo väčšiny nadradených) rámcov, môžete použiť switchTo (). DefaultContent ();
driver.switchTo (). parentFrame ();driver.switchTo (). defaultContent ();
Ako prepnúť rám, keď NEMÔŽEME prepnúť pomocou ID alebo webového prvku:
Predpokladajme, že ak je na stránke 100 snímok a nie je k dispozícii žiadne ID, v tomto prípade jednoducho nevieme, z ktorého prvku sa vyžaduje požadovaný prvok (je to v prípade, že nepoznáme index snímky). tiež).
Riešením vyššie uvedeného problému je, že musíme nájsť index iframe, cez ktorý sa element načítava, a potom musíme prejsť na iframe cez index.
Ďalej sú uvedené kroky na vyhľadanie indexu rámca, ktorým sa načítava prvok, pomocou fragmentu kódu nižšie
Krok 1)
Ovládač WebDriver = nový FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();
- Inicializujte ovládač Firefox.
- Prejdite na web „guru99“, ktorý pozostáva z prvku iframe.
- Maximalizovalo okno.
Krok 2)
int size = driver.findElements (By.tagName ("iframe")). size ();
- Vyššie uvedený kód vyhľadáva celkový počet prvkov iframe nachádzajúcich sa na stránke pomocou názvu značky „iframe“.
Krok 3)
Cieľom tohto kroku by bolo zistiť index iframe.
pre (int i = 0; i <= veľkosť; i ++) {driver.switchTo (). rám (i);int total = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (celkom);driver.switchTo (). defaultContent ();}
Vyššie ako „forloop“ iteruje všetky prvky iframe na stránke a vytlačí „1“, ak bol nájdený požadovaný iframe, inak vráti „0“.
Tu je kompletný kód až do kroku 3:
verejná trieda IndexOfIframe {public static void main (String [] args) {Ovládač WebDriver = nový FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();//driver.manage().timeouts().implicitneWait(100, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();pre (int i = 0; i <= veľkosť; i ++) {driver.switchTo (). rám (i);int total = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (celkom);driver.switchTo (). defaultContent ();}}}
Vykonajte tento program a výstup bude nasledovný:
Výkon:
100000Overte výstup, nájdete rady 0 a 1.
- Kdekoľvek nájdete na výstupe „1“, je to index Frame, pomocou ktorého sa načítava element.
- Pretože index iframe začína na „0“, ak nájdete 1 na 1. mieste, potom je index 0.
- Ak nájdete 1 na 3. mieste, index je 2.
driver.switchTo (). rám (0);
- Keď nájdete index prvku, môžete prepnúť rámec pomocou vyššie uvedeného príkazu.
- driver.switchTo (). rám (index nájdený v kroku 3);
driver.findElement (By.xpath ("html / body / a / img")). click ();
- Vyššie uvedený kód klikne na iframe alebo prvok v iframe.
verejná trieda SwitchToframe {public static void main (String [] args) hodí NoSuchElementException {Ovládač WebDriver = nový FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// int size = driver.findElements (By.tagName ("iframe")). size ();/ * pre (int i = 0; i <= veľkosť; i ++) {driver.switchTo (). rám (i);int total = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (celkom);driver.switchTo (). defaultContent (); // prepnutie späť z iframe} * /// Komentoval kód na vyhľadanie indexu prvkudriver.switchTo (). rám (0); // Prepnutie na rámSystem.out.println ("******** Sme prepnutí na iframe *******");driver.findElement (By.xpath ("html / body / a / img")). click ();// Kliknutie na prvok v súlade s reklamouSystem.out.println ("********* Hotovo ***************");}}Výstup: Prehliadač prejde na stránku pozostávajúcu z prvku iframe vyššie a klikne na prvok iframe.
Koncept vnorených rámov (rámy vo vnútri rámov):
Predpokladajme, že vo vnútri sú dva rámčeky, ako je to znázornené na obrázku nižšie, a našou požiadavkou je tlač textu vo vonkajšom a vnútornom ráme. V prípade vnorených rámov- Najprv musíme prepnúť na vonkajší rámec buď indexom alebo ID iframe
- Po prepnutí na vonkajší rámček môžeme nájsť celkový počet prvkov iframe vo vonkajšom ráme a
- Na vnútorný rámik môžeme prepnúť ktoroukoľvek zo známych metód.

Html kód pre vyššie vnorený rámec je uvedený nižšie.
Vyššie uvedený kód HTML jasne vysvetľuje značku iframe (zvýraznená zelenou farbou) v rámci inej značky iframe, čo naznačuje prítomnosť vnorených prvkov iframe.
Ďalej sú uvedené kroky na prepnutie na vonkajší rám a tlač textu na vonkajšie rámce: Krok 1)
Ovládač WebDriver = nový 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 ("Celkový počet rámcov -" + veľkosť);// vypíše celkový počet snímokdriver.switchTo (). rám (0); // Prepnutie vonkajšieho rámuSystem.out.println (driver.findElement (By.xpath ("xpath vonkajšieho prvku")). GetText ());
- Prepnite na vonkajší rám.
- Vytlačí text na vonkajší rám.
Len čo prepneme na vonkajší rám, mali by sme vedieť, či sa vo vnútri vonkajšieho rámu nachádza nejaký vnútorný rám
Krok 2)
size = driver.findElements (By.tagName ("iframe")). size ();// vypíše celkový počet rámcov vo vonkajšom rámeSystem.out.println ("Celkový počet rámcov -" + veľkosť);
- Nájde celkový počet prvkov iframe vo vonkajšom ráme.
- Ak bola veľkosť nájdená „0“, potom vo vnútri rámu nie je žiadny vnútorný rám.
driver.switchTo (). rám (0); // Prepnutie na vnútorný rámSystem.out.println (driver.findElement (By.xpath ("xpath vnútorného prvku")). GetText ());
- Prepnite na vnútorný rám
- Vytlačí text na vnútornom ráme.
verejná trieda FramesInsideFrames {public static void main (String [] args) {Ovládač WebDriver = nový 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 ("Celkový počet rámcov -" + veľkosť);// vypíše celkový počet snímokdriver.switchTo (). rám (0); // Prepnutie vonkajšieho rámuSystem.out.println (driver.findElement (By.xpath ("xpath vonkajšieho prvku")). GetText ());// Tlač textu vo vonkajšom rámesize = driver.findElements (By.tagName ("iframe")). size ();// vypíše celkový počet rámcov vo vonkajšom rámeSystem.out.println ("Celkový počet rámcov -" + veľkosť);driver.switchTo (). rám (0); // Prepnutie na vnútorný rámSystem.out.println (driver.findElement (By.xpath ("xpath vnútorného prvku")). GetText ());// Tlač textu vo vnútornom rámedriver.switchTo (). defaultContent ();}}Výstup : Výstupom vyššie uvedeného kódu by sa vytlačil text vo vnútornom a vonkajšom rámci.