„iFrame“ „Selenium“ žiniatinklio tvarkyklėje
„iFrame in Selenium Webdriver“ yra tinklalapis arba įterptinis rėmas, įterptas į kitą tinklalapį, arba HTML dokumentas, įdėtas kitame HTML dokumente. „Iframe“ dažnai naudojamas norint pridėti tinklalapį iš kitų šaltinių, pvz., Reklamos, turiniui. „Iframe“ yra apibrėžtas žyma < iframe >.
Šioje pamokoje sužinosite -
- Kaip atpažinti „iframe“:
- Kaip perjungti „iframe“ elementus naudojant žiniatinklio tvarkyklės komandas:
- Įterptųjų rėmelių (rėmelių viduje) koncepcija:
Kaip atpažinti „iframe“:
Negalime aptikti rėmelių tiesiog matydami puslapį arba apžiūrėdami „Firebug“.
Stebėkite žemiau esantį vaizdą. Rodomas skelbimas yra „Iframe“ rėmas, mes negalime to rasti ar atpažinti, tiesiog patikrinę naudodami „Firebug“. Taigi kyla klausimas, kaip atpažinti „iframe“?
„Selenium“ rėmus galime nustatyti naudodami toliau nurodytus metodus:
- Dešiniuoju pelės mygtuku spustelėkite elementą, jei rasite tokią parinktį kaip „Šis rėmas“, tai yra „iframe“. (Prašome perskaityti aukščiau pateiktą diagramą)
- Dešiniuoju pelės mygtuku spustelėkite puslapį ir spustelėkite „Žiūrėti puslapio šaltinį“ ir ieškokite naudodami „iframe“, jei galite rasti bet kokį žymos pavadinimą su „iframe“, tai reiškia sakyti puslapį, susidedantį iš iframe.
Aukščiau pateiktoje diagramoje galite pamatyti, kad parinktis „ Šis rėmas “ yra prieinama spustelėjus dešinįjį pelės mygtuką, todėl dabar esame tikri, kad tai yra „iframe“.
Mes netgi galime nustatyti bendrą „iframe“ skaičių naudodami toliau pateiktą fragmentą.
Int dydis = driver.findElements (By.tagName ("iframe")). Dydis ();
Kaip perjungti „iframe“ elementus naudojant žiniatinklio tvarkyklės komandas:
Iš esmės elementus ir rėmus „Selenium“ galime perjungti 3 būdais.
- Pagal indeksą
- Pagal vardą arba ID
- Pagal žiniatinklio elementą
Perjungti į kadrą pagal rodyklę:
Indeksas yra vienas iš „Selenium“ rėmelių tvarkymo atributų, per kurį galime į jį pereiti.
„Iframe“ rodyklė prasideda „0“.
Tarkime, jei puslapyje yra 100 kadrų, naudodamiesi rodykle, mes galime pereiti į „Selenium“ kadrą.
- driver.switchTo (). rėmas (0);
- driver.switchTo (). rėmas (1);
Perjungti į rėmelį pagal pavadinimą arba ID:
Pavadinimas ir ID yra „Selenium“ rėmelių tvarkymo atributai, per kuriuos galime pereiti prie „iframe“.
- driver.switchTo (). frame ("iframe1");
- driver.switchTo (). frame ("elemento ID");
Perkėlimo į „iframe“ per ID pavyzdys:
Paimkime pavyzdį, kaip perjungti „Selenium“ rėmelį, pateiktą žemiau esančiame paveikslėlyje. Mūsų reikalavimas yra spustelėti „iframe“.
Šį „iframe“ galime pasiekti naudodami šį žemiau esantį URL: http: //demo.guru99.com/test/guru99home/
Neįmanoma spustelėti „iframe“ tiesiogiai per „XPath“, nes tai yra „iframe“. Pirmiausia turime pereiti prie rėmelio ir tada spustelėti naudodami „xpath“.
1 žingsnis)
„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ ();driver.get ("http://demo.guru99.com/test/guru99home/");vairuotojas.tvarkyti (). langas (). padidinti ();
- Mes inicijuojame „Firefox“ tvarkyklę.
- Eikite į „guru99“ svetainę, kurią sudaro „iframe“.
- Padidino langą.
2 žingsnis)
driver.switchTo (). frame ("a077aa5e");
- Atlikdami šį veiksmą, turime sužinoti „iframe“ ID, patikrindami per „Firebug“.
- Tada perjunkite į „iframe“ per ID.
3 žingsnis)
driver.findElement (By.xpath ("html / body / a / img")). spustelėkite ();
- Čia turime sužinoti elemento, kurį norite spustelėti, xpath.
- Spustelėkite elementą naudodami aukščiau parodytą žiniatinklio tvarkyklės komandą.
Čia yra visas kodas:
viešoji klasė „SwitchToFrame_ID“public static void main (String [] argumentuoja) {„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ (); // pereina į naršyklędriver.get ("http://demo.guru99.com/test/guru99home/");// pereina į puslapį, kurį sudaro „iframe“vairuotojas.tvarkyti (). langas (). padidinti ();driver.switchTo (). frame ("a077aa5e"); // kadro perjungimas pagal IDSystem.out.println ("******** Mes pereiname prie iframe *******");driver.findElement (By.xpath ("html / body / a / img")). spustelėkite ();// Spustelėja „iframe“System.out.println ("********* Mes baigėme ***************");}}
Išvestis:
Naršyklė pereina į puslapį, susidedantį iš anksčiau pateikto „iframe“, ir spusteli „iframe“.
Perjungti į rėmelį naudojant žiniatinklio elementą:
Mes netgi galime pereiti prie „iframe“ naudodami žiniatinklio elementą.
- driver.switchTo (). rėmas („WebElement“);
Kaip grįžti į pagrindinį rėmą
Turime išeiti iš „iframe“.
Norėdami grįžti į pagrindinį rėmą, galite naudoti „switchTo“ (). ParentFrame () arba, jei norite grįžti į pagrindinį (arba daugumą pagrindinių) rėmų, galite naudoti „switchTo“ (). DefaultContent ();
driver.switchTo (). parentFrame ();driver.switchTo (). defaultContent ();
Kaip perjungti kadrą, jei Negalime persijungti naudodami ID ar žiniatinklio elementą:
Tarkime, jei puslapyje yra 100 kadrų ir nėra ID, šiuo atveju mes tiesiog nežinome, iš kurio „iframe“ reikalingo elemento įkeliama (Tai yra atvejis, kai mes nežinome kadro indekso taip pat).
Minėto susirūpinimo sprendimas yra tas, kad mes turime rasti „iframe“ indeksą, per kurį kraunamas elementas, ir tada per indeksą turime pereiti prie „iframe“.
Toliau pateikiami žingsniai, kaip rasti rėmelio, pagal kurį įkeltas elementas, rodyklę, naudojant toliau pateiktą fragmentą
1 žingsnis)
„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ ();driver.get ("http://demo.guru99.com/test/guru99home/");vairuotojas.tvarkyti (). langas (). padidinti ();
- Inicializuokite „Firefox“ tvarkyklę.
- Eikite į „guru99“ svetainę, kurią sudaro „iframe“.
- Padidino langą.
2 žingsnis)
int dydis = tvarkyklė.findElements (By.tagName ("iframe")). dydis ();
- Aukščiau pateiktas kodas nustato bendrą „iframe“, esančių puslapyje, skaičių naudojant žymos pavadinimą „iframe“.
3 žingsnis)
Tikslas šiame etape būtų sužinojęs, kad iframe indeksą.
už (int i = 0; i <= dydis; i ++) {driver.switchTo (). rėmas (i);int total = driver.findElements (By.xpath ("html / body / a / img")). dydis ();System.out.println (iš viso);driver.switchTo (). defaultContent ();}
Virš „forloop“ kartojami visi „iframe“ puslapyje ir išspausdinama „1“, jei mūsų reikalaujamas „iframe“ buvo rastas, kitas grąžina „0“.
Čia yra visas kodas iki 3 žingsnio:
public class IndexOfIframe {public static void main (String [] argumentuoja) {„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ ();driver.get ("http://demo.guru99.com/test/guru99home/");vairuotojas.tvarkyti (). langas (). padidinti ();//driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);int dydis = tvarkyklė.findElements (By.tagName ("iframe")). dydis ();už (int i = 0; i <= dydis; i ++) {driver.switchTo (). rėmas (i);int total = driver.findElements (By.xpath ("html / body / a / img")). dydis ();System.out.println (iš viso);driver.switchTo (). defaultContent ();}}}
Vykdykite šią programą ir išvestis bus tokia, kaip nurodyta toliau:
Išvestis:
100000Patikrinkite išvestį, galite rasti 0 ir 1 serijas.
- Kur išėjime randate „1“, tai yra „Frame“ indeksas, pagal kurį elementas yra įkeltas.
- Kadangi iframe indekso prasideda "0", jei jums rasti 1 iš 1 st vietos, tada indeksas yra 0.
- Jei radote 1 vietą trečioje vietoje, indeksas yra 2.
driver.switchTo (). rėmas (0);
- Radę elemento rodyklę, galite perjungti rėmelį naudodami aukščiau pateiktą komandą.
- driver.switchTo (). rėmas (rodyklė nustatyta iš 3 žingsnio);
driver.findElement (By.xpath ("html / body / a / img")). spustelėkite ();
- Aukščiau pateiktas kodas spustelės „iframe“ arba „iframe“ elementą.
viešoji klasė „SwitchToframe“ {public static void main (String [] argumentuoja) meta NoSuchElementException {„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ ();driver.get ("http://demo.guru99.com/test/guru99home/");vairuotojas.tvarkyti (). langas (). padidinti ();// int dydis = driver.findElements (By.tagName ("iframe")). dydis ();/ * (int i = 0; i <= dydis; i ++) {driver.switchTo (). rėmas (i);int total = driver.findElements (By.xpath ("html / body / a / img")). dydis ();System.out.println (iš viso);driver.switchTo (). defaultContent (); // perjungimas atgal iš „iframe“} * /// Pakomentavo kodą ieškant elemento indeksodriver.switchTo (). rėmas (0); // Perjungimas į rėmelįSystem.out.println ("******** Mes perjungti į iframe *******");driver.findElement (By.xpath ("html / body / a / img")). spustelėkite ();// Spustelėjus elementą pagal ReklamaSystem.out.println ("********* Mes baigėme ***************");}}Išvestis: Naršyklė pereina į puslapį, susidedantį iš aukščiau nurodyto „iframe“, ir spusteli „iframe“.
Įterptųjų rėmelių (rėmelių viduje) koncepcija:
Tarkime, kad yra du rėmeliai vienas kito viduje, kaip parodyta žemiau esančiame paveikslėlyje, ir mes privalome spausdinti tekstą į išorinį rėmą ir vidinį rėmą. Įdėtų rėmelių atveju- Iš pradžių turime pereiti prie išorinio rėmo indeksu arba „iframe“ ID
- Perėję prie išorinio rėmo galime rasti bendrą „iframe“ skaičių išorinio rėmo viduje ir
- Mes galime pereiti prie vidinio rėmo bet kuriuo iš žinomų metodų.
Aukščiau įdėtų rėmelių HTML kodas yra toks, kaip parodyta žemiau.
Aukščiau pateiktas HTML kodas aiškiai paaiškina „iframe“ žymą (paryškintą žalia spalva) kitoje „iframe“ žymoje, nurodydamas, kad yra įdėtų „iframe“.
Toliau pateikiami perėjimo prie išorinio rėmo ir teksto spausdinimo ant išorinių rėmelių veiksmai: 1 žingsnis
„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ ();vairuotojas.get ("URL");vairuotojas.tvarkyti (). langas (). padidinti ();vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (2, TimeUnit.SECONDS);int dydis = tvarkyklė.findElements (By.tagName ("iframe")). dydis ();System.out.println ("Iš viso kadrų -" + dydis);// išspausdina bendrą kadrų skaičiųdriver.switchTo (). rėmas (0); // Išorinio rėmo perjungimasSystem.out.println (driver.findElement (By.xpath ("išorinio elemento xpath")). GetText ());
- Perjunkite į išorinį rėmą.
- Spausdina tekstą ant išorinio rėmo.
Perėję prie išorinio rėmo turėtume žinoti, ar išorinio rėmo viduje nėra vidinio rėmo
2 žingsnis)
dydis = driver.findElements (By.tagName ("iframe")). size ();// išspausdina bendrą kadrų skaičių išoriniame rėmelyjeSystem.out.println ("Iš viso kadrų -" + dydis);
- Randa bendrą „iframe“ skaičių išoriniame rėmelyje.
- Jei dydis buvo „0“, rėmo viduje nėra vidinio rėmo.
driver.switchTo (). rėmas (0); // Perėjimas prie vidinio kadroSystem.out.println (driver.findElement (By.xpath ("vidinio elemento xpath")). GetText ());
- Perjunkite į vidinį rėmą
- Spausdina tekstą ant vidinio rėmo.
public class FramesInsideFrames {public static void main (String [] argumentuoja) {„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ ();vairuotojas.get ("URL");vairuotojas.tvarkyti (). langas (). padidinti ();vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (2, TimeUnit.SECONDS);int dydis = tvarkyklė.findElements (By.tagName ("iframe")). dydis ();System.out.println ("Iš viso kadrų -" + dydis);// išspausdina bendrą kadrų skaičiųdriver.switchTo (). rėmas (0); // Išorinio rėmo perjungimasSystem.out.println (driver.findElement (By.xpath ("išorinio elemento xpath")). GetText ());// Teksto spausdinimas į išorinį rėmądydis = driver.findElements (By.tagName ("iframe")). size ();// išspausdina bendrą kadrų skaičių išoriniame rėmelyjeSystem.out.println ("Iš viso kadrų -" + dydis);driver.switchTo (). rėmas (0); // Perėjimas prie vidinio kadroSystem.out.println (driver.findElement (By.xpath ("vidinio elemento xpath")). GetText ());// Teksto spausdinimas į vidinį rėmelįdriver.switchTo (). defaultContent ();}}Išvestis : Minėto kodo išvestis atspausdins tekstą vidiniame rėmelyje ir išoriniame rėmelyje.