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.


