सेलेनियम में जावास्क्रिप्ट कोड का रिटर्न मूल्य प्राप्त करना


102

मैं अपनी वेबसाइट के कुछ स्वचालित परीक्षणों के लिए सेलेनियम 2 का उपयोग कर रहा हूं, और मैं कुछ जावास्क्रिप्ट कोड का रिटर्न मूल्य प्राप्त करने में सक्षम होना चाहता हूं। यदि foobar()मेरे वेबपेज में एक जावास्क्रिप्ट फ़ंक्शन है और मैं उसे कॉल करना चाहता हूं और मेरे पायथन कोड में रिटर्न वैल्यू प्राप्त करता हूं, तो मैं उसे करने के लिए क्या कह सकता हूं?

जवाबों:


166

किसी मान को वापस returnकरने के लिए, execute_script()विधि में पारित स्ट्रिंग में जावास्क्रिप्ट कीवर्ड का उपयोग करें , जैसे

>>> from selenium import webdriver
>>> wd = webdriver.Firefox()
>>> wd.get("http://localhost/foo/bar")
>>> wd.execute_script("return 5")
5
>>> wd.execute_script("return true")
True
>>> wd.execute_script("return {foo: 'bar'}")
{u'foo': u'bar'}
>>> wd.execute_script("return foobar()")
u'eli'

यदि जावास्क्रिप्ट द्वारा जावास्क्रिप्ट को परिभाषित नहीं किया जाता है, तो रिटर्न वैल्यू क्या होगी? क्या यह एक अपवाद या केवल एक खाली स्ट्रिंग फेंकती है?
एलेक्स

यदि चर को परिभाषित नहीं किया गया है, तो यह रिटर्न करता हैNone
dbJones

7
उन नवाबों के लिए त्वरित नोट, return_value = wd.execute_script("return {foo: 'bar'}")आपके कार्यक्रम में बाद में उपयोग किए जाने वाले लौटे मूल्य को संग्रहीत करेगा।
ntk4

1
दस्तावेज़ को निर्दिष्ट का अभाव एक Retruns: ध्यान दें। हालांकि टीयर उपयोग में: नमूना उन्होंने एक जेएस डाला जो दस्तावेज़ शीर्षक लौटाता है। बेहतर स्पष्ट रूप से निर्दिष्ट करने के लिए : Retruns उनके दस्तावेज़ में
woodz

7

यदि आप नीचे दिए गए उदाहरण कोड की तरह एक फ़ंक्शन के रूप में लिखे गए अपने स्निप कोड नहीं रखते हैं, तो आप मूल्यों को वापस कर सकते हैं, बस return var;उस छोर पर जोड़कर जहां चर वह है जिसे आप वापस करना चाहते हैं।

result = driver.execute_script('''cells = document.querySelectorAll('a');
URLs = []
console.log(cells);
[].forEach.call(cells, function (el) {
    if(el.text.indexOf("download") !== -1){
    //el.click();
    console.log(el.href)
    //window.open(el.href, '_blank');
    URLs.push(el.href)
    }
});
return URLs''')

resultइसमें वह सरणी समाहित होगी जो URLsइस मामले में है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.