Kuinka käsitellä iFrame-kehyksiä Selenium Verkkoohjain: switchTo()

iFrame sisään Selenium Web-ohjain

iFrame sisään Selenium Web-ohjain on verkkosivu tai upotettu kehys, joka on upotettu toiselle verkkosivulle tai HTML-dokumenttiin upotettuna toiseen HTML-dokumenttiin. Iframe-kehystä käytetään usein sisällön lisäämiseen muista lähteistä, kuten mainoksesta, verkkosivulle. iframe määritellääniframe> tunniste.

Kuinka tunnistaa iFrame

Emme voi havaita kehyksiä pelkästään katsomalla sivua tai tarkastamalla Firebugia.

Tarkkaile alla olevaa kuvaa, näytettävä mainos on iframe, emme voi paikantaa tai tunnistaa sitä vain tarkastamalla Firebugilla. Joten kysymys kuuluu, kuinka voit tunnistaa iframen?

Tunnista Iframe
Kuinka tunnistaa iframe käyttämällä Selenium web-ajuri

Voimme tunnistaa kehykset Selenium käyttämällä alla olevia menetelmiä:

  • Napsauta elementtiä hiiren kakkospainikkeella. Jos löydät vaihtoehdon, kuten "Tämä kehys", kyseessä on iframe. (Katso yllä olevaa kaaviota)
  • Napsauta sivua hiiren kakkospainikkeella ja napsauta "Näytä sivun lähdekoodi" ja "Hae iframe" -kehyksellä. Jos löydät minkä tahansa tunnisteen nimen "iframe"-kehyksellä, se tarkoittaa, että sivu koostuu iframe-kehyksestä.

Yllä olevasta kaaviosta näet, että "Tämä kehys' -vaihtoehto on käytettävissä hiiren kakkospainikkeella, joten olemme nyt varmoja, että se on iframe.

Voimme jopa tunnistaa iframe-kehysten kokonaismäärän käyttämällä alla olevaa katkelmaa.

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

Kuinka käsitellä kehyksiä sisällä Selenium käyttämällä WebDriver-komentoja

Periaatteessa voimme vaihtaa elementtejä ja käsitellä kehyksiä Selenium käyttämällä 3 tapaa.

  • Indeksin mukaan
  • Nimen tai tunnuksen mukaan
  • Web Elementin toimesta

Tapa 1: Vaihda kehykseen indeksin mukaan

Hakemisto on yksi kehysten käsittelyn attribuuteista Selenium jonka kautta voimme siirtyä siihen.

Iframen hakemisto alkaa numerolla 0.

Oletetaan, että jos sivulla on 100 kehystä, voimme vaihtaa kehyksiin Selenium indeksin avulla.

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

Tapa 2: Vaihda kehykseen nimen tai tunnuksen perusteella

Nimi ja tunnus ovat kehysten käsittelyn attribuutteja Selenium jonka kautta voimme siirtyä iframe-kehykseen.

  • driver.switchTo().frame("iframe1");
  • driver.switchTo().frame("id of the element");

Esimerkki vaihtamisesta iframeen tunnuksen kautta:

Web Elementin kehykseen

Voimme käyttää tätä iframea alla olevan URL-osoitteen kautta: https://demo.guru99.com/test/guru99home/

Käsittele kehyksiä sisään Selenium WebDriver-komentojen käyttäminen

Iframea ei voi napsauttaa suoraan läpi XPath koska se on iframe. Ensin meidän on vaihdettava kehykseen ja sitten voimme napsauttaa käyttämällä xpath.

Vaihe 1)

WebDriver driver = new FirefoxDriver();

driver.get("https://demo.guru99.com/test/guru99home/");

driver.manage().window().maximize();

  • Alustamme Firefox kuljettaja.
  • Siirry "guru99"-sivustolle, joka koostuu iframe-kehyksestä.
  • Maksimoi ikkunan.

Vaihe 2)

driver.switchTo().frame("a077aa5e");
  • Tässä vaiheessa meidän on selvitettävä iframen tunnus tarkastamalla Firebugin kautta.
  • Vaihda sitten iframe-kehykseen ID:n kautta.

Vaihe 3)

driver.findElement(By.xpath("html/body/a/img")).click();
  • Tässä meidän on selvitettävä napsautettavan elementin xpath.
  • Napsauta elementtiä yllä näkyvällä web-ohjainkomennolla.

Tässä on täydellinen koodi:

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***************");
      }
}		

lähtö:

Selain siirtyy sivulle, joka koostuu yllä olevasta iframe-kehyksestä ja napsauttaa iframe-kehystä.

Tapa 3: Vaihda Web-elementin kehykseen

Voimme jopa vaihtaa iframe-kehykseen web-elementin avulla.

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

Kuinka vaihtaa takaisin pääkehykseen

Meidän on poistuttava iframe-kehyksestä.

Palataksesi pääkehykseen voit joko käyttää toimintoa switchTo().parentFrame() tai jos haluat palata pääkehykseen (tai useimpiin pääkehykseen), voit käyttää switchTo().defaultContent();

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

Kuinka vaihtaa kehystä, jos emme VOI vaihtaa ID:n tai Web Elementin avulla:

