2011-04-07 15 views
79

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

उत्तर

132

एक मूल्य वापस करने के लिए, बस returnexecute_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' 
+0

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

+0

यदि परिवर्तनीय परिभाषित नहीं किया गया है, तो यह उन नए लोगों के लिए 'कोई नहीं' – dbJones

+3

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

0

आप मूल्यों लौट सकते हैं, भले ही आप नीचे दिए गए उदाहरण कोड में की तरह एक समारोह के रूप में लिखे कोड के अपने Snipped की जरूरत नहीं है बस अंत जहां वर चर वापस करना चाहते है पर 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 इस मामले में है कि शामिल होंगे।