IFrame'i käitlemine seleeni veebidraiveris: switchTo ()

Lang L: none (table-of-contents):

Anonim

iFrame seleeni veebidraiveris

iFrame in Selenium Webdriver on veebileht või tekstiraam, mis on manustatud mõnele teisele veebilehele, või HTML-dokument, mis on varjatud teise HTML-dokumendi sisse. Iframe'i kasutatakse sageli veebisaitide lisamiseks muudest allikatest (nt reklaam) sisu lisamiseks. Iframe on määratletud sildiga < iframe >.

Selles õpetuses saate teada -

  1. Kuidas iframe'i tuvastada:
  2. Kuidas lülitada iframe'i elemente veebidraiveri käskude abil üle:
  3. Pesastatud kaadrite kontseptsioon (raamid raami sees):

Kuidas iframe'i tuvastada:

Me ei saa kaadreid tuvastada lihtsalt lehte nähes ega Firebugi kontrollides.

Jälgige allolevat pilti. Kuvatav reklaam on Iframe, me ei leia seda ega tuvasta seda lihtsalt Firebugi abil kontrollides. Nii et küsimus on selles, kuidas saate iframe'i tuvastada?

Kuidas iframe'i Selenium WebDriveri abil tuvastada

Seleeni kaadreid saame tuvastada allpool toodud meetodite abil:

  • Paremklõpsake elemendil. Kui leiate valiku nagu 'See raam', on see iframe. (Palun vaadake ülaltoodud skeemi)
  • Paremklõpsake lehel ja klõpsake nuppu "Kuva lehe allikas" ja otsige "iframe" abil, kui leiate "iframe" -iga mis tahes sildi nime, tähendab see seda, et öelda iframe-i koosnev leht.

Ülaltoodud skeemil näete, et valik " See raam " on saadaval paremklõpsamisel, nii et oleme nüüd kindlad, et see on iframe.

Allpool oleva koodilõigu abil saame isegi tuvastada iframe'i koguarvu.

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

Kuidas iframe'i elementides veebiversiooni käskude abil üle minna:

Põhimõtteliselt saame Seleniumi elemente üle vahetada ja raame käsitseda, kasutades 3 viisi.

  • Indeksi järgi
  • Nime või ID järgi
  • Veebielemendi poolt

Kaadri vahetamine indeksite kaupa:

Indeks on üks seleeni kaadri käsitsemise atribuutidest, mille kaudu saame sellele üle minna.

Iframe'i indeks algab tähega "0".

Oletame, et kui lehel on 100 kaadrit, saame indeksi abil seleenis üle minna.

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

Raamile lülitumine nime või ID järgi:

Nimi ja ID on seleenis kaadrite käsitsemise atribuudid, mille kaudu saame iframe'ile üle minna.

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

Näide ID-kaardi kaudu iframe'ile üleminekust:

Võtame näite seleeni raami vahetamiseks, mis kuvatakse alloleval pildil. Meie nõue on klõpsata iframe'il.

Sellele iframe'ile pääseme juurde selle URL-i kaudu: http: //demo.guru99.com/test/guru99home/

Otse XPathi kaudu on võimatu iframe'i klõpsata, kuna see on iframe. Kõigepealt peame lülituma kaadrile ja seejärel saame klõpsata xpathi abil.

Samm 1)

WebDriveri draiver = uus FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");draiver.halda (). aken (). maksimeeri ();
  • Initsialiseerime Firefoxi draiveri.
  • Liikuge saidile "guru99", mis koosneb iframe'ist.
  • Maksimeeris akna.

2. samm)

driver.switchTo (). raam ("a077aa5e");
  • Selles etapis peame Firebugi kaudu kontrollides välja selgitama iframe'i ID.
  • Seejärel lülitage iframe'i kaudu ID kaudu.

3. samm)

driver.findElement (By.xpath ("html / body / a / img")). klõpsake ();
  • Siin peame välja selgitama klõpsatava elemendi xpath.
  • Klõpsake ülaltoodud veebidraiveri käsu abil elementi.

Siin on täielik kood:

avalik klass SwitchToFrame_ID {public staatiline void main (String [] args) {WebDriveri draiver = uus FirefoxDriver (); // navigeerib brauserissedriver.get ("http://demo.guru99.com/test/guru99home/");// navigeerib iframe'ist koosnevale leheledraiver.halda (). aken (). maksimeeri ();driver.switchTo (). raam ("a077aa5e"); // raami vahetamine ID järgiSystem.out.println ("******** Üleminek iframe'ile *******");driver.findElement (By.xpath ("html / body / a / img")). klõpsake ();// Klõpsab iframe'iSystem.out.println ("********* Oleme valmis ***************");}}

Väljund:

Brauser navigeerib ülaltoodud iframe'ist koosnevale lehele ja klõpsab iframe'il.

Veebielementi abil raamile lülitumine:

Veebielemendi abil saame isegi iframe-ile üle minna.

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

Kuidas põhiraamile tagasi lülituda

Me peame iframe'ist välja tulema.

Vanemraamile tagasi liikumiseks võite kasutada kas switchTo (). ParentFrame () või kui soovite naasta peamise (või enamiku vanema) raami juurde, võite kasutada switchTo (). DefaultContent ();

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

Kuidas raami vahetada, kui me ei saa ID-d või veebielementi kasutada:

Oletame, et kui lehel on 100 kaadrit ja ID-d pole saadaval, siis sel juhul me lihtsalt ei tea, millisest iframe'i nõutavat elementi laaditakse (see on juhtum, kui me ei tea kaadri indeksit ka).

Lahendus ülaltoodud probleemile on see, et peame leidma iframe'i indeksi, mille kaudu elementi laaditakse, ja seejärel peame indeksi kaudu iframe'ile üle minema.

Allpool on juhised elemendi allalaaditava kaadri indeksi leidmiseks alloleva koodilõigu abil

Samm 1)

WebDriveri draiver = uus FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");draiver.halda (). aken (). maksimeeri ();
  • Käivitage Firefoxi draiver.
  • Liikuge saidile "guru99", mis koosneb iframe'ist.
  • Maksimeeris akna.

2. samm)

int size = draiver.findElements (By.tagName ("iframe")).. size ();
  • Ülaltoodud kood leiab lehe sees olevate iframe’ide koguarvu, kasutades sildinime „iframe”.

3. samm)

Selle sammu eesmärk oleks teada saada iframe'i indeks.

for (int i = 0; i <= suurus; i ++) {driver.switchTo (). raam (i);int kokku = draiver.findElementid (By.xpath ("html / body / a / img")). suurus ();System.out.println (kokku);driver.switchTo (). defaultContent ();}

Üle "forloop" kordab kõik lehe iframe-id ja prindib "1", kui meie nõutav iframe leiti, tagastab "0".

Siin on täielik kood kuni 3. sammuni:

avalik klass IndexOfIframe {public staatiline void main (String [] args) {WebDriveri draiver = uus FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");draiver.halda (). aken (). maksimeeri ();//driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);int size = draiver.findElements (By.tagName ("iframe")).. size ();for (int i = 0; i <= suurus; i ++) {driver.switchTo (). raam (i);int kokku = draiver.findElementid (By.xpath ("html / body / a / img")). suurus ();System.out.println (kokku);driver.switchTo (). defaultContent ();}}}

Selle programmi käivitamine ja väljund oleks järgmine:

Väljund:

100000
Kontrollige väljundit, leiate 0- ja 1-seeria.
  • Kus leiate väljundist '1', see on kaadri indeks, mille järgi elementi laaditakse.
  • Kuna indeks iframe algab "0", kui te leida 1 1 st koht, siis indeks on 0.
  • Kui leiate 1 3 rd koht, indeks on 2.
Kui indeks on leitud, võime for for loopi kommenteerida. 4. samm)
driver.switchTo (). raam (0); 
  • Kui leiate elemendi indeksi, saate ülaltoodud käsu abil raami üle minna.
  • driver.switchTo (). raam (indeks on leitud sammust 3);
5. samm)
driver.findElement (By.xpath ("html / body / a / img")). klõpsake ();
  • Ülaltoodud kood klõpsab iframe'il või elemendil iframe'is.
Nii et täielik kood oleks selline nagu allpool:
avalik klass SwitchToframe {public static void main (String [] args) viskab NoSuchElementException {WebDriveri draiver = uus FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");draiver.halda (). aken (). maksimeeri ();// int size = driver.findElements (By.tagName ("iframe")). size ();/ * jaoks (int i = 0; i <= suurus; i ++) {driver.switchTo (). raam (i);int kokku = draiver.findElementid (By.xpath ("html / body / a / img")). suurus ();System.out.println (kokku);driver.switchTo (). defaultContent (); // iframe'ilt tagasi lülitumine} * /// Kommenteeris koodi elemendi indeksi leidmiseksdriver.switchTo (). raam (0); // Üleminek raamileSystem.out.println ("******** Oleme üle läinud iframe'ile *******");driver.findElement (By.xpath ("html / body / a / img")). klõpsake ();// Klõps elemendil kooskõlas reklaamigaSystem.out.println ("********* Oleme valmis ***************");}}
Väljund: brauser navigeerib ülaltoodud iframe'ist koosnevale lehele ja klõpsab iframe'il.

Pesastatud kaadrite kontseptsioon (raamid raami sees):

Oletame, et sees on kaks kaadrit, nagu on näidatud allpool pildil, ja meie nõue on teksti printimine välimisse ja sisemisse kaadrisse. Pesastatud kaadrite korral
  • Esmalt peame välisele raamile lülituma kas iframe'i indeksi või ID abil
  • Kui oleme välisele raamile üle läinud, võime leida iframsi koguarvu välimisest raamist ja
  • Sisemisele kaadrile saab üle minna mis tahes tuntud meetodiga.
Kaadrist välja astudes peame väljuma samas järjekorras, nagu sisestatud esimesena sisemisest ja seejärel välimisest kaadrist.
Pesastatud iFrames kausta Selenium WebDriver

Ülaltoodud pesastatud raami HTML-kood on näidatud allpool.

Ülaltoodud HTML-kood selgitab selgelt iframe-märgendit (roheliselt esile tõstetud) teises iframe-märgendis, mis näitab pesastatud iframe-ide olemasolu.

Allpool on toodud sammud välisele raamile üleminekuks ja teksti printimiseks välimisele raamile: 1. samm)

WebDriveri draiver = uus FirefoxDriver ();draiver.get ("URL");draiver.halda (). aken (). maksimeeri ();driver.manage (). timeout (). implicitlyWait (2, TimeUnit.SECONDS);int size = draiver.findElements (By.tagName ("iframe")).. size ();System.out.println ("Raamid kokku -" + suurus);// prindib kaadrite koguarvudriver.switchTo (). raam (0); // Välise raami vahetamineSystem.out.println (draiver.findElement (By.xpath ("välise elemendi xpath")). GetText ()); 
  • Lülitu välimisele raamile.
  • Prindib teksti välimisele raamile.

Kui oleme välisele raamile üle läinud, peaksime teadma, kas välimise raami sees on mõni sisemine raam

2. samm)

size = draiver.findElements (By.tagName ("iframe")). size ();// prindib välise kaadri sees olevate kaadrite koguarvuSystem.out.println ("Raamid kokku -" + suurus);
  • Leiab välise raami sees olevate iframe’ide koguarvu.
  • Kui suurus leiti '0', pole raami sees sisemist raami.
3. samm)
driver.switchTo (). raam (0); // Üleminek sisekaadrileSystem.out.println (draiver.findElement (By.xpath ("sisemise elemendi xpath")). GetText ());
  • Lülitu siseraamile
  • Prindib teksti sisemisele raamile.
Siin on täielik kood:
public class FramesInsideFrames {public staatiline void main (String [] args) {WebDriveri draiver = uus FirefoxDriver ();draiver.get ("URL");draiver.halda (). aken (). maksimeeri ();driver.manage (). timeout (). implicitlyWait (2, TimeUnit.SECONDS);int size = draiver.findElements (By.tagName ("iframe")).. size ();System.out.println ("Raamid kokku -" + suurus);// prindib kaadrite koguarvudriver.switchTo (). raam (0); // Välise raami vahetamineSystem.out.println (draiver.findElement (By.xpath ("välise elemendi xpath")). GetText ());// Teksti printimine välimisse kaadrissesize = draiver.findElements (By.tagName ("iframe")). size ();// prindib välise kaadri sees olevate kaadrite koguarvuSystem.out.println ("Raamid kokku -" + suurus);driver.switchTo (). raam (0); // Üleminek sisekaadrileSystem.out.println (draiver.findElement (By.xpath ("sisemise elemendi xpath")). GetText ());// Teksti printimine sisemisse kaadrissedriver.switchTo (). defaultContent ();}}
Väljund : ülaltoodud koodi väljund trükkib teksti sisemisse ja välimisse kaadrisse.