Oletetaan, että jos sivulla on 100 kehystä, eikä ID:tä ole saatavilla, tässä tapauksessa emme vain tiedä mistä iframe-elementistä ladataan (tämä on tilanne, kun emme tiedä kehyksen indeksiä myös).

Ratkaisu yllä olevaan huolenaiheeseen on, että meidän on löydettävä sen iframe-kehyksen indeksi, jonka kautta elementti ladataan, ja sitten meidän on vaihdettava iframe-kehykseen indeksin kautta.

Alla on vaiheet sen kehyksen indeksin löytämiseksi, jolla elementti ladataan käyttämällä alla olevaa katkelmaa

Vaihe 1)

WebDriver driver = new FirefoxDriver();
driver.get("https://demo.guru99.com/test/guru99home/");
driver.manage().window().maximize();
  • Alusta Firefox kuljettaja.
  • Siirry "guru99"-sivustolle, joka koostuu iframe-kehyksestä.
  • Maksimoi ikkunan.

Vaihe 2)

int size = driver.findElements(By.tagName("iframe")).size();
  • Yllä oleva koodi etsii sivulla olevien iframe-kehysten kokonaismäärän käyttämällä tunnisteen nimeä "iframe".

Vaihe 3)

Tavoite varten tämä vaihe olisi iframe-hakemiston selvittäminen.

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();}

Yläpuolella "forloop" iteroi kaikki sivun iframe-kehykset ja tulostaa arvon 1, jos vaadittava iframe-kehys löytyi, muuten palauttaa arvon 0.

Tässä on täydellinen koodi vaiheeseen 3 asti:

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();}}}

Suorita tämä ohjelma ja tulos olisi seuraavanlainen:

lähtö:

1
0
0
0	
0
0

Tarkista tulos, löydät 0:n ja 1:n sarjan.

  • Aina kun löydät tulosteen 1, se on kehyksen indeksi, jolla elementti ladataan.
  • Koska iframe-kehyksen indeksi alkaa 0:lla, jos löydät 1:stä 1stsija, niin indeksi on 0.
  • Jos löydät 1:3rd sija, indeksi on 2.

Voimme kommentoida for-silmukkaa, kun olemme löytäneet indeksin.

Vaihe 4)

driver.switchTo().frame(0);
  • Kun olet löytänyt elementin indeksin, voit vaihtaa kehyksen päälle yllä olevalla komennolla.
  • driver.switchTo().frame(indeksi löydetty vaiheesta 3);

Vaihe 5)

driver.findElement(By.xpath("html/body/a/img")).click();
  • Yllä oleva koodi napsauttaa iframe-kehystä tai iframe-elementtiä.

Joten täydellinen koodi olisi seuraavanlainen:

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***************");
	        }
	    }

lähtö:

Selain siirtyy sivulle, joka koostuu yllä olevasta iframe-kehyksestä ja napsauttaa iframe-kehystä.

Sisäkkäisten kehysten käsite Selenium

Oletetaan, että siinä on kaksi kehystä toistensa sisällä, kuten alla olevassa kuvassa näkyy ja vaatimuksemme on tulostaa teksti ulompaan ja sisäkehykseen.

Sisäkkäisten kehysten tapauksessa

  • Aluksi meidän on vaihdettava ulompaan kehykseen joko indeksin tai iframen ID:n perusteella
  • Kun siirrymme ulompaan kehykseen, voimme löytää ulomman kehyksen sisältämien iframe-kehysten kokonaismäärän ja
  • Voimme vaihtaa sisäkehykseen millä tahansa tunnetuista menetelmistä.

Kun poistumme kehyksestä, meidän on poistuttava ulos samassa järjestyksessä kuin menimme sisäkehyksestä ensin ja sitten ulkokehyksestä.

Yllä olevan sisäkkäisen kehyksen HTML-koodi on alla olevan kuvan mukainen.

Sisäkkäisten kehysten käsite Selenium

Yllä oleva HTML-koodi selittää selvästi iframe-tunnisteen (korostettu vihreällä) toisessa iframe-tagissa, mikä osoittaa sisäkkäisten iframe-kehysten olemassaolon.

Alla on ohjeet ulkokehykseen vaihtamiseen ja tekstin tulostamiseen ulkokehyksiin:

Vaihe 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());
  • Vaihda ulompaan kehykseen.
  • Tulostaa tekstin ulkokehykseen.

Kun siirrymme ulkokehykseen, meidän pitäisi tietää, onko ulkokehyksen sisällä sisäkehystä

Vaihe 2)

size = driver.findElements(By.tagName("iframe")).size();
    // prints the total number of frames inside outer frame           
    System.out.println("Total Frames --" + size);
  • Hakee ulkokehyksen sisällä olevien iframe-kehysten kokonaismäärän.
  • Jos kooksi löytyi '0', kehyksen sisällä ei ole sisäkehystä.

Vaihe 3)

driver.switchTo().frame(0); // Switching to innerframe
System.out.println(driver.findElement(By.xpath("xpath of the inner element ")).getText());
  • Vaihda sisäkehykseen
  • Tulostaa tekstin sisäkehykseen.

Tässä on täydellinen koodi:

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();
	}
}

ulostulo:

Yllä olevan koodin tulos tulostaisi tekstin sisäkehykseen ja ulkokehykseen.

Lue lisää Readmore