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'i põhitõed: Manustab ühe HTML-dokumendi teise sisse.
  • 🔍 Määrake: Kasutage arendustööriistu või findElements(By.tagName).
  • 🔁 lülituTo: Vaheta indeksi, nime, ID või veebielemendi järgi.
  • 🪜 Pesastatud: parentFrame ja defaultContent liiguvad tagasi üles.
  • ⚠️ Stabiilsus: Erandite vältimiseks oodake enne switchTo kasutamist.
  • 🤖 Tehisintellekti abilised: Tehisintellekt genereerib tugevad iFrame'i lokaatorid.

Kuidas iFrame'i sees käsitleda Selenium Veebidraiver

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?

Tuvastage Iframe
Kuidas tuvastada iframe kasutades Selenium Veebidraiver

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/

Käsitsege raame sisse Selenium WebDriveri käskude kasutamine

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.

Pesastatud raamide kontseptsioon Selenium

Ü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.

KKK

Raamid on aegunud. iFrame'id manustavad ühe dokumendi mis tahes lehele.

Tehisintellekt soovitab lokaatoreid ja parandab ise ebaühtlaseid indekseid.

Jah. Tehisintellekt kontrollib DOM-i ja sisestab õige switchTo.

Kasuta switchTo().defaultContent() või parentFrame() funktsioone.

iFrame puudub või on aegunud. Lisage selgesõnalised ooteajad.

driver.findElements(By.tagName(“iframe”)).size().

switchTo töötab. Mõned JavaScriptExecutori kõned võivad nurjuda.

Põhitõed üks päev. Pesastatud raamid üks kuni kaks nädalat.

Võta see postitus kokku järgmiselt: