Kuidas iFrame'i sees käsitleda Selenium Veebidraiver: switchTo()
⚡ Nutikas kokkuvõte
iFrame'ide käsitlemine Selenium WebDriver näitab, kuidas testijad kontrollivad HTML-raame lehtede sees, käsitledes tuvastamist, konteksti vahetamist, pesastatud elementide käsitlemist ja stabiilsustehnikaid.

iFrame sisse Selenium Veebidraiver
iFrame sisse Selenium Veebidraiver on veebileht või tekstisisene raam, mis on manustatud teisele veebilehele või HTML-dokumenti, mis on manustatud teise HTML-dokumendi sisse. Iframe'i kasutatakse sageli muudest allikatest pärit sisu (nt reklaami) lisamiseks veebilehele. Iframe on määratletudiframe> silt.
Kuidas iFrame'i tuvastada
Me ei saa kaadreid tuvastada pelgalt lehte nähes või Firebugi kontrollides.
Vaadake allolevat pilti, kuvatav reklaam on Iframe, me ei leia ega tuvasta seda lihtsalt Firebugi abil kontrollides. Seega tekib küsimus, kuidas saate iframe'i tuvastada?

Saame tuvastada raamid Selenium kasutades allpool toodud meetodeid:
- Paremklõpsake elemendil. Kui leiate sellise valiku nagu "See raam", on tegemist iframe'iga. (Palun vaadake ülaltoodud diagrammi)
- Paremklõpsake lehel ja klõpsake nuppu "Kuva lehe allikas" ja otsige 'iframe'iga. Kui leiate märgendi nime "iframe'iga", tähendab see seda, et leht koosneb iframe'ist.
Ülaltoodud diagrammil näete, et "See raamValik on saadaval paremklõpsamisel, seega oleme nüüd kindlad, et see on iframe.
Alloleva koodilõigu abil saame isegi tuvastada iframe'ide koguarvu.
Int size = driver.findElements(By.tagName("iframe")).size();
Kuidas käsitseda raame Selenium kasutades WebDriveri käske
Põhimõtteliselt saame elemente ümber lülitada ja raame sisse lülitada Selenium kasutades 3 viisi.
- Indeksi järgi
- Nime või ID järgi
- Veebielemendi poolt
1. meetod: lülituge kaadrile indeksi järgi
Indeks on üks raami käsitsemise atribuutidest Selenium mille kaudu saame sellele lülituda.
Iframe'i indeks algab '0'ga.
Oletame, et kui lehel on 100 kaadrit, saame lülituda sisse kaadrile Selenium indeksi abil.
driver.switchTo().frame(0);driver.switchTo().frame(1);
2. meetod: lülituge raamile nime või ID järgi
Nimi ja ID on raamide töötlemise atribuudid Selenium mille kaudu saame lülituda iframe'ile.
driver.switchTo().frame("iframe1");driver.switchTo().frame("id of the element");
Näide iframe'ile ID kaudu lülitumisest:
raamile veebielemendi poolt
Sellele iframe'ile pääseme ligi allpool oleva kaudu URL: https://demo.guru99.com/test/guru99home/
Iframe'i otse läbi klõpsamine on võimatu XPath kuna see on iframe. Kõigepealt peame lülituma raamile ja seejärel saame klõpsata kasutades xpath.
Step 1)
WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); driver.manage().window().maximize();
- Initsialiseerime Firefox juht.
- Liikuge saidile "guru99", mis koosneb iframe'ist.
- Maksimeeris akna.
Step 2)
driver.switchTo().frame("a077aa5e");
- Selles etapis peame Firebugi kaudu kontrollides välja selgitama iframe'i ID.
- Seejärel lülituge ID kaudu iframe'ile.
Step 3)
driver.findElement(By.xpath("html/body/a/img")).click();
- Siin peame välja selgitama klõpsatava elemendi xpath.
- Klõpsake elementi, kasutades ülaltoodud veebidraiveri käsku.
Siin on täielik kood:
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***************"); } }
Väljund:
Brauser navigeerib lehele, mis koosneb ülaltoodud iframe'ist ja klõpsab sellel iframe'il.
3. meetod: lülituge veebielemendi raamile
Veebielemendi abil saame isegi lülituda iframe'ile.
driver.switchTo().frame(WebElement);
Kuidas lülituda tagasi põhiraamile
Peame iframe'ist välja tulema.
Ülemraamile naasmiseks võite kasutada kas switchTo().parentFrame() või kui soovite naasta põhikaadrisse (või enamiku vanemaraami juurde), siis kasutada switchTo().defaultContent();
driver.switchTo().parentFrame(); driver.switchTo().defaultContent();
Kuidas raami ümber lülituda, kui me EI SAA lülituda ID või veebielemendi abil:
Oletame, et kui lehel on 100 kaadrit ja ID pole saadaval, siis sel juhul me lihtsalt ei tea, millisest iframe'i vajalikku elementi laaditakse (see on juhtum, kui me ei tea kaadri indeksit samuti).
Lahendus ülaltoodud probleemile on see, et peame leidma iframe'i indeksi, mille kaudu elementi laaditakse, ja seejärel peame indeksi kaudu lülituma iframe'ile.
Allpool on toodud juhised selle raami indeksi leidmiseks, mille abil element laaditakse, kasutades allolevat väljavõtet
Step 1)
WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); driver.manage().window().maximize();
- Initsialiseerige Firefox juht.
- Liikuge saidile „guru99”, mis koosneb iframe'ist.
- Maksimeeris akna.
Step 2)
int size = driver.findElements(By.tagName("iframe")).size();
- Ülaltoodud kood leiab märgendi nime 'iframe' abil lehel olevate iframe'ide koguarvu.
Step 3)
Eesmärk jaoks see samm oleks iframe'i indeksi leidmine.
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();}
Eespool "forloop" itereerib kõiki lehe iframe'e ja prindib "1", kui meie nõutav iframe leiti, muidu tagastab "0".
Siin on täielik kood kuni 3. sammuni:
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();}}}
Käivitage see programm ja väljund oleks järgmine:
Väljund:
1 0 0 0 0 0
Kontrollige väljundit, leiate 0-de ja 1-de seeriad.
- Ükskõik, kus leiate väljundist '1', on see raami indeks, mille abil element laaditakse.
- Kuna iframe'i indeks algab 0-ga, kui leiate 1-st 1stkoht, siis on indeks 0.
- Kui leiate 1 kolmestrd koht, indeks on 2.
Kui oleme indeksi leidnud, saame for-tsüklit kommenteerida.
Step 4)
driver.switchTo().frame(0);
- Kui olete elemendi indeksi leidnud, saate ülaltoodud käsu abil raami ümber lülitada.
- driver.switchTo().frame(indeks leitud 3. sammust);
Step 5)
driver.findElement(By.xpath("html/body/a/img")).click();
- Ülaltoodud kood klõpsab iframe'il või iframe'i elemendil.
Nii et täielik kood oleks järgmine:
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***************"); } }
Väljund:
Brauser navigeerib lehele, mis koosneb ülaltoodud iframe'ist ja klõpsab sellel iframe'il.
Pesastatud raamide kontseptsioon Selenium
Oletame, et teineteise sees on kaks kaadrit, nagu on näidatud alloleval pildil, ja meie nõue on teksti printimine välimisse ja sisemisse raami.
Pesastatud raamide puhul
- Kõigepealt peame lülituma välimisele raamile kas indeksi või iframe ID-ga
- Kui oleme lülitunud välisele raamile, leiame välimise raami sees olevate iframe'ide koguarvu ja
- Saame lülituda sisemisele raamile ükskõik millise tuntud meetodi abil.
Kaadrist väljudes peame väljuma samas järjekorras, nagu sisenesime kõigepealt sisemisest raamist ja seejärel välisraamist.
Ülaltoodud pesastatud raami HTML-kood on näidatud allpool.
Ülaltoodud HTML-kood selgitab selgelt iframe'i märgendit (roheliselt esile tõstetud) teises iframe'i märgendis, mis näitab pesastatud iframe'i olemasolu.
Allpool on toodud sammud välisele raamile üleminekuks ja teksti välimisele raamile printimiseks.
Step 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());
- Lülituge välimisele raamile.
- Prindib teksti välimisele raamile.
Kui oleme lülitunud välisraamile, peaksime teadma, kas välisraami sees on sisemist raami
Step 2)
size = driver.findElements(By.tagName("iframe")).size(); // prints the total number of frames inside outer frame System.out.println("Total Frames --" + size);
- Leiab välimise raami sees olevate iframe'ide koguarvu.
- Kui leiti suuruseks 0, siis raami sees ei ole sisemist raami.
Step 3)
driver.switchTo().frame(0); // Switching to innerframe System.out.println(driver.findElement(By.xpath("xpath of the inner ">element ")).getText());
- Lülituge sisemisele raamile
- Prindib teksti sisemisele raamile.
Siin on täielik kood:
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(); } }
Väljund:
Ülaltoodud koodi väljund prindib teksti sisemises ja välimises raamis.


