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.

Identifizieren Sie den Iframe
So identifizieren Sie den Iframe mithilfe von Selenium WebTreiber

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/

Behandeln Sie Frames Selenium Verwenden von WebDriver-Befehlen

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.

Konzept der verschachtelten Frames in Selenium

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.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: