2013-07-25 11 views
5

मेरे पास एक ऐसा पृष्ठ है जो बिना आईफ्रेम के शुरू होता है, और उसके बाद जावास्क्रिप्ट के माध्यम से एक एंकर पर क्लिक करने के बाद एक आईफ्रेम जोड़ा जाता है।सेलेनियम वेबड्राइवर का उपयोग करके गतिशील रूप से जोड़े गए आईफ्रेम का उपयोग कैसे किया जा सकता है?

मेरी समस्या यह है कि driver.switch_to_frame(x) के साथ फ्रेम पर स्विच करते समय भी मैं अपनी कोई भी सामग्री पा सकता हूं।

मैंने driver.find_elements_by_tag_name('iframe') के साथ मिले फ्रेमों के माध्यम से लूपिंग करने की कोशिश की है और उनमें से प्रत्येक को कक्षा के लिए जांचने की उम्मीद है, लेकिन ऐसा कोई भाग्य नहीं है।

driver.switch_to_active_element() मुझे सही iframe भी नहीं देता है।

मुझे यकीन नहीं है कि जेएस डीओएम परिवर्तनों के कारण आईफ़्रेम सामग्री केवल पहुंच योग्य नहीं है, तो सेलेनियम ड्राइवर से क्या देख रहा है में परिलक्षित नहीं होता है। मैं बिना किसी समस्या के अन्य iframes के लिए एक ही प्रक्रिया के माध्यम से चला गया है, लेकिन यह सिर्फ सहयोग नहीं करेगा। नीचे जो मैं कर रहा हूं उसका सरलीकृत संस्करण नीचे है।

जे एस से पहले:

<html> 
    <body> 
     <a onclick="jsmagic">load iframe</a> 
    </body> 
</html> 

जे एस के बाद:

<html> 
    <body> 
     <iframe><div class='modal'>Message</div></iframe> 
     <a onclick="jsmagic">load iframe</a> 
    </body> 
</html> 

अजगर WebDriver प्रयास:

frame = driver.find_elements_by_tag_name('iframe')[0] 
driver.switch_to_frame(frame) 
driver.find_elements_by_class_name('modal') 
:

driver.switch_to_frame(0) 
driver.find_elements_by_class_name('modal') 
driver.switch_to_default_content() 

मैं भी ऐसे ही बदलाव की कोशिश की है

मैंने ऑब्जेक्ट पर जाने के लिए driver.execute_script का उपयोग करने का प्रयास किया है, लेकिन सामग्री पर पहुंचना मेरे बाहर है। फ़ायरफ़ॉक्स कंसोल कमांड करता है कि काम सेलेनियम के माध्यम से नहीं चलता है।

+0

कैसे 'driver.page_source' का उपयोग कर, यह एक फाइल करने के लिए लेखन, और देख अगर यह सामग्री शामिल है के बारे में तुम आशा करते हो। इससे समस्या हल नहीं होगी, लेकिन यह आपको डीबगिंग प्रक्रिया में मदद कर सकती है। यदि इसमें 'div' है जो आप चाहते हैं, और सेलेनियम अभी भी सहयोग नहीं करेगा, तो आप अन्य टूल का उपयोग करके पृष्ठ स्रोत को पार्स कर सकते हैं। – ChrisP

+0

क्या आपका स्रोत HTML लगभग उसी जैसा दिखता है जैसा आपने ऊपर पोस्ट किया था या आपने इसे संक्षिप्तता के लिए काट दिया था? फ्रेम भी दिखता है? क्या आप "संदेश" टेक्स्ट देखते हैं? – nilesh

+0

@ChrisP मैं वर्तमान में लिंक पाठ खोजने के लिए frame.parent.page_source का उपयोग कर रहा हूं, और यह काम करता है। ऐसा नहीं है कि, क्योंकि मैं उम्मीद करता हूं कि फ्रेम में टेक्स्ट शामिल होगा, माता-पिता नहीं। – Belrog

उत्तर

3

ऐसा लगता है कि यह एक समय मुद्दा है, मैं इन पंक्तियों के साथ कुछ के साथ समाप्त हो गया:

def modal_must_show(self, string): 
    for _ in range(12): 
    for frame in self.driver.find_elements_by_tag_name('iframe'): 
     try: 
     if not frame.is_displayed(): 
      continue 
     if frame.parent.page_source.find(string): 
      return 
     except: 
     pass 
    assert False, 'Modal missing string' 
संबंधित मुद्दे

 संबंधित मुद्दे