Sådan håndteres iFrames i Selen Webdriver: switchTo ()

Indholdsfortegnelse:

Anonim

iFrame i Selen Webdriver

iFrame i Selenium Webdriver er en webside eller en indbygget ramme, der er indlejret i en anden webside eller et HTML-dokument indlejret i et andet HTML-dokument. Iframe bruges ofte til at tilføje indhold fra andre kilder som en annonce til en webside. Iframe defineres med tagget < iframe >.

I denne vejledning lærer du -

  1. Sådan identificeres iframe:
  2. Hvordan skifter elementerne i iframes ved hjælp af Web Driver-kommandoer:
  3. Begrebet indlejrede rammer (rammer inde i rammer):

Sådan identificeres iframe:

Vi kan ikke registrere rammerne ved bare at se siden eller ved at inspicere Firebug.

Overhold nedenstående billede, Annonce, der vises, er en Iframe, vi kan ikke lokalisere eller genkende det ved bare at inspicere ved hjælp af Firebug. Så spørgsmålet er, hvordan kan du identificere iframe?

Sådan identificeres iframe ved hjælp af Selenium WebDriver

Vi kan identificere rammerne i selen ved hjælp af nedenstående metoder:

  • Højreklik på elementet. Hvis du finder indstillingen som 'Denne ramme', er den en iframe. (Se ovenstående diagram)
  • Højreklik på siden og klik på 'Vis sidekilde', og søg med 'iframe'. Hvis du kan finde et tagnavn med 'iframe', betyder det at sige siden, der består af en iframe.

I ovenstående diagram kan du se, at ' Denne ramme ' er tilgængelig ved højreklik, så vi er nu sikre på, at det er en iframe.

Vi kan endda identificere det samlede antal iframes ved hjælp af nedenstående uddrag.

Int størrelse = driver.findElements (By.tagName ("iframe")). Størrelse ();

Sådan skifter du over elementerne i iframes ved hjælp af Web Driver-kommandoer:

Dybest set kan vi skifte over elementerne og håndtere rammer i Selen på 3 måder.

  • Efter indeks
  • Efter navn eller id
  • Af Web Element

Skift til rammen efter indeks:

Indeks er en af ​​attributterne til rammehåndtering i Selen, hvorigennem vi kan skifte til det.

Indeks for iframe starter med '0'.

Antag, at hvis der er 100 rammer på siden, kan vi skifte til ramme i Selen ved hjælp af indeks.

  • driver.switchTo (). ramme (0);
  • driver.switchTo (). ramme (1);

Skift til rammen efter navn eller ID:

Navn og ID er attributter til håndtering af rammer i Selen, hvorigennem vi kan skifte til iframe.

  • driver.switchTo (). ramme ("iframe1");
  • driver.switchTo (). ramme ("elementets id");

Eksempel på skift til iframe gennem ID:

Lad os tage et eksempel på at skifte ramme i Selen vist i nedenstående billede. Vores krav er at klikke på iframe.

Vi kan få adgang til denne iframe via denne nedenfor URL: http: // demo.guru99.com/test/guru99home/

Det er umuligt at klikke på iframe direkte gennem XPath, da det er en iframe. Først skal vi skifte til rammen, og derefter kan vi klikke ved hjælp af xpath.

Trin 1)

WebDriver-driver = ny FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). vindue (). maksimere ();
  • Vi initialiserer Firefox-driveren.
  • Naviger til "guru99" -sitet, der består af iframe.
  • Maksimeret vinduet.

Trin 2)

driver.switchTo (). ramme ("a077aa5e");
  • I dette trin er vi nødt til at finde ud af id-rammen ved at inspicere gennem Firebug.
  • Skift derefter til iframe gennem ID.

Trin 3)

driver.findElement (By.xpath ("html / body / a / img")). klik ();
  • Her skal vi finde ud af xpathet for det element, der skal klikkes på.
  • Klik på elementet ved hjælp af kommandoen til webdriveren vist ovenfor.

Her er den komplette kode:

offentlig klasse SwitchToFrame_ID {public static void main (String [] args) {WebDriver-driver = ny FirefoxDriver (); // navigerer til browserendriver.get ("http://demo.guru99.com/test/guru99home/");// navigerer til siden, der består af en iframedriver.manage (). vindue (). maksimere ();driver.switchTo (). ramme ("a077aa5e"); // skifte ramme efter IDSystem.out.println ("******** Vi skifter til iframe *******");driver.findElement (By.xpath ("html / body / a / img")). klik ();// Klik på iframeSystem.out.println ("********* Vi er færdige ***************");}}

Produktion:

Browser navigerer til siden bestående af ovenstående iframe og klikker på iframe.

Skift til rammen via Web Element:

Vi kan endda skifte til iframe ved hjælp af webelement.

  • driver.switchTo (). ramme (WebElement);

Sådan skifter du tilbage til hovedrammen

Vi er nødt til at komme ud af iframe.

For at flytte tilbage til forældrerammen kan du enten bruge switchTo (). ParentFrame () eller hvis du vil vende tilbage til hovedrammen (eller mest forælder), kan du bruge switchTo (). StandardContent ();

driver.switchTo (). parentFrame ();driver.switchTo (). defaultContent ();

Sådan skifter du over rammen, hvis vi IKKE kan skifte ved hjælp af ID eller webelement:

Antag, at hvis der er 100 rammer på siden, og der ikke er noget ID til rådighed, i dette tilfælde, ved vi bare ikke fra hvilket iframe-krævet element der indlæses (Det er tilfældet, når vi ikke kender rammens indeks også).

Løsningen til ovenstående bekymring er, at vi skal finde indekset for den iframe, gennem hvilken elementet indlæses, og så skal vi skifte til iframe gennem indekset.

Nedenfor er trinene til at finde indekset for den ramme, som elementet indlæses ved hjælp af nedenstående uddrag

Trin 1)

WebDriver-driver = ny FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). vindue (). maksimere ();
  • Initialiser Firefox-driveren.
  • Naviger til "guru99" -sitet, der består af iframe.
  • Maksimeret vinduet.

Trin 2)

int size = driver.findElements (By.tagName ("iframe")). størrelse ();
  • Ovenstående kode finder det samlede antal iframes til stede inde på siden ved hjælp af tagnamnet 'iframe'.

Trin 3)

Målet for dette trin ville være at finde ud af indekset for iframe.

for (int i = 0; i <= størrelse; i ++) {driver.switchTo (). ramme (i);int total = driver.findElements (By.xpath ("html / body / a / img")). størrelse ();System.out.println (total);driver.switchTo (). defaultContent ();}

Over "forloop" gentages alle iframes på siden, og den udskriver '1', hvis vores krævede iframe blev fundet ellers returnerer '0'.

Her er den komplette kode indtil trin 3:

offentlig klasse IndexOfIframe {public static void main (String [] args) {WebDriver-driver = ny FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). vindue (). maksimere ();//driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). størrelse ();for (int i = 0; i <= størrelse; i ++) {driver.switchTo (). ramme (i);int total = driver.findElements (By.xpath ("html / body / a / img")). størrelse ();System.out.println (total);driver.switchTo (). defaultContent ();}}}

Udfør dette program, og output ville være som nedenfor:

Produktion:

100000
Bekræft output, du kan finde serien af ​​0'er og 1'er.
  • Uanset hvor du finder '1' i output, der er indekset for Frame, hvormed elementet indlæses.
  • Da indekset for iframe starter med '0' hvis du finder den 1 i 1 m plads, så indekset er 0.
  • Hvis du finder en i 3 rd sted, indekset er 2.
Vi kan kommentere for loop, når vi først har fundet indekset. Trin 4)
driver.switchTo (). ramme (0); 
  • Når du har fundet elementets indeks, kan du skifte over rammen ved hjælp af ovenstående kommando.
  • driver.switchTo (). ramme (indeks fundet fra trin 3);
Trin 5)
driver.findElement (By.xpath ("html / body / a / img")). klik ();
  • Ovenstående kode klikker på iframe eller element i iframe.
Så den komplette kode ville være som nedenfor:
offentlig klasse SwitchToframe {offentlig statisk ugyldigt hoved (String [] args) kaster NoSuchElementException {WebDriver-driver = ny FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). vindue (). maksimere ();// int size = driver.findElements (By.tagName ("iframe")). størrelse ();/ * for (int i = 0; i <= størrelse; i ++) {driver.switchTo (). ramme (i);int total = driver.findElements (By.xpath ("html / body / a / img")). størrelse ();System.out.println (total);driver.switchTo (). defaultContent (); // skifte tilbage fra iframe} * /// Kommenterede koden til at finde elementets indeksdriver.switchTo (). ramme (0); // Skift til rammenSystem.out.println ("******** Vi skifter til iframe *******");driver.findElement (By.xpath ("html / body / a / img")). klik ();// Klik på elementet i tråd med AnnonceSystem.out.println ("********* Vi er færdige ***************");}}
Output: Browser navigerer til siden, der består af ovenstående iframe og klikker på iframe.

Begrebet indlejrede rammer (rammer inde i rammer):

Lad os antage, at der er to rammer indvendigt som vist i billedet nedenfor, og vores krav er at udskrive teksten i den ydre ramme og den indre ramme. I tilfælde af indlejrede rammer,
  • Først skal vi skifte til den ydre ramme ved enten indeks eller ID for iframe
  • Når vi skifter til den ydre ramme, kan vi finde det samlede antal iframes inde i den ydre ramme, og
  • Vi kan skifte til den indre ramme ved hjælp af en af ​​de kendte metoder.
Mens vi går ud af rammen, skal vi gå ud i samme rækkefølge, som vi trådte ind i den fra den indre ramme først og derefter den ydre ramme.
Indlejrede iFrames i Selen WebDriver

Html-koden for ovenstående indlejrede ramme er som vist nedenfor.

Ovenstående HTML-kode forklarer tydeligt iframe-tagget (fremhævet i grønt) inden for et andet iframe-tag, hvilket indikerer tilstedeværelsen af ​​indlejrede iframes.

Nedenfor er trinene til at skifte til ydre ramme og udskrive teksten på ydre rammer: Trin 1)

WebDriver-driver = ny FirefoxDriver ();driver.get ("Url");driver.manage (). vindue (). maksimere ();driver.manage (). timeouts (). implicitlyWait (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). størrelse ();System.out.println ("Total rammer -" + størrelse);// udskriver det samlede antal billederdriver.switchTo (). ramme (0); // Skift af den ydre rammeSystem.out.println (driver.findElement (By.xpath ("det ydre elements xpath")). GetText ()); 
  • Skift til den ydre ramme.
  • Udskriver teksten på den ydre ramme.

Når vi skifter til den ydre ramme, skal vi vide, om der er nogen indre ramme inde i den ydre ramme

Trin 2)

størrelse = driver.findElements (By.tagName ("iframe")). størrelse ();// udskriver det samlede antal rammer inden i den ydre rammeSystem.out.println ("Total rammer -" + størrelse);
  • Finder det samlede antal iframes inden for den ydre ramme.
  • Hvis størrelsen blev fundet '0', er der ingen indre ramme inde i rammen.
Trin 3)
driver.switchTo (). ramme (0); // Skift til indre rammeSystem.out.println (driver.findElement (By.xpath ("det indre element xpath")). GetText ());
  • Skift til den indvendige ramme
  • Udskriver teksten på den indre ramme.
Her er den komplette kode:
public class FramesInsideFrames {public static void main (String [] args) {WebDriver-driver = ny FirefoxDriver ();driver.get ("Url");driver.manage (). vindue (). maksimere ();driver.manage (). timeouts (). implicitlyWait (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). størrelse ();System.out.println ("Total rammer -" + størrelse);// udskriver det samlede antal billederdriver.switchTo (). ramme (0); // Skift af den ydre rammeSystem.out.println (driver.findElement (By.xpath ("det ydre elements xpath")). GetText ());// Udskrivning af teksten i den ydre rammestørrelse = driver.findElements (By.tagName ("iframe")). størrelse ();// udskriver det samlede antal rammer inden i den ydre rammeSystem.out.println ("Total rammer -" + størrelse);driver.switchTo (). ramme (0); // Skift til indre rammeSystem.out.println (driver.findElement (By.xpath ("det indre element xpath")). GetText ());// Udskrivning af teksten i den indre rammedriver.switchTo (). defaultContent ();}}
Output : Outputtet fra ovenstående kode udskriver teksten i den indre ramme og den ydre ramme.