iFrame in Selenium Webdriver
iFrame in Selenium Webdriver ist eine Webseite oder ein Inline-Frame, der in eine andere Webseite oder ein in ein anderes HTML-Dokument eingebettetes HTML-Dokument eingebettet ist. Der Iframe wird häufig verwendet, um Inhalte aus anderen Quellen wie eine Werbung zu einer Webseite hinzuzufügen. Der iframe wird mit dem < iframe > -Tag definiert.
In diesem Tutorial lernen Sie -
- So identifizieren Sie den Iframe:
- So schalten Sie die Elemente in iframes mithilfe von Web Driver-Befehlen um:
- Konzept verschachtelter Frames (Frames in Frames):
So identifizieren Sie den Iframe:
Wir können die Frames nicht erkennen, indem wir nur die Seite sehen oder Firebug untersuchen.
Beachten Sie das folgende Bild. Die angezeigte Werbung ist ein Iframe. Wir können dies nicht erkennen oder erkennen, wenn wir es nur mit Firebug überprüfen. Die Frage ist also, wie Sie den Iframe identifizieren können.

Wir können die Frames in Selen mit den unten angegebenen Methoden identifizieren:
- Klicken Sie mit der rechten Maustaste auf das Element. Wenn Sie die Option "Dieser Rahmen" finden, handelt es sich um einen Iframe. (Bitte beachten Sie das obige Diagramm.)
- Klicken Sie mit der rechten Maustaste auf die Seite und klicken Sie auf "Seitenquelle anzeigen" und suchen Sie mit dem "Iframe". Wenn Sie einen Tag-Namen mit dem "Iframe" finden, bedeutet dies, dass die Seite aus einem Iframe besteht.
Im obigen Diagramm sehen Sie, dass die Option " Dieser Frame " beim Klicken mit der rechten Maustaste verfügbar ist. Wir sind uns also sicher, dass es sich um einen Iframe handelt.
Wir können sogar die Gesamtzahl der Iframes anhand des folgenden Snippets identifizieren.
Int size = driver.findElements (By.tagName ("iframe")). Size ();
So schalten Sie die Elemente in iframes mithilfe von Web Driver-Befehlen um:
Grundsätzlich können wir die Elemente und Frames in Selen auf drei Arten umschalten.
- Nach Index
- Nach Name oder ID
- Nach Webelement
Wechseln Sie nach Index zum Frame:
Der Index ist eines der Attribute für die Frame-Behandlung in Selen, über die wir zu ihm wechseln können.
Der Index des Iframes beginnt mit '0'.
Angenommen, wenn die Seite 100 Frames enthält, können wir mithilfe des Index zu Frame in Selen wechseln.
- driver.switchTo (). frame (0);
- driver.switchTo (). frame (1);
Wechseln Sie nach Name oder ID zum Frame:
Name und ID sind Attribute für die Behandlung von Frames in Selenium, über die wir zum Iframe wechseln können.
- driver.switchTo (). frame ("iframe1");
- driver.switchTo (). frame ("ID des Elements");
Beispiel für den Wechsel zu iframe über ID:
Nehmen wir ein Beispiel zum Wechseln des Rahmens in Selen, das im folgenden Bild dargestellt ist. Wir müssen auf den Iframe klicken.
Wir können auf diesen Iframe über die folgende URL zugreifen: http: //demo.guru99.com/test/guru99home/
Es ist unmöglich, direkt über XPath auf iframe zu klicken, da es sich um einen iframe handelt. Zuerst müssen wir zum Frame wechseln und dann können wir mit xpath klicken.
Schritt 1)
WebDriver-Treiber = neuer FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maxim ();
- Wir initialisieren den Firefox-Treiber.
- Navigieren Sie zur Site "guru99", die aus dem Iframe besteht.
- Maximierte das Fenster.
Schritt 2)
driver.switchTo (). frame ("a077aa5e");
- In diesem Schritt müssen wir die ID des Iframes durch Inspektion durch Firebug herausfinden.
- Wechseln Sie dann über die ID zum Iframe.
Schritt 3)
driver.findElement (By.xpath ("html / body / a / img")). click ();
- Hier müssen wir den xpath des Elements herausfinden, auf das geklickt werden soll.
- Klicken Sie mit dem oben gezeigten Webtreiberbefehl auf das Element.
Hier ist der vollständige Code:
öffentliche Klasse SwitchToFrame_ID {public static void main (String [] args) {WebDriver-Treiber = neuer FirefoxDriver (); // navigiert zum Browserdriver.get ("http://demo.guru99.com/test/guru99home/");// navigiert zu der Seite, die aus einem Iframe bestehtdriver.manage (). window (). maxim ();driver.switchTo (). frame ("a077aa5e"); // Umschalten des Frames nach IDSystem.out.println ("******** Wir wechseln zum Iframe *******");driver.findElement (By.xpath ("html / body / a / img")). click ();// Klickt auf den IframeSystem.out.println ("********* Wir sind fertig ***************");}}}}
Ausgabe:
Der Browser navigiert zu der Seite, die aus dem obigen Iframe besteht, und klickt auf den Iframe.
Wechseln Sie per Webelement zum Frame:
Wir können sogar mit dem Webelement zum iframe wechseln.
- driver.switchTo (). frame (WebElement);
So wechseln Sie zurück zum Main Frame
Wir müssen aus dem Iframe herauskommen.
Um zum übergeordneten Frame zurückzukehren, können Sie entweder switchTo (). ParentFrame () verwenden. Wenn Sie zum Haupt- (oder den meisten übergeordneten) Frame zurückkehren möchten, können Sie switchTo (). DefaultContent () verwenden.
driver.switchTo (). parentFrame ();driver.switchTo (). defaultContent ();
So schalten Sie den Frame um, wenn Sie NICHT mit ID oder Web Element wechseln können:
Angenommen, die Seite enthält 100 Frames und es ist keine ID verfügbar. In diesem Fall wissen wir nur nicht, von welchem iframe-erforderlichen Element geladen wird (dies ist der Fall, wenn wir den Index des Frames nicht kennen ebenfalls).
Die Lösung für das oben genannte Problem besteht darin, dass wir den Index des Iframes finden müssen, über den das Element geladen wird, und dann über den Index zum Iframe wechseln müssen.
Im Folgenden finden Sie die Schritte zum Ermitteln des Index des Frames, mit dem das Element mithilfe des folgenden Snippets geladen wird
Schritt 1)
WebDriver-Treiber = neuer FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maxim ();
- Initialisieren Sie den Firefox-Treiber.
- Navigieren Sie zur Site "guru99", die aus dem Iframe besteht.
- Maximierte das Fenster.
Schritt 2)
int size = driver.findElements (By.tagName ("iframe")). size ();
- Der obige Code ermittelt die Gesamtzahl der auf der Seite vorhandenen Iframes unter Verwendung des Tagnamens 'Iframe'.
Schritt 3)
Ziel für diesen Schritt wäre es, den Index von iframe herauszufinden.
für (int i = 0; i <= Größe; i ++) {driver.switchTo (). frame (i);int total = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (gesamt);driver.switchTo (). defaultContent ();}
Über "forloop" werden alle Iframes auf der Seite iteriert und "1" ausgegeben, wenn unser erforderlicher Iframe gefunden wurde. Andernfalls wird "0" zurückgegeben.
Hier ist der vollständige Code bis Schritt 3:
öffentliche Klasse IndexOfIframe {public static void main (String [] args) {WebDriver-Treiber = neuer FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maxim ();//driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();für (int i = 0; i <= Größe; i ++) {driver.switchTo (). frame (i);int total = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (gesamt);driver.switchTo (). defaultContent ();}}}
Führen Sie dieses Programm aus und die Ausgabe würde wie folgt aussehen:
Ausgabe:
100000Überprüfen Sie die Ausgabe, Sie können die Reihe von Nullen und Einsen finden.
- Überall dort, wo Sie die '1' in der Ausgabe finden, ist dies der Index des Frames, mit dem das Element geladen wird.
- Da der Index des Iframes mit '0' beginnt, wenn Sie die 1 an erster Stelle finden, ist der Index 0.
- Wenn Sie 1 an dritter Stelle finden, ist der Index 2.
driver.switchTo (). frame (0);
- Sobald Sie den Index des Elements gefunden haben, können Sie den Frame mit dem obigen Befehl umschalten.
- driver.switchTo (). frame (Index aus Schritt 3);
driver.findElement (By.xpath ("html / body / a / img")). click ();
- Der obige Code klickt auf den Iframe oder das Element im Iframe.
öffentliche Klasse SwitchToframe {public static void main (String [] args) löst NoSuchElementException aus {WebDriver-Treiber = neuer FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maxim ();// int size = driver.findElements (By.tagName ("iframe")). size ();/ * für (int i = 0; i <= Größe; i ++) {driver.switchTo (). frame (i);int total = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (gesamt);driver.switchTo (). defaultContent (); // vom iframe zurückschalten} * /// Den Code zum Finden des Index des Elements kommentiertdriver.switchTo (). frame (0); // Zum Frame wechselnSystem.out.println ("******** Wir werden auf den Iframe *******" umgestellt);driver.findElement (By.xpath ("html / body / a / img")). click ();// Klicken Sie auf das Element in Übereinstimmung mit AdvertisementSystem.out.println ("********* Wir sind fertig ***************");}}}}Ausgabe: Der Browser navigiert zu der Seite, die aus dem obigen Iframe besteht, und klickt auf den Iframe.
Konzept verschachtelter Frames (Frames in Frames):
Nehmen wir an, dass zwei Frames ineinander liegen, wie im folgenden Bild gezeigt, und wir müssen den Text im äußeren und inneren Frame drucken. Bei verschachtelten Frames- Zuerst müssen wir entweder über den Index oder die ID des Iframes zum äußeren Frame wechseln
- Sobald wir zum äußeren Rahmen wechseln, können wir die Gesamtzahl der Iframes innerhalb des äußeren Rahmens ermitteln und
- Wir können mit jeder der bekannten Methoden zum inneren Rahmen wechseln.

Der HTML-Code für den oben verschachtelten Frame ist wie folgt.
Der obige HTML-Code erklärt das Iframe-Tag (grün hervorgehoben) in einem anderen Iframe-Tag deutlich und zeigt das Vorhandensein verschachtelter Iframes an.
Im Folgenden finden Sie die Schritte zum Wechseln zum äußeren Rahmen und zum Drucken des Texts auf den äußeren Rahmen: Schritt 1)
WebDriver-Treiber = neuer FirefoxDriver ();driver.get ("Url");driver.manage (). window (). maxim ();driver.manage (). timeouts (). implicitlyWait (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();System.out.println ("Total Frames -" + Größe);// druckt die Gesamtzahl der Framesdriver.switchTo (). frame (0); // Umschalten des äußeren RahmensSystem.out.println (driver.findElement (By.xpath ("xpath des äußeren Elements")). GetText ());
- Wechseln Sie zum äußeren Rahmen.
- Druckt den Text auf den äußeren Rahmen.
Sobald wir zum äußeren Rahmen wechseln, sollten wir wissen, ob ein innerer Rahmen im äußeren Rahmen vorhanden ist
Schritt 2)
size = driver.findElements (By.tagName ("iframe")). size ();// druckt die Gesamtzahl der Frames innerhalb des äußeren FramesSystem.out.println ("Total Frames -" + Größe);
- Findet die Gesamtzahl der Iframes innerhalb des äußeren Frames.
- Wenn die Größe '0' gefunden wurde, befindet sich kein innerer Rahmen innerhalb des Rahmens.
driver.switchTo (). frame (0); // Zum Innerframe wechselnSystem.out.println (driver.findElement (By.xpath ("xpath des inneren Elements")). GetText ());
- Wechseln Sie zum inneren Rahmen
- Druckt den Text auf den inneren Rahmen.
öffentliche Klasse FramesInsideFrames {public static void main (String [] args) {WebDriver-Treiber = neuer FirefoxDriver ();driver.get ("Url");driver.manage (). window (). maxim ();driver.manage (). timeouts (). implicitlyWait (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();System.out.println ("Total Frames -" + Größe);// druckt die Gesamtzahl der Framesdriver.switchTo (). frame (0); // Umschalten des äußeren RahmensSystem.out.println (driver.findElement (By.xpath ("xpath des äußeren Elements")). GetText ());// Drucken des Textes im äußeren Rahmensize = driver.findElements (By.tagName ("iframe")). size ();// druckt die Gesamtzahl der Frames innerhalb des äußeren FramesSystem.out.println ("Total Frames -" + Größe);driver.switchTo (). frame (0); // Zum Innerframe wechselnSystem.out.println (driver.findElement (By.xpath ("xpath des inneren Elements")). GetText ());// Drucken des Textes im inneren Rahmendriver.switchTo (). defaultContent ();}}}}Ausgabe : Die Ausgabe des obigen Codes druckt den Text im inneren und äußeren Rahmen.