Kako postupati s iFrames-ima u Selenium Webdriver: switchTo ()

Sadržaj:

Anonim

iFrame u Selenium Webdriver

iFrame u Selenium Webdriver je web stranica ili ugrađeni okvir koji je ugrađen u drugu web stranicu ili HTML dokument ugrađen u drugi HTML dokument. Iframe se često koristi za dodavanje sadržaja iz drugih izvora poput oglasa na web stranicu. Iframe je definiran oznakom < iframe >.

U ovom vodiču naučit ćete -

  1. Kako prepoznati iframe:
  2. Kako prebaciti elemente u iframeovima pomoću naredbi web-upravljačkog programa:
  3. Koncept ugniježđenih okvira (okviri unutar okvira):

Kako prepoznati iframe:

Ne možemo otkriti okvire samo tako što ćemo vidjeti stranicu ili pregledati Firebug.

Obratite pažnju na donju sliku, Oglas koji se prikazuje je iframe, ne možemo ga pronaći ili prepoznati samo pregledom pomoću Firebuga. Dakle, pitanje je kako možete prepoznati iframe?

Kako prepoznati iframe pomoću programa Selenium WebDriver

Okvire u seleniju možemo prepoznati pomoću dolje navedenih metoda:

  • Desnom tipkom miša kliknite element, ako pronađete opciju kao što je 'Ovaj okvir', to je iframe. (Pogledajte gornji dijagram)
  • Desnom tipkom miša kliknite stranicu, a zatim kliknite "Prikaži izvor stranice" i pretražite s "iframe", ako možete pronaći bilo koje ime oznake s "iframe", onda to znači reći stranicu koja se sastoji od iframea.

Na gornjem dijagramu možete vidjeti da je opcija " Ovaj okvir " dostupna desnim klikom, pa smo sada sigurni da je to iframe.

Pomoću isječka u nastavku možemo čak prepoznati ukupan broj iframeova.

Int size = driver.findElements (By.tagName ("iframe")). Size ();

Kako prebaciti elemente u iframeovima pomoću naredbi Web Driver:

U osnovi možemo prebaciti elemente i rukovati okvirima u Seleniju na 3 načina.

  • Po Indexu
  • Po imenu ili ID-u
  • Web elementom

Prelazak na okvir po indeksu:

Indeks je jedan od atributa za rukovanje kadrom u Seleniju preko kojeg se možemo prebaciti na njega.

Indeks iframe-a započinje s '0'.

Pretpostavimo da ako na stranici ima 100 okvira, možemo se prebaciti na kadar u Seleniju pomoću indeksa.

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

Prebacite se na okvir prema imenu ili ID-u:

Ime i ID su atributi za rukovanje okvirima u Seleniju preko kojih se možemo prebaciti na iframe.

  • driver.switchTo (). frame ("iframe1");
  • driver.switchTo (). frame ("id elementa");

Primjer prebacivanja na iframe kroz ID:

Uzmimo primjer za prebacivanje okvira u selenu prikazanom na donjoj slici. Naš je zahtjev kliknuti iframe.

Ovom iframeu možemo pristupiti putem sljedećeg URL-a: http: //demo.guru99.com/test/guru99home/

Nemoguće je kliknuti iframe izravno kroz XPath jer je to iframe. Prvo se moramo prebaciti na okvir, a zatim možemo kliknuti pomoću xpath.

Korak 1)

Upravljački program za WebDriver = novi FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();
  • Inicijaliziramo Firefox upravljački program.
  • Idite na web mjesto "guru99" koje se sastoji od iframea.
  • Uvećao prozor.

Korak 2)

driver.switchTo (). frame ("a077aa5e");
  • U ovom koraku moramo pronaći ID iframe-a pregledavanjem Firebuga.
  • Zatim se prebacite na iframe kroz ID.

Korak 3)

driver.findElement (By.xpath ("html / body / a / img")). click ();
  • Ovdje moramo saznati putanju elementa na koji se treba kliknuti.
  • Kliknite element pomoću gore prikazane naredbe web-upravljačkog programa.

Evo kompletnog koda:

