So gehen Sie mit iFrames um Selenium Webdriver: switchTo()
iFrame ein Selenium Webtreiber
iFrame ein Selenium Webtreiber ist eine Webseite oder ein Inline-Frame, der in eine andere Webseite eingebettet ist, oder ein HTML-Dokument, das in ein anderes HTML-Dokument eingebettet ist. Der Iframe wird häufig verwendet, um Inhalte aus anderen Quellen wie Werbung in eine Webseite einzufügen. Der Iframe wird mit definiertiframe> etikettieren.
So identifizieren Sie den iFrame
Wir können die Frames nicht erkennen, indem wir nur die Seite sehen oder Firebug überprüfen.
Beachten Sie das folgende Bild. Die angezeigte Werbung ist ein Iframe. Wir können sie nicht lokalisieren oder erkennen, indem wir sie nur mit Firebug untersuchen. Die Frage ist also, wie Sie den Iframe identifizieren können.

Wir können die Frames in identifizieren Selenium unter Verwendung der unten angegebenen Methoden:
- Klicken Sie mit der rechten Maustaste auf das Element. Wenn Sie die Option „Dieser Frame“ finden, handelt es sich um einen Iframe. (Siehe Abbildung oben.)
- 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 können Sie Folgendes sehen:Dieser Rahmen' Option ist beim Klicken mit der rechten Maustaste verfügbar, daher sind wir jetzt sicher, dass es sich um einen Iframe handelt.
Mithilfe des folgenden Snippets können wir sogar die Gesamtzahl der Iframes ermitteln.
Int size = driver.findElements(By.tagName("iframe")).size();
Wie man mit Frames umgeht Selenium mit WebDriver-Befehlen
Grundsätzlich können wir die Elemente austauschen und Frames bearbeiten Selenium mit 3 Möglichkeiten.
- Nach Index
- Nach Name oder ID
- Nach Webelement
Methode 1: Wechseln Sie zum Frame nach Index
Der Index ist eines der Attribute für die Frame-Verarbeitung in Selenium über die wir darauf umsteigen können.
Der Index des Iframes beginnt mit „0“.
Angenommen, wenn die Seite 100 Frames enthält, können wir zum Frame-In wechseln Selenium durch die Verwendung von Index.
driver.switchTo().frame(0);
driver.switchTo().frame(1);
Methode 2: Wechseln Sie nach Name oder ID zum Frame
Name und ID sind Attribute für die Verarbeitung von Frames in Selenium über den wir zum Iframe wechseln können.
driver.switchTo().frame("iframe1");
driver.switchTo().frame("id of the element");
Beispiel für den Wechsel zu Iframe über ID:
zum Frame durch Web Element
Wir können über die folgende URL auf diesen Iframe zugreifen: https://demo.guru99.com/test/guru99home/
Es ist nicht möglich, iframe direkt durchzuklicken XPath da es ein iframe ist. Zuerst müssen wir zum Frame wechseln und dann können wir mit xpath klicken.
Schritt 1)
WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); driver.manage().window().maximize();
- Wir initialisieren die Firefox Treiber.
- Navigieren Sie zur Website „guru99“, die den Iframe enthält.
- Das Fenster maximiert.
Schritt 2)
driver.switchTo().frame("a077aa5e");
- In diesem Schritt müssen wir die ID des Iframes herausfinden, indem wir ihn über Firebug überprüfen.
- 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 Web-Treiberbefehl auf das Element.
Hier ist der vollständige Code:
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***************"); } }
Ausgang:
Der Browser navigiert zu der Seite, die den obigen Iframe enthält, und klickt auf den Iframe.
Methode 3: Wechseln Sie zum Frame per Web Element
Wir können sogar mit dem Webelement zum Iframe wechseln.
driver.switchTo().frame(WebElement);
So wechseln Sie zurück zum Hauptrahmen
Wir müssen aus dem Iframe herauskommen.
Um zum übergeordneten Frame zurückzukehren, können Sie entweder switchTo().parentFrame() verwenden. Wenn Sie zum Hauptframe (oder dem übergeordneten Frame) zurückkehren möchten, können Sie switchTo().defaultContent(); verwenden.
driver.switchTo().parentFrame(); driver.switchTo().defaultContent();
So wechseln Sie den Frame, wenn wir 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 einfach nicht, von welchem iFrame-erforderlichen Element geladen wird (dies ist der Fall, wenn wir den Index des Frames nicht kennen). Auch).
Die Lösung für das obige 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, durch den das Element geladen wird, mithilfe des folgenden Snippets
Schritt 1)
WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); driver.manage().window().maximize();
- Initialisieren Sie die Firefox Treiber.
- Navigieren Sie zur Website „guru99“, die den Iframe enthält.
- Das Fenster maximiert.
Schritt 2)
int size = driver.findElements(By.tagName("iframe")).size();
- Der obige Code ermittelt die Gesamtzahl der auf der Seite vorhandenen Iframes mithilfe des Tag-Namens „iframe“.
Schritt 3)
Ziel für Dieser Schritt würde darin bestehen, den Index des Iframes herauszufinden.
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();}
Oben „forloop“ iteriert alle Iframes auf der Seite und gibt „1“ aus, wenn unser erforderlicher Iframe gefunden wurde, andernfalls wird „0“ zurückgegeben.
Hier ist der vollständige Code bis Schritt 3:
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();}}}
Führen Sie dieses Programm aus und die Ausgabe sieht wie folgt aus:
Ausgang:
1 0 0 0 0 0
Überprüfen Sie die Ausgabe. Sie können die Reihe von Nullen und Einsen finden.
- Wo immer 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, finden Sie die 1 in der 1stPlatz, dann ist der Index 0.
- Wenn Sie 1 von 3 findenrd Platz, der Index ist 2.
Sobald wir den Index gefunden haben, können wir die for-Schleife auskommentieren.
Schritt 4)
driver.switchTo().frame(0);
- Sobald Sie den Index des Elements gefunden haben, können Sie den Rahmen mit dem obigen Befehl umschalten.
- drivers.switchTo().frame(index gefunden aus Schritt 3);
Schritt 5)
driver.findElement(By.xpath("html/body/a/img")).click();
- Der obige Code klickt auf den Iframe oder das Element im Iframe.
Der vollständige Code würde also wie folgt aussehen:
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***************"); } }
Ausgang:
Der Browser navigiert zu der Seite, die den obigen Iframe enthält, und klickt auf den Iframe.
Konzept der verschachtelten Frames in Selenium
Nehmen wir an, dass es zwei ineinander liegende Rahmen gibt, wie im Bild unten gezeigt, und unsere Anforderung darin besteht, den Text im äußeren und inneren Rahmen zu drucken.
Bei verschachtelten Frames gilt:
- Zuerst müssen wir entweder über den Index oder die ID des Iframes zum äußeren Frame wechseln
- Sobald wir zum äußeren Frame wechseln, können wir die Gesamtzahl der Iframes innerhalb des äußeren Frames ermitteln
- Wir können mit jeder der bekannten Methoden zum inneren Rahmen wechseln.
Beim Verlassen des Rahmens müssen wir ihn in der gleichen Reihenfolge verlassen, in der wir ihn betreten haben, zuerst im inneren Rahmen und dann im äußeren Rahmen.
Der HTML-Code für den oben verschachtelten Rahmen ist wie unten dargestellt.
Der obige HTML-Code erklärt deutlich das Iframe-Tag (grün hervorgehoben) innerhalb eines anderen Iframe-Tags, was auf das Vorhandensein verschachtelter Iframes hinweist.
Im Folgenden finden Sie die Schritte zum Wechseln zum Außenrahmen und zum Drucken des Textes auf Außenrahmen:
Schritt 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());
- Wechseln Sie zum äußeren Rahmen.
- Druckt den Text auf den äußeren Rahmen.
Sobald wir zum Außenrahmen wechseln, sollten wir wissen, ob im Außenrahmen ein Innenrahmen vorhanden ist
Schritt 2)
size = driver.findElements(By.tagName("iframe")).size(); // prints the total number of frames inside outer frame System.out.println("Total Frames --" + size);
- Ermittelt die Gesamtzahl der Iframes innerhalb des äußeren Frames.
- Wenn die Größe „0“ gefunden wurde, befindet sich im Rahmen kein Innenrahmen.
Schritt 3)
driver.switchTo().frame(0); // Switching to innerframe System.out.println(driver.findElement(By.xpath("xpath of the inner element ")).getText());
- Wechseln Sie zum Innenrahmen
- Druckt den Text auf den inneren Rahmen.
Hier ist der vollständige Code:
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(); } }
Ausgang:
Die Ausgabe des obigen Codes würde den Text im inneren und äußeren Rahmen drucken.