का उपयोग करते हुए एक आईफ्रेम का चयन करना तो, मैं पूरी तरह से परेशान था कि सेलेनियम में ऐसा कैसे किया जाए, और कहीं भी जवाब नहीं मिला, इसलिए मैं अपना अनुभव साझा कर रहा हूं।पायथन सेलेनियम
मैं एक आईफ्रेम चुनने की कोशिश कर रहा था और कोई भाग्य नहीं था (या फिर भी दोहराना नहीं)। एचटीएमएल इस तरह देखा:
@timed(650)
def test_pedometer(self):
sel = self.selenium
...
time.sleep(10)
for i in range(5):
try:
if sel.select_frame("css=#upload_file_frame"): break
except: pass
time.sleep(10)
else: self.fail("Cannot find upload_file_frame, the iframe for the device upload image buttons")
दोहराया सेलेनियम आदेशों के हर संयोजन के साथ विफल रहता है:
<iframe id="upload_file_frame" width="100%" height="465px" frameborder="0" framemargin="0" name="upload_file_frame" src="/blah/import/">
<html>
<body>
<div class="import_devices">
<div class="import_type">
<a class="secondary_button" href="/blah/blah/?source=blah">
<div class="import_choice_image">
<img alt="blah" src="/public/images/blah/import/blah.png">
</div>
<div class="import_choice_text">Blah Blah</div>
</a>
</div>
</div>
</body>
</html>
अजगर कोड (सेलेनियम लाइब्रेरी का उपयोग कर) इस का उपयोग करते हुए इस आइफ्रेम खोजने की कोशिश कर रहा था मैं खोज सकता हूँ। कभी-कभी सफलता पुनरुत्पादित नहीं होगी, तो शायद यह किसी प्रकार की दौड़ की स्थिति या कुछ थी? इसे सेलेनियम में उचित तरीके से प्राप्त करने का सही तरीका कभी नहीं मिला।
आप सेलेनियम के getEval का उपयोग करना बेहतर होगा कमांड (शायद पाइथन बाइंडिंग में "get_eval") इसके रनस्क्रिप्ट कमांड के बजाए। प्राप्त करें जब तक जावास्क्रिप्ट कोड पूरा नहीं हो जाता है, जबकि रनस्क्रिप्ट सरल
सेलेनियम का चयनफ्रेम कमांड
css=
जैसे सभी मानक लोकेटर स्वीकार करता है, लेकिन इसमें विशेष रूप से फ्रेम और IFRAME तत्वों के साथ काम करने वाले locators का एक अतिरिक्त सेट भी है।the doc के रूप में कहते हैं:
सामान्य तौर पर पहचान करने के लिए, आप विशेष लोकेटर का उपयोग करके बेहतर भाग्य होगा, खासकर यदि आप सही संदर्भ पहले स्थापित करते हैं (उदाहरण,
select_frame("relative=top"); select_frame("id=upload_file_frame");
)।स्रोत
2011-09-24 14:31:05
हाँ, selectFrame मेरे लिए काम नहीं किया। इसका मतलब यह नहीं है कि यह किसी के लिए काम नहीं करेगा, लेकिन मैंने इसे वास्तव में 5 में लगभग एक बार फ्रेम का चयन करने के लिए पाया। – rossdavidh
आपको जावास्क्रिप्ट एक्स्सेलर का उपयोग करने की आवश्यकता नहीं है। आपको बस इतना करना की जरूरत फ्रेम में स्विच था और फिर वापस बाहर स्विच, इसलिए जैसे:
जब तक आप इस के साथ सावधान कर रहे हैं, तो आप एक समस्या है कभी नहीं होगा। एकमात्र बार जब मैं हमेशा जावास्क्रिप्ट एक्स्सेलर का उपयोग करता हूं तो विंडो फोकस प्राप्त करना है क्योंकि मुझे लगता है कि जावास्क्रिप्ट का उपयोग करना उस मामले में अधिक विश्वसनीय है।
स्रोत
2013-05-09 23:42:06 djangofan
यह मेरे लिए पाइथन (v।2.7), webdriver & सेलेनियम जब iframes के साथ परीक्षण और iframe के भीतर डेटा सम्मिलित करने का प्रयास:
स्रोत
2014-06-18 13:05:38
किसी भी तरह वेबड्राइवर xpath के साथ खोज करते समय तत्वों को आईफ्रेम में पाता है। मैंने सीएसएस, आईडी द्वारा तत्वों को खोजने का प्रयास किया है, लेकिन यह हमेशा मुझे मौजूदा तत्व की त्रुटि नहीं देता है (वास्तव में टाइमआउट विफलता क्योंकि मैंने waitForElement कमांड का उपयोग किया था)। मैंने नहीं सोचा था कि एक्सपैथ द्वारा खोज तत्व अंतर करेगा, लेकिन जब मैंने विचारों से बाहर निकल रहा था तो सौभाग्य से मैंने कोशिश की। आपका बहुत बहुत धन्यवाद! – GOstrowsky
'driver.switch_to_frame()' अब बहिष्कृत है, कृपया 'driver.switch_to.frame()' –
यहाँ एक काम ट्यूटोरियल जो आप को समझने के लिए अजगर के साथ सेलेनियम webdriver का उपयोग कर एक वेब पेज पर iframes को संभालने के लिए मदद है: https://www.youtube.com/watch?v=sfdWF4vBZ2o
यह आदेश iframes को संभालने के लिए प्रयोग किया जाता है: driver.switch_to.frame (frame_id)
स्रोत
2016-12-10 19:42:17
तो
iframe
गतिशील नोड है, यह भीiframe
appeare के लिए इंतजार करना संभव है nce स्पष्ट रूप से और फिर इसेExpectedConditions
उपयोग भी कर:तो
iframe
@id
या@name
यहdriver.find_element_by_xpath()
,driver.find_element_by_tag_name()
, आदि का उपयोग आम WebElement के रूप में पाया जा सकता है नहीं है ..:करने के लिए
iframe
से वापस स्विच करें:स्रोत
2018-02-11 08:19:11 Andersson