javna klasa SwitchToFrame_ID {javna statička void glavna (String [] args) {Upravljački program za WebDriver = novi FirefoxDriver (); // prelazi u preglednikdriver.get ("http://demo.guru99.com/test/guru99home/");// prelazi na stranicu koja se sastoji od iframe-adriver.manage (). window (). maximize ();driver.switchTo (). frame ("a077aa5e"); // prebacivanje okvira prema ID-uSystem.out.println ("******** Prešli smo na iframe *******");driver.findElement (By.xpath ("html / body / a / img")). click ();// Klikne iframeSystem.out.println ("********* Gotovi smo ***************");}}

Izlaz:

Preglednik dolazi do stranice koja se sastoji od gore navedenog iframea i klikće na iframe.

Prebacivanje na okvir pomoću web elementa:

Možemo se čak i prebaciti na iframe koristeći web element.

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

Kako se vratiti na glavni okvir

Moramo izaći iz iframea.

Da biste se vratili na nadređeni okvir, možete koristiti switchTo (). ParentFrame () ili ako se želite vratiti na glavni (ili većinu nadređenih) okvira, možete koristiti switchTo (). DefaultContent ();

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

Kako prebaciti okvir, ako se NE MOŽEMO prebaciti pomoću ID-a ili web elementa:

Pretpostavimo da ako na stranici postoji 100 okvira i nema dostupnog ID-a, u ovom slučaju jednostavno ne znamo iz kojeg se iframe-a učitava traženi element (slučaj je kada ne znamo indeks okvira također).

Rješenje za gornju zabrinutost je da moramo pronaći indeks iframea kroz koji se element učitava, a zatim se trebamo prebaciti na iframe kroz indeks.

Ispod su koraci za pronalaženje indeksa okvira kojim se element učitava pomoću donjeg isječka

Korak 1)

Upravljački program za WebDriver = novi FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();
  • Inicijalizirajte Firefox upravljački program.
  • Idite na web mjesto "guru99" koje se sastoji od iframea.
  • Uvećao prozor.

Korak 2)

int size = driver.findElements (By.tagName ("iframe")). size ();
  • Gornji kôd pronalazi ukupan broj iframeova prisutnih unutar stranice pomoću naziva oznake 'iframe'.

Korak 3)

Cilj ovog koraka bio bi pronalaženje indeksa iframea.

za (int i = 0; i <= veličina; i ++) {driver.switchTo (). frame (i);int total = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (ukupno);driver.switchTo (). defaultContent ();}

Iznad "forloop" ponavlja sve iframe-ove na stranici i ispisuje '1' ako je naš traženi iframe pronađen, inače vraća '0'.

Evo kompletnog koda do koraka 3:

javna klasa IndexOfIframe {javna statička void glavna (String [] args) {Upravljački program za WebDriver = novi FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();//driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();za (int i = 0; i <= veličina; i ++) {driver.switchTo (). frame (i);int total = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (ukupno);driver.switchTo (). defaultContent ();}}}

Izvršite ovaj program i izlaz će biti kao u nastavku:

Izlaz:

100000
Provjerite izlaz, možete pronaći nizove 0 i 1.
  • Gdje god u izlazu pronađete '1', to je indeks Frame pomoću kojeg se element učitava.
  • Budući da je indeks iframe počinje s „0” ako vam je 1 u 1. st mjestu, onda je indeks je 0.
  • Ako nađete 1 na 3. mjestu, indeks je 2.
Možemo komentirati petlju for, nakon što pronađemo indeks. Korak 4)
driver.switchTo (). frame (0); 
  • Nakon što pronađete indeks elementa, možete prebaciti okvir pomoću gornje naredbe.
  • driver.switchTo (). frame (indeks pronađen iz 3. koraka);
Korak 5)
driver.findElement (By.xpath ("html / body / a / img")). click ();
  • Gornji kôd će kliknuti iframe ili element u iframeu.
Dakle, cjeloviti kod bio bi kao u nastavku:
javna klasa SwitchToframe {public static void main (String [] args) baca NoSuchElementException {Upravljački program za WebDriver = novi FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// int size = driver.findElements (By.tagName ("iframe")). size ();/ * za (int i = 0; i <= veličina; i ++) {driver.switchTo (). frame (i);int total = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (ukupno);driver.switchTo (). defaultContent (); // vraćanje s iframe-a} * /// Komentirao je kod za pronalaženje indeksa elementadriver.switchTo (). frame (0); // Prebacivanje na okvirSystem.out.println ("******** Prebačeni smo na iframe *******");driver.findElement (By.xpath ("html / body / a / img")). click ();// Klik na element u skladu s AdvertisementSystem.out.println ("********* Gotovi smo ***************");}}
Izlaz: Preglednik dolazi do stranice koja se sastoji od gore navedenog iframea i klikće na iframe.

Koncept ugniježđenih okvira (okviri unutar okvira):

Pretpostavimo da postoje dva okvira jedan u drugom, kao što je prikazano na donjoj slici, a naš je zahtjev ispis teksta u vanjski okvir i unutarnji okvir. U slučaju ugniježđenih okvira,
  • Isprva se moramo prebaciti na vanjski okvir indeksom ili ID-om iframe-a
  • Nakon što se prebacimo na vanjski okvir, možemo pronaći ukupan broj iframeova unutar vanjskog okvira i
  • Na unutarnji okvir možemo se prebaciti bilo kojom poznatom metodom.
Izlazeći iz okvira, moramo izaći istim redoslijedom kojim smo prvo ušli iz unutarnjeg, a zatim vanjskog okvira.
Ugnježđeni iFrames u Selenium WebDriver

Html kôd za gore ugniježđeni okvir je kako je prikazano u nastavku.

Gornji HTML kôd jasno objašnjava iframe oznaku (istaknutu zelenom bojom) unutar druge iframe oznake, ukazujući na prisutnost ugniježđenih iframeova.

Ispod su koraci za prelazak na vanjski okvir i ispis teksta na vanjske okvire: 1. korak)

Upravljački program za WebDriver = novi FirefoxDriver ();driver.get ("Url");driver.manage (). window (). maximize ();driver.manage (). timeouts (). implicitnoWait (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();System.out.println ("Ukupni okviri -" + veličina);// ispisuje ukupan broj okviradriver.switchTo (). frame (0); // Prebacivanje vanjskog okviraSystem.out.println (driver.findElement (By.xpath ("xpath vanjskog elementa")). GetText ()); 
  • Prebacite se na vanjski okvir.
  • Ispisuje tekst na vanjskom okviru.

Nakon što se prebacimo na vanjski okvir, trebali bismo znati postoji li unutarnji okvir unutar vanjskog okvira

Korak 2)

size = driver.findElements (By.tagName ("iframe")). size ();// ispisuje ukupan broj okvira unutar vanjskog okviraSystem.out.println ("Ukupni okviri -" + veličina);
  • Pronalazi ukupan broj iframeova unutar vanjskog okvira.
  • Ako je veličina pronađena '0', tada unutar okvira nema unutarnjeg okvira.
Korak 3)
driver.switchTo (). frame (0); // Prebacivanje na unutarnji okvirSystem.out.println (driver.findElement (By.xpath ("xpath unutarnjeg elementa")). GetText ());
  • Prebacite se na unutarnji okvir
  • Ispisuje tekst na unutarnjem okviru.
Evo kompletnog koda:
javna klasa FramesInsideFrames {javna statička void glavna (String [] args) {Upravljački program za WebDriver = novi FirefoxDriver ();driver.get ("Url");driver.manage (). window (). maximize ();driver.manage (). timeouts (). implicitnoWait (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();System.out.println ("Ukupni okviri -" + veličina);// ispisuje ukupan broj okviradriver.switchTo (). frame (0); // Prebacivanje vanjskog okviraSystem.out.println (driver.findElement (By.xpath ("xpath vanjskog elementa")). GetText ());// Ispis teksta u vanjski okvirsize = driver.findElements (By.tagName ("iframe")). size ();// ispisuje ukupan broj okvira unutar vanjskog okviraSystem.out.println ("Ukupni okviri -" + veličina);driver.switchTo (). frame (0); // Prebacivanje na unutarnji okvirSystem.out.println (driver.findElement (By.xpath ("xpath unutarnjeg elementa")). GetText ());// Ispis teksta u unutarnjem okvirudriver.switchTo (). defaultContent ();}}
Izlaz : Izlaz gornjeg koda ispisat će tekst u unutarnjem i vanjskom okviru.