iFrames को कैसे संभालें? Selenium वेबड्राइवर: स्विचटू()

iFrame में Selenium वेबड्राइवर

iFrame में Selenium वेबड्राइवर एक वेब पेज या एक इनलाइन फ़्रेम है जो किसी दूसरे वेब पेज में एम्बेड किया गया है या एक HTML दस्तावेज़ दूसरे HTML दस्तावेज़ के अंदर एम्बेड किया गया है। iframe का उपयोग अक्सर किसी वेब पेज में विज्ञापन जैसे अन्य स्रोतों से सामग्री जोड़ने के लिए किया जाता है। iframe को परिभाषित किया गया हैआइफ्रेम> टैग पर क्लिक करें.

iFrame की पहचान कैसे करें

हम केवल पृष्ठ देखकर या फायरबग का निरीक्षण करके फ़्रेम का पता नहीं लगा सकते।

नीचे दी गई छवि को ध्यान से देखें, प्रदर्शित किया जा रहा विज्ञापन एक Iframe है, हम केवल Firebug का उपयोग करके निरीक्षण करके इसका पता नहीं लगा सकते या पहचान नहीं सकते। तो सवाल यह है कि आप iframe की पहचान कैसे कर सकते हैं?

Iframe को पहचानें
iframe की पहचान कैसे करें? Selenium वेबड्राइवर

हम फ्रेम की पहचान कर सकते हैं Selenium नीचे दी गई विधियों का उपयोग करें:

  • तत्व पर राइट क्लिक करें, यदि आपको 'यह फ्रेम' जैसा विकल्प मिलता है तो यह एक iframe है। (कृपया उपरोक्त आरेख देखें)
  • पृष्ठ पर राइट क्लिक करें और 'पृष्ठ स्रोत देखें' पर क्लिक करें तथा 'iframe' के साथ खोजें, यदि आपको 'iframe' के साथ कोई टैग नाम मिलता है तो इसका अर्थ है कि पृष्ठ में iframe है।

उपरोक्त चित्र में आप देख सकते हैं कि 'यह फ़्रेम' विकल्प राइट क्लिक करने पर उपलब्ध है, इसलिए अब हमें यकीन है कि यह एक iframe है।

हम नीचे दिए गए स्निपेट का उपयोग करके iframes की कुल संख्या की पहचान भी कर सकते हैं।

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

फ़्रेम को कैसे संभालें Selenium वेबड्राइवर कमांड का उपयोग करना

मूलतः, हम तत्वों पर स्विच कर सकते हैं और फ़्रेम को संभाल सकते हैं Selenium 3 तरीकों का उपयोग करें.

  • सूचकांक द्वारा
  • नाम या आईडी से
  • वेब एलिमेंट द्वारा

विधि 1: इंडेक्स द्वारा फ़्रेम पर स्विच करें

इंडेक्स फ्रेम हैंडलिंग के लिए विशेषताओं में से एक है Selenium जिसके माध्यम से हम इसमें स्विच कर सकते हैं।

iframe का सूचकांक '0' से शुरू होता है।

मान लीजिए यदि पेज में 100 फ्रेम हैं, तो हम फ्रेम इन पर स्विच कर सकते हैं Selenium सूचकांक का उपयोग करके.

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

विधि 2: नाम या आईडी द्वारा फ़्रेम पर स्विच करें

नाम और आईडी फ़्रेम को संभालने के लिए विशेषताएँ हैं Selenium जिसके माध्यम से हम iframe पर स्विच कर सकते हैं।

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

आईडी के माध्यम से iframe पर स्विच करने का उदाहरण:

वेब एलिमेंट द्वारा फ्रेम में

हम इस iframe तक नीचे दिए गए URL के माध्यम से पहुँच सकते हैं: https://demo.guru99.com/test/guru99home/

फ़्रेम को संभालें Selenium वेबड्राइवर कमांड का उपयोग करना

iframe पर सीधे क्लिक करना असंभव है एक्सपाथ चूंकि यह एक iframe है। सबसे पहले हमें फ्रेम पर स्विच करना होगा और फिर हम xpath का उपयोग करके क्लिक कर सकते हैं।

चरण 1)

WebDriver driver = new FirefoxDriver();

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

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

  • हम आरंभ करते हैं Firefox चालक।
  • “guru99” साइट पर जाएँ जिसमें iframe शामिल है।
  • विंडो को अधिकतम किया गया.

चरण 2)

driver.switchTo().frame("a077aa5e");
  • इस चरण में हमें फायरबग के माध्यम से निरीक्षण करके iframe की आईडी का पता लगाना होगा।
  • फिर आईडी के माध्यम से iframe पर स्विच करें।

चरण 3)

driver.findElement(By.xpath("html/body/a/img")).click();
  • यहां हमें क्लिक किए जाने वाले तत्व का xpath पता करना होगा।
  • ऊपर दिखाए गए वेब ड्राइवर कमांड का उपयोग करके तत्व पर क्लिक करें।

यहाँ पूरा कोड है:

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

आउटपुट:

ब्राउज़र उपरोक्त iframe वाले पृष्ठ पर जाता है और iframe पर क्लिक करता है।

विधि 3: वेब तत्व द्वारा फ़्रेम पर स्विच करें

हम वेब तत्व का उपयोग करके iframe पर भी स्विच कर सकते हैं।

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

मुख्य फ़्रेम पर वापस कैसे जाएँ

हमें iframe से बाहर आना होगा.

पैरेंट फ्रेम पर वापस जाने के लिए, आप या तो switchTo().parentFrame() का उपयोग कर सकते हैं या यदि आप मुख्य (या अधिकांश पैरेंट) फ्रेम पर वापस जाना चाहते हैं, तो आप switchTo().defaultContent() का उपयोग कर सकते हैं;

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

यदि हम आईडी या वेब एलिमेंट का उपयोग करके स्विच नहीं कर सकते हैं, तो फ्रेम पर कैसे स्विच करें:

मान लीजिए यदि पृष्ठ में 100 फ्रेम हैं, और कोई आईडी उपलब्ध नहीं है, इस स्थिति में, हम यह नहीं जानते कि आवश्यक तत्व किस iframe से लोड किया जा रहा है (यह तब होता है जब हमें फ्रेम का इंडेक्स भी नहीं पता होता)।

उपरोक्त चिंता का समाधान यह है कि हमें उस iframe का इंडेक्स ढूंढना होगा जिसके माध्यम से तत्व लोड किया जा रहा है और फिर हमें इंडेक्स के माध्यम से iframe पर स्विच करना होगा।

नीचे दिए गए स्निपेट का उपयोग करके फ्रेम का सूचकांक खोजने के चरण दिए गए हैं जिसके द्वारा तत्व लोड किया जा रहा है

चरण 1)

WebDriver driver = new FirefoxDriver();
driver.get("https://demo.guru99.com/test/guru99home/");
driver.manage().window().maximize();
  • आरंभ करें Firefox चालक।
  • “guru99” साइट पर जाएँ जिसमें iframe शामिल है।
  • विंडो को अधिकतम किया गया.

चरण 2)

int size = driver.findElements(By.tagName("iframe")).size();
  • उपरोक्त कोड 'iframe' टैगनाम का उपयोग करके पृष्ठ के अंदर मौजूद iframes की कुल संख्या ज्ञात करता है।

चरण 3)

उद्देश्य यह चरण iframe का सूचकांक ज्ञात करना होगा।

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

उपरोक्त "forloop" पृष्ठ में सभी iframes को पुनरावृत्त करता है और यदि हमारा आवश्यक iframe मिल जाता है तो यह '1' प्रिंट करता है अन्यथा '0' लौटाता है।

चरण 3 तक का पूरा कोड यहां दिया गया है:

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

इस प्रोग्राम को निष्पादित करें और आउटपुट नीचे दिए अनुसार होगा:

आउटपुट:

1
0
0
0	
0
0

आउटपुट को सत्यापित करें, आप 0 और 1 की श्रृंखला पा सकते हैं।

  • जहां भी आप आउटपुट में '1' पाते हैं वह फ्रेम का सूचकांक है जिसके द्वारा तत्व लोड किया जा रहा है।
  • चूंकि iframe का सूचकांक '0' से शुरू होता है, इसलिए यदि आप 1 में 1 पाते हैंstस्थान, तो सूचकांक 0 है.
  • यदि आपको 1 में से 3 मिल जाएrd स्थान, सूचकांक 2 है.

एक बार हमें इंडेक्स मिल जाए तो हम फॉर लूप पर टिप्पणी कर सकते हैं।

चरण 4)

driver.switchTo().frame(0);
  • एक बार जब आपको तत्व का सूचकांक मिल जाए, तो आप उपरोक्त कमांड का उपयोग करके फ्रेम पर स्विच कर सकते हैं।
  • driver.switchTo().frame(चरण 3 से प्राप्त सूचकांक);

चरण 5)

driver.findElement(By.xpath("html/body/a/img")).click();
  • उपरोक्त कोड iframe या iframe में मौजूद तत्व पर क्लिक करेगा।

तो पूरा कोड नीचे जैसा होगा:

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

आउटपुट:

ब्राउज़र उपरोक्त iframe वाले पृष्ठ पर जाता है और iframe पर क्लिक करता है।

नेस्टेड फ्रेम्स की अवधारणा Selenium

आइए मान लें कि नीचे दी गई छवि में दिखाए गए अनुसार एक दूसरे के अंदर दो फ्रेम हैं और हमारी आवश्यकता बाहरी फ्रेम और आंतरिक फ्रेम में पाठ को प्रिंट करना है।

नेस्टेड फ़्रेम के मामले में,

  • सबसे पहले हमें iframe के इंडेक्स या ID द्वारा बाहरी फ्रेम पर स्विच करना होगा
  • एक बार जब हम बाहरी फ्रेम पर स्विच करते हैं तो हम बाहरी फ्रेम के अंदर iframes की कुल संख्या पा सकते हैं, और
  • हम किसी भी ज्ञात विधि से आंतरिक फ्रेम पर स्विच कर सकते हैं।

फ्रेम से बाहर निकलते समय हमें उसी क्रम में बाहर निकलना चाहिए जैसे हम पहले आंतरिक फ्रेम से और फिर बाहरी फ्रेम से उसमें प्रवेश करते हैं।

उपरोक्त नेस्टेड फ्रेम के लिए HTML कोड नीचे दिखाया गया है।

नेस्टेड फ्रेम्स की अवधारणा Selenium

उपरोक्त HTML कोड स्पष्ट रूप से iframe टैग (हरे रंग में हाइलाइट किया गया) को दूसरे iframe टैग के भीतर समझाता है, जो नेस्टेड iframes की उपस्थिति को इंगित करता है।

बाहरी फ़्रेम पर स्विच करने और बाहरी फ़्रेम पर पाठ मुद्रित करने के चरण नीचे दिए गए हैं:

चरण 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());
  • बाहरी फ़्रेम पर स्विच करें.
  • बाहरी फ्रेम पर पाठ मुद्रित करता है।

एक बार जब हम बाहरी फ्रेम पर स्विच करते हैं, तो हमें पता होना चाहिए कि बाहरी फ्रेम के अंदर कोई आंतरिक फ्रेम मौजूद है या नहीं

चरण 2)

size = driver.findElements(By.tagName("iframe")).size();
    // prints the total number of frames inside outer frame           
    System.out.println("Total Frames --" + size);
  • बाहरी फ्रेम के अंदर iframes की कुल संख्या ज्ञात करता है।
  • यदि आकार '0' पाया गया तो फ्रेम के अंदर कोई आंतरिक फ्रेम नहीं है।

चरण 3)

driver.switchTo().frame(0); // Switching to innerframe
System.out.println(driver.findElement(By.xpath("xpath of the inner element ")).getText());
  • आंतरिक फ्रेम पर स्विच करें
  • आंतरिक फ्रेम पर पाठ मुद्रित करता है.

यहाँ पूरा कोड है:

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

उत्पादन:

उपरोक्त कोड का आउटपुट आंतरिक फ्रेम और बाहरी फ्रेम में पाठ को प्रिंट करेगा।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: