सेलेनियम वेबड्राइवर में iFrames को कैसे हैंडल करें: switchTo ()

विषय - सूची:

Anonim

सेलेनियम वेबड्राइवर में आईफ्रेम

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

इस ट्यूटोरियल में, आप सीखेंगे -

  1. आइफ्रेम की पहचान कैसे करें:
  2. वेब ड्रायवर आदेशों का उपयोग करते हुए iframes में तत्वों पर स्विच कैसे करें:
  3. नेस्टेड फ्रेम्स की अवधारणा (फ्रेम्स के अंदर फ्रेम्स):

आइफ्रेम की पहचान कैसे करें:

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

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

सेलेनियम वेबड्राइवर का उपयोग करके आइफ्रेम की पहचान कैसे करें

हम नीचे दिए गए तरीकों का उपयोग करके सेलेनियम में फ़्रेमों की पहचान कर सकते हैं:

  • तत्व पर राइट क्लिक करें, यदि आपको 'यह फ़्रेम' जैसा विकल्प मिलता है, तो यह एक iframe है। (कृपया उपरोक्त डायर्स देखें)
  • पेज पर राइट क्लिक करें और Page व्यू पेज सोर्स ’पर क्लिक करें और ame iframe’ के साथ सर्च करें, अगर आपको name iframe ’के साथ कोई टैग नाम मिल सकता है, तो यह पेज को iframe से युक्त कहना है।

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

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

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

वेब ड्रायवर आदेशों का उपयोग करते हुए iframes में तत्वों पर कैसे स्विच करें:

मूल रूप से, हम 3 तरीकों का उपयोग करके सेलेनियम में तत्वों को संभाल सकते हैं और फ्रेम को संभाल सकते हैं।

  • सूचकांक द्वारा
  • नाम या ईद से
  • वेब तत्व द्वारा

अनुक्रमणिका द्वारा फ़्रेम पर स्विच करें:

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

इफ्रेम का सूचकांक '0' से शुरू होता है।

मान लीजिए कि यदि पृष्ठ में 100 फ़्रेम हैं, तो हम सूचकांक का उपयोग करके सेलेनियम में फ़्रेम पर स्विच कर सकते हैं।

  • Driver.switchTo ()। फ्रेम (0);
  • Driver.switchTo ()। फ्रेम (1);

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

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

  • Driver.switchTo ()। फ्रेम ("iframe1");
  • Driver.switchTo ()। फ़्रेम ("तत्व का आईडी");

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

आइए नीचे की छवि में प्रदर्शित सेलेनियम में फ्रेम को स्विच करने के लिए एक उदाहरण लें। हमारी आवश्यकता iframe पर क्लिक करने की है।

हम इस iframe को निम्न URL के माध्यम से एक्सेस कर सकते हैं: http: //demo.guru99.com/test/guru99home/

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

चरण 1)

WebDriver ड्राइवर = नया FirefoxDriver ();Driver.get ("http://demo.guru99.com/test/guru99home/");Driver.manage ()। window ()। मैक्सिमम ();
  • हम फ़ायरफ़ॉक्स ड्राइवर को इनिशियलाइज़ करते हैं।
  • "Guru99" साइट पर नेविगेट करें जिसमें iframe शामिल है।
  • खिड़की को बड़ा किया।

चरण 2)

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

चरण 3)

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

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

सार्वजनिक वर्ग SwitchToFrame_ID {सार्वजनिक स्थैतिक शून्य main (String [] args) {WebDriver ड्राइवर = नया FirefoxDriver (); // ब्राउज़र पर नेविगेट करता हैDriver.get ("http://demo.guru99.com/test/guru99home/");// एक आइफ्रेम वाले पेज पर नेविगेट करता हैDriver.manage ()। window ()। मैक्सिमम ();Driver.switchTo ()। फ्रेम ("a077aa5e"); // फ्रेम को आईडी द्वारा स्विच करनाSystem.out.println ("******** हम iframe *******" पर स्विच कर रहे हैं);Driver.findElement (By.xpath ("html / body / a / img"))। क्लिक करें ();// iframe पर क्लिक करता हैSystem.out.println ("********* हम कर रहे हैं ***************");}}

आउटपुट:

ब्राउज़र उस पृष्ठ पर नेविगेट करता है जिसमें उपरोक्त iframe शामिल है और iframe पर क्लिक करता है।

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

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

  • Driver.switchTo ()। फ़्रेम (वेबइमेंट);

मेन फ्रेम में वापस कैसे स्विच करें

हमें इफ्रेम से बाहर आना होगा।

मूल फ़्रेम पर वापस जाने के लिए, आप स्विचटो () का उपयोग कर सकते हैं।

Driver.switchTo (); parentFrame ();Driver.switchTo ()। DefaultContent ();

अगर हम ID या वेब एलीमेंट का उपयोग करके स्विच नहीं कर सकते तो फ्रेम पर कैसे स्विच करें:

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

उपरोक्त चिंता का हल यह है कि, हमें iframe के सूचकांक को खोजना चाहिए, जिसके माध्यम से तत्व लोड किया जा रहा है और फिर हमें सूचकांक के माध्यम से iframe पर स्विच करने की आवश्यकता है।

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

चरण 1)

WebDriver ड्राइवर = नया FirefoxDriver ();Driver.get ("http://demo.guru99.com/test/guru99home/");Driver.manage ()। window ()। मैक्सिमम ();
  • फ़ायरफ़ॉक्स चालक को प्रारंभिक करें।
  • "Guru99" साइट पर नेविगेट करें जिसमें iframe शामिल है।
  • खिड़की को बड़ा किया।

चरण 2)

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

चरण 3)

इस कदम का उद्देश्य इफ्रेम के सूचकांक का पता लगाना होगा।

for (int i = 0; मैं <= size; i ++) {Driver.switchTo ()। फ्रेम (i);int Total = driver.findElements (By.xpath ("html / body / a / img")। size ();System.out.println (कुल);Driver.switchTo ()। DefaultContent () ;;

"Forloop" के ऊपर पेज के सभी iframes को iterates करता है और यह '1' प्रिंट करता है यदि हमारा आवश्यक iframe पाया गया था तो '0' लौटाता है।

यहाँ चरण 3 तक का पूरा कोड है:

सार्वजनिक वर्ग IndexOfIframe {सार्वजनिक स्थैतिक शून्य main (String [] args) {WebDriver ड्राइवर = नया FirefoxDriver ();Driver.get ("http://demo.guru99.com/test/guru99home/");Driver.manage ()। window ()। मैक्सिमम ();//driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe"))। size ();for (int i = 0; मैं <= size; i ++) {Driver.switchTo ()। फ्रेम (i);int Total = driver.findElements (By.xpath ("html / body / a / img")। size ();System.out.println (कुल);Driver.switchTo ()। DefaultContent ();}}}

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

आउटपुट:

1०००००
आउटपुट सत्यापित करें, आप 0 और 1 की श्रृंखला पा सकते हैं।
  • जहां भी आपको आउटपुट में '1' मिलता है, वह फ़्रेम का सूचकांक है जिसके द्वारा तत्व लोड किया जा रहा है।
  • चूंकि iframe का इंडेक्स '0' से शुरू होता है, यदि आपको 1 में 1 सेंट लगता है, तो इंडेक्स 0 है।
  • यदि आप 1 में 3 आरडी जगह पाते हैं , तो सूचकांक 2 है।
सूचकांक मिलने के बाद हम लूप के लिए टिप्पणी कर सकते हैं। चरण 4)
Driver.switchTo ()। फ्रेम (0); 
  • एक बार जब आप तत्व का सूचकांक पाते हैं, तो आप ऊपर दिए गए कमांड का उपयोग करके फ़्रेम पर स्विच कर सकते हैं।
  • Driver.switchTo ()। फ़्रेम (चरण 3 से पाया गया सूचकांक);
चरण 5)
Driver.findElement (By.xpath ("html / body / a / img"))। क्लिक करें ();
  • उपरोक्त कोड iframe में iframe या element पर क्लिक करेगा।
तो पूरा कोड नीचे की तरह होगा:
सार्वजनिक वर्गसार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) NoSuchElementException {फेंकता हैWebDriver ड्राइवर = नया FirefoxDriver ();Driver.get ("http://demo.guru99.com/test/guru99home/");Driver.manage ()। window ()। मैक्सिमम ();// int size = driver.findElements (By.tagName ("iframe"))। size ();/ * के लिए (int i = 0; मैं <= size; i ++) {Driver.switchTo ()। फ्रेम (i);int Total = driver.findElements (By.xpath ("html / body / a / img")। size ();System.out.println (कुल);Driver.switchTo ()। DefaultContent (); // iframe से वापस स्विच करना} * /// तत्व के सूचकांक को खोजने के लिए कोड टिप्पणी कीDriver.switchTo ()। फ्रेम (0); // फ्रेम पर स्विच करनाSystem.out.println ("******** हमें iframe *******" पर स्विच किया जाता है);Driver.findElement (By.xpath ("html / body / a / img"))। क्लिक करें ();// विज्ञापन के अनुरूप तत्व पर क्लिक करनाSystem.out.println ("********* हम कर रहे हैं ***************");}}
आउटपुट: ब्राउज़र उपरोक्त iframe वाले पेज पर नेविगेट करता है और iframe पर क्लिक करता है।

नेस्टेड फ्रेम्स की अवधारणा (फ्रेम्स के अंदर फ्रेम्स):

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

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

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

नीचे बाहरी फ़्रेम पर स्विच करने और बाहरी फ़्रेम पर टेक्स्ट प्रिंट करने के चरण हैं : चरण 1)

WebDriver ड्राइवर = नया FirefoxDriver ();Driver.get ("Url");Driver.manage ()। window ()। मैक्सिमम ();ड्राइवर।int size = driver.findElements (By.tagName ("iframe"))। size ();System.out.println ("कुल फ़्रेम -" + आकार);// फ्रेम की कुल संख्या को प्रिंट करता हैDriver.switchTo ()। फ्रेम (0); // बाहरी फ़्रेम स्विच करनाSystem.out.println (driver.findElement (By.xpath ("बाहरी का xpath"))। GetText ()); 
  • बाहरी फ़्रेम पर स्विच करें।
  • टेक्स्ट को बाहरी फ्रेम पर प्रिंट करता है।

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

चरण 2)

size = driver.findElements (By.tagName ("iframe"))। size ();// बाहरी फ्रेम के अंदर फ्रेम की कुल संख्या को प्रिंट करता हैSystem.out.println ("कुल फ़्रेम -" + आकार);
  • बाहरी फ्रेम के अंदर iframes की कुल संख्या ढूँढता है।
  • यदि आकार inside 0 ’पाया गया तो फ्रेम के अंदर कोई आंतरिक फ्रेम नहीं है।
चरण 3)
Driver.switchTo ()। फ्रेम (0); // इनरफ्रेम में स्विच करनाSystem.out.println (driver.findElement (By.xpath ("आंतरिक का xpath"))। getText ());
  • आंतरिक फ्रेम में स्विच करें
  • आंतरिक फ़्रेम पर पाठ प्रिंट करता है।
यहाँ पूरा कोड है:
सार्वजनिक वर्ग के फ्रेमसार्वजनिक स्थैतिक शून्य main (String [] args) {WebDriver ड्राइवर = नया FirefoxDriver ();Driver.get ("Url");Driver.manage ()। window ()। मैक्सिमम ();ड्राइवर।int size = driver.findElements (By.tagName ("iframe"))। size ();System.out.println ("कुल फ़्रेम -" + आकार);// फ्रेम की कुल संख्या को प्रिंट करता हैDriver.switchTo ()। फ्रेम (0); // बाहरी फ़्रेम स्विच करनाSystem.out.println (driver.findElement (By.xpath ("बाहरी का xpath"))। GetText ());// टेक्स्ट को बाहरी फ्रेम में प्रिंट करनाsize = driver.findElements (By.tagName ("iframe"))। size ();// बाहरी फ्रेम के अंदर फ्रेम की कुल संख्या को प्रिंट करता हैSystem.out.println ("कुल फ़्रेम -" + आकार);Driver.switchTo ()। फ्रेम (0); // इनरफ्रेम में स्विच करनाSystem.out.println (driver.findElement (By.xpath ("आंतरिक का xpath"))। getText ());// टेक्स्ट को आंतरिक फ्रेम में प्रिंट करनाDriver.switchTo ()। DefaultContent ();}}
आउटपुट : उपरोक्त कोड का आउटपुट टेक्स्ट को इनर फ्रेम और आउटर फ्रेम में प्रिंट करेगा।