iFrame v Selenium Webdriver
iFrame v Selenium Webdriver je webová stránka nebo vložený rámec, který je vložen do jiné webové stránky nebo dokumentu HTML vloženého do jiného dokumentu HTML. Iframe se často používá k přidání obsahu z jiných zdrojů, jako je reklama, na webovou stránku. Iframe je definován značkou < iframe >.
V tomto výukovém programu se naučíte -
- Jak identifikovat iframe:
- Jak přepínat prvky v prvcích iframe pomocí příkazů webového ovladače:
- Koncept vnořených rámů (rámů uvnitř rámů):
Jak identifikovat iframe:
Rámečky nemůžeme detekovat pouhým zobrazením stránky nebo kontrolou Firebug.
Sledujte níže uvedený obrázek, zobrazovaná reklama je iframe, nemůžeme ji najít ani rozpoznat pouhou kontrolou pomocí Firebug. Otázkou tedy je, jak můžete identifikovat iframe?
Můžeme identifikovat snímky v selenu pomocí níže uvedených metod:
- Klikněte pravým tlačítkem na prvek. Pokud najdete možnost jako „Tento snímek“, jedná se o prvek iframe. (Viz výše uvedený diagram)
- Klikněte pravým tlačítkem na stránku a klikněte na „Zobrazit zdroj stránky“ a Hledat pomocí „iframe“, pokud můžete najít jakýkoli název značky s „iframe“, znamená to říci stránku skládající se z iframe.
Ve výše uvedeném diagramu vidíte, že možnost „ Tento rámeček “ je k dispozici po kliknutí pravým tlačítkem, takže jsme si nyní jisti, že se jedná o iframe.
Můžeme dokonce identifikovat celkový počet prvků iframe pomocí níže uvedeného fragmentu.
Int size = driver.findElements (By.tagName ("iframe")). Size ();
Jak přepínat prvky v prvcích iframe pomocí příkazů webového ovladače:
V zásadě můžeme přepínat prvky a zpracovávat rámy v selenu pomocí 3 způsobů.
- Podle indexu
- Podle jména nebo ID
- Webovým prvkem
Přepnout na snímek indexem:
Index je jedním z atributů zpracování snímků v selenu, pomocí kterého na něj můžeme přejít.
Index iframe začíná na „0“.
Předpokládejme, že pokud je na stránce 100 snímků, můžeme přepnout na snímek v selenu pomocí indexu.
- driver.switchTo (). frame (0);
- driver.switchTo (). frame (1);
Přepnout do rámečku podle jména nebo ID:
Název a ID jsou atributy pro zpracování rámců v selenu, pomocí kterých můžeme přepnout na iframe.
- driver.switchTo (). frame ("iframe1");
- driver.switchTo (). frame ("id prvku");
Příklad přechodu na iframe prostřednictvím ID:
Vezměme si příklad pro přepnutí rámečku selenu zobrazeného na obrázku níže. Naším požadavkem je kliknout na iframe.
K tomuto iframe můžeme přistupovat prostřednictvím níže uvedené adresy URL: http: //demo.guru99.com/test/guru99home/
Je nemožné kliknout na iframe přímo přes XPath, protože se jedná o iframe. Nejprve musíme přepnout na rámec a potom můžeme kliknout pomocí xpath.
Krok 1)
Ovladač WebDriver = nový FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();
- Inicializujeme ovladač Firefoxu.
- Přejděte na web „guru99“, který se skládá z prvku iframe.
- Maximalizoval okno.
Krok 2)
driver.switchTo (). frame ("a077aa5e");
- V tomto kroku musíme zjistit ID iframe kontrolou prostřednictvím Firebug.
- Poté přepněte na iframe pomocí ID.
Krok 3)
driver.findElement (By.xpath ("html / body / a / img")). click ();
- Zde musíme zjistit xpath prvku, na který se má kliknout.
- Klikněte na prvek pomocí výše uvedeného příkazu webového ovladače.
Zde je kompletní kód:
veřejná třída SwitchToFrame_ID {public static void main (String [] args) {Ovladač WebDriver = nový FirefoxDriver (); // přejde do prohlížečedriver.get ("http://demo.guru99.com/test/guru99home/");// přejde na stránku skládající se z iframedriver.manage (). window (). maximize ();driver.switchTo (). frame ("a077aa5e"); // přepnutí rámečku podle IDSystem.out.println ("******** Jsme přepnuti na iframe *******");driver.findElement (By.xpath ("html / body / a / img")). click ();// Klikne na iframeSystem.out.println ("********* Hotovo ***************");}}
Výstup:
Prohlížeč přejde na stránku skládající se z výše uvedeného iframe a klikne na iframe.
Přepnout na rámec pomocí webového prvku:
Můžeme dokonce přepnout na iframe pomocí webového prvku.
- driver.switchTo (). frame (WebElement);
Jak přepnout zpět na hlavní snímek
Musíme vyjít z iframe.
Chcete-li se vrátit zpět do nadřazeného rámce, můžete buď použít switchTo (). ParentFrame (), nebo pokud se chcete vrátit zpět do hlavního (nebo většiny nadřazeného) rámce, můžete použít switchTo (). DefaultContent ();
driver.switchTo (). parentFrame ();driver.switchTo (). defaultContent ();
Jak přepnout rám, pokud NEMŮŽEME přepnout pomocí ID nebo webového prvku:
Předpokládejme, že pokud na stránce je 100 snímků a není k dispozici žádné ID, v tomto případě prostě nevíme, ze kterého prvku, který je vyžadován iframe, se načítá (v případě, že neznáme index rámce taky).
Řešením výše uvedeného problému je, že musíme najít index iframe, kterým je prvek načítán, a pak musíme přepnout na iframe prostřednictvím indexu.
Níže jsou uvedeny kroky pro vyhledání indexu Frame, pomocí kterého se prvek načítá pomocí fragmentu níže
Krok 1)
Ovladač WebDriver = nový FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();
- Inicializujte ovladač Firefoxu.
- Přejděte na web „guru99“, který tvoří iframe.
- Maximalizoval okno.
Krok 2)
int size = driver.findElements (By.tagName ("iframe")). size ();
- Výše uvedený kód vyhledá celkový počet prvků iframe přítomných na stránce pomocí názvu značky „iframe“.
Krok 3)
Cílem tohoto kroku by bylo zjistit index iframe.
pro (int i = 0; i <= velikost; i ++) {driver.switchTo (). frame (i);int total = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (celkem);driver.switchTo (). defaultContent ();}
Nad „forloop“ iteruje všechny prvky iframe na stránce a vytiskne „1“, pokud byl nalezen požadovaný iframe, jinak vrátí „0“.
Zde je kompletní kód až do kroku 3:
veřejná třída IndexOfIframe {public static void main (String [] args) {Ovladač WebDriver = nový FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();//driver.manage().timeouts().implicitněWait(100, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();pro (int i = 0; i <= velikost; i ++) {driver.switchTo (). frame (i);int total = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (celkem);driver.switchTo (). defaultContent ();}}}
Spusťte tento program a výstup by vypadal níže:
Výstup:
100000Ověřte výstup, najdete řadu 0 a 1.
- Kdekoli najdete na výstupu „1“, což je index Frame, pomocí kterého se prvek načítá.
- Jelikož index iframe začíná na „0“, pokud najdete 1 na 1. místě, pak je index 0.
- Pokud zjistíte, že 1 v 3 rd místo, index je 2.
driver.switchTo (). frame (0);
- Jakmile najdete index prvku, můžete přepnout rámec pomocí výše uvedeného příkazu.
- driver.switchTo (). frame (index nalezený v kroku 3);
driver.findElement (By.xpath ("html / body / a / img")). click ();
- Výše uvedený kód klikne na iframe nebo element v iframe.
veřejná třída SwitchToframe {public static void main (String [] args) vyvolá NoSuchElementException {Ovladač WebDriver = nový FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// int size = driver.findElements (By.tagName ("iframe")). size ();/ * pro (int i = 0; i <= velikost; i ++) {driver.switchTo (). frame (i);int total = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (celkem);driver.switchTo (). defaultContent (); // přepnutí zpět z iframe} * /// Komentoval kód pro nalezení indexu prvkudriver.switchTo (). frame (0); // Přepnutí na rámečekSystem.out.println ("******** Jsme přepnuti na iframe *******");driver.findElement (By.xpath ("html / body / a / img")). click ();// Kliknutí na prvek v souladu s reklamouSystem.out.println ("********* Hotovo ***************");}}Výstup: Prohlížeč přejde na stránku skládající se z výše uvedeného iframe a klikne na iframe.
Koncept vnořených rámů (rámů uvnitř rámů):
Předpokládejme, že uvnitř jsou dva rámečky, jak je znázorněno na následujícím obrázku, a naším požadavkem je tisk textu ve vnějším a vnitřním rámečku. V případě vnořených rámců- Nejprve musíme přepnout na vnější snímek buď indexem nebo ID iframe
- Jakmile přepneme na vnější rámeček, můžeme najít celkový počet iframe uvnitř vnějšího rámečku, a
- Můžeme přepnout na vnitřní rám jakoukoli ze známých metod.
Html kód pro výše vnořený rámec je uveden níže.
Výše uvedený kód HTML jasně vysvětluje značku iframe (zvýrazněnou zeleně) v jiné značce iframe, což naznačuje přítomnost vnořených prvků iframe.
Níže jsou uvedeny kroky pro přepnutí na vnější rámeček a tisk textu na vnější rámečky: Krok 1)
Ovladač 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 ("Celkem snímků -" + velikost);// vypíše celkový počet snímkůdriver.switchTo (). frame (0); // Přepínání vnějšího rámuSystem.out.println (driver.findElement (By.xpath ("xpath vnějšího prvku")). GetText ());
- Přepněte na vnější rám.
- Vytiskne text na vnějším rámečku.
Jakmile přepneme na vnější rámeček, měli bychom vědět, zda je uvnitř vnějšího rámečku nějaký vnitřní rámeček
Krok 2)
size = driver.findElements (By.tagName ("iframe")). size ();// vytiskne celkový počet rámců uvnitř vnějšího rámečkuSystem.out.println ("Celkem snímků -" + velikost);
- Najde celkový počet prvků iframe uvnitř vnějšího rámečku.
- Pokud byla velikost nalezena '0', uvnitř rámečku není žádný vnitřní rám.
driver.switchTo (). frame (0); // Přepínání na vnitřní rámSystem.out.println (driver.findElement (By.xpath ("xpath vnitřního prvku")). GetText ());
- Přepněte na vnitřní rám
- Vytiskne text na vnitřní rámeček.
public class FramesInsideFrames {public static void main (String [] args) {Ovladač 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 ("Celkem snímků -" + velikost);// vypíše celkový počet snímkůdriver.switchTo (). frame (0); // Přepínání vnějšího rámuSystem.out.println (driver.findElement (By.xpath ("xpath vnějšího prvku")). GetText ());// Tisk textu ve vnějším rámečkusize = driver.findElements (By.tagName ("iframe")). size ();// vytiskne celkový počet rámců uvnitř vnějšího rámečkuSystem.out.println ("Celkem snímků -" + velikost);driver.switchTo (). frame (0); // Přepínání na vnitřní rámSystem.out.println (driver.findElement (By.xpath ("xpath vnitřního prvku")). GetText ());// Tisk textu do vnitřního rámečkudriver.switchTo (). defaultContent ();}}Výstup : Výstup výše uvedeného kódu vytiskne text ve vnitřním a vnějším rámci.