javascript - आइफ्रेम के तहत#document से निपटने के तरीके




selenium selenium-webdriver (2)

इनलाइन फ्रेम

इनलाइन फ़्रेम का उपयोग करने में दस्तावेज़ के अनुसार, एक इनलाइन फ़्रेम एक निर्माण है जो एक दस्तावेज़ को HTML दस्तावेज़ में एम्बेड करता है ताकि एम्बेडेड डेटा ब्राउज़र की विंडो के एक सबविंडो के अंदर प्रदर्शित हो । इसका मतलब पूर्ण समावेश नहीं है और दोनों दस्तावेज स्वतंत्र हैं, और दोनों को एक के बजाय दूसरे के हिस्से के रूप में मानने के बजाय पूर्ण दस्तावेज के रूप में माना जाता है।

iframe संरचना और विवरण

  • आम तौर पर, एक आइफ्रेम तत्व के रूप में है:

    <iframe src="URL" more attributes>
    alternative content for browsers which do not
    support iframe
    </iframe>
  • ब्राउजर जो आईफ्रेम का समर्थन करते हैं, वह URL द्वारा उपविभाजित दस्तावेज़ को प्रदर्शित करता है, आमतौर पर ऊर्ध्वाधर और / या क्षैतिज स्क्रॉल बार के साथ। इस तरह के ब्राउज़र आइफ्रेम तत्व की सामग्री को अनदेखा करते हैं (यानी शुरू टैग के बीच सब कुछ <iframe...> और अंतिम टैग </iframe> )। ब्राउज़र जो iframe का समर्थन नहीं करते (या ऐसा समर्थन अक्षम है) विपरीत करता है, अर्थात सामग्री को संसाधित करता है जैसे कि <iframe...> और </iframe> टैग नहीं थे। इस प्रकार, सामग्री कुछ ब्राउज़रों द्वारा नजरअंदाज किए जाने के बावजूद मायने रखती है।

  • इसलिए संक्षेप में, इनलाइन फ्रेम का मतलब एक शामिल सुविधा नहीं है, हालांकि यह कभी-कभी समान उद्देश्यों को पूरा कर सकता है।

  • ध्यान दें कि, जब इनलाइन फ़्रेम का उपयोग किया जाता है, तो ब्राउज़र (यदि यह उनका समर्थन करता है) iframe तत्व में URL द्वारा संदर्भित सर्वर को एक अनुरोध भेजता है, और अनुरोधित दस्तावेज़ प्राप्त करने के बाद इसे एक इनलाइन फ़्रेम के अंदर प्रदर्शित करता है। इस अर्थ में इनलाइन फ्रेम एक संयुक्त ब्राउज़र-सर्वर समस्या है, लेकिन केवल ब्राउज़र को विशेष रूप से आइफ्रेम-अवगत होना चाहिए; सर्वर के दृष्टिकोण से, दस्तावेज़ के लिए बस एक सामान्य HTTP अनुरोध है, और यह दस्तावेज़ को उस ब्राउज़र के साथ क्या करने जा रहा है, इस पर किसी भी विचार के होने (या ज़रूरत) के बिना दस्तावेज़ भेजता है।

समथिंग स्मार्टर

सबसे अच्छी प्रथाओं के अनुसार एक iframe पर स्विच करते समय आपको निम्नानुसार WebDriverWait को प्रेरित करने की आवश्यकता होती है:

  • फ़्रेम नाम (जावा नमूना कोड) के माध्यम से स्विच करें:

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
  • Iframe XPath (पायथन सैंपल कोड) के माध्यम से स्विच करें:

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='ptifrmtgtframe' and @name='TargetContent']")))
  • Iframe CssSelector (C # नमूना कोड) के माध्यम से स्विच करें:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt(By.CssSelector("iframe#twitter-widget-0")));

संदर्भ

आप एक विस्तृत चर्चा पा सकते हैं कि क्या सेलेनियम वेबड्राइवर जावा में Driver.switchTo (?) फ्रेम ("फ्रेमनाम") का उपयोग किए बिना किसी फ़्रेम में किसी तत्व पर स्विच करना संभव है?

tl; डॉ

इनलाइन फ्रेम बनाम सामान्य फ्रेम

अब मैं जिस पोर्टल का परीक्षण कर रहा हूं, मैं इस समस्या के साथ आया था कि मैं कोई भी xpath लोकेटर नहीं बना सकता, कुछ समय बाद मुझे पता चला कि यह '#document' के कारण था, यह रास्ता काटता है और सरल बनाता है "कॉपी xathath "पथ को पूरी तरह से अलग तत्व के लिए निर्देशित करना।

<iframe id="FRAMENAME" src="/webclient/workspace/launch-task/REMbl?ds=BP" width="100%" height="100%" frameborder="0" data-navitemname="navitemname" style="" xpath="1">
#document
    <html>
        CODE....
    </html>

मैं इस के लिए समाधान मिल गया है यह बस इस तरह से एक स्विच जोड़ने के लिए है:

driver.switchTo().frame("FRAMENAME");

यह काम करता है और बाकी कोड को ठीक से काम करने के लिए बनाता है लेकिन, कोड को अगली पंक्ति में ले जाने तक इस कमांड को संसाधित करने में कुछ अतिरिक्त समय लगता है।

इसलिए मैं पूछना चाहता हूं कि क्या इसके लिए कोई बेहतर उपाय है? कुछ अधिक तेज / तेज?

मुझे इस बात की चिंता है कि जब मेरे पास बहुत सी स्क्रिप्ट आती हैं, तो निष्पादन समय बहुत लंबा होगा।

मैं उदाहरण के लिए आईडी लोकेटर का उपयोग नहीं करता हूं क्योंकि वे सभी गतिशील हैं इसलिए कभी-कभी xpath की आवश्यकता होती है।

धन्यवाद!


iframe अंदर तत्वों के साथ काम करने के लिए आपको इस विशिष्ट iframe स्विच करना होगा।

आपका समाधान .switchTo().frame("FRAMENAME"); सही है। सेलेनियम में iframe रैपर के साथ काम करने का कोई अन्य तरीका नहीं है।







protractor