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




भाषाओं इस (3)

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


Answers

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

>>> 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'

यदि आप return var; जोड़कर नीचे दिए गए उदाहरण कोड में फ़ंक्शन के रूप में लिखे गए कोड के रूप में लिखे गए कोड को फिसलते हैं तो भी आप मान वापस कर सकते हैं return var; अंत में जहां 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 में URLs सरणी होगी।


क्लोजर्स के लेखक ने Closures को अच्छी तरह से समझाया है, कारण बताते हुए कि हमें उनकी आवश्यकता क्यों है और व्याख्यान को समझने के लिए आवश्यक लेक्सिकल एंटरप्राइज को समझाते हुए भी।
सारांश यहां दिया गया है:

क्या होगा यदि एक चर का उपयोग किया जाता है, लेकिन यह स्थानीय नहीं है? जैसे यहाँ:

इस मामले में, दुभाषिया बाहरी LexicalEnvironmentवस्तु में परिवर्तनीय पाता है ।

प्रक्रिया में दो कदम होते हैं:

  1. सबसे पहले, जब कोई फ़ंक्शन f बनाया जाता है, तो यह खाली स्थान में नहीं बनाया जाता है। वर्तमान लेक्सिकल एंटरटेनमेंट ऑब्जेक्ट है। उपर्युक्त मामले में, यह खिड़की है (कार्य निर्माण के समय एक अनिर्धारित है)।

जब कोई फ़ंक्शन बनाया जाता है, तो यह एक छिपी हुई संपत्ति हो जाती है, जिसका नाम [[स्कोप]] होता है, जो वर्तमान लेक्सिकल एंटरप्राइज़ का संदर्भ देता है।

यदि एक चर पढ़ा जाता है, लेकिन कहीं भी नहीं पाया जा सकता है, तो एक त्रुटि उत्पन्न होती है।

नेस्टेड फ़ंक्शंस

कार्यों को एक दूसरे के अंदर घोंसला जा सकता है, जो लेक्सिकल वातावरण की एक श्रृंखला बना सकता है जिसे स्कोप चेन भी कहा जा सकता है।

तो, फ़ंक्शन जी में जी, ए और एफ तक पहुंच है।

बंद

बाहरी कार्य समाप्त होने के बाद एक नेस्टेड फ़ंक्शन लाइव रह सकता है:

लेक्सिकल वातावरण को चिह्नित करना:

जैसा कि हम देखते हैं, this.sayउपयोगकर्ता ऑब्जेक्ट में एक संपत्ति है, इसलिए उपयोगकर्ता पूरा होने के बाद यह लाइव रहता है।

और यदि आपको याद है, जब this.sayबनाया जाता है, तो यह (प्रत्येक कार्य के रूप में) this.say.[[Scope]]वर्तमान लेक्सिकल पर्यावरण के लिए आंतरिक संदर्भ प्राप्त करता है। तो, वर्तमान उपयोगकर्ता निष्पादन का लेक्सिकल पर्यावरण पर्यावरण में रहता है। उपयोगकर्ता के सभी चर भी इसकी गुण हैं, इसलिए उन्हें सावधानीपूर्वक रखा जाता है, आमतौर पर जंक नहीं किया जाता है।

पूरा बिंदु यह सुनिश्चित करना है कि यदि आंतरिक कार्य भविष्य में बाहरी चर का उपयोग करना चाहता है, तो ऐसा करने में सक्षम है।

संक्षेप में:

  1. आंतरिक कार्य बाहरी लेक्सिकल पर्यावरण के संदर्भ में रहता है।
  2. बाहरी फ़ंक्शन समाप्त होने के बावजूद आंतरिक फ़ंक्शन किसी भी समय चर से एक्सेस कर सकता है।
  3. ब्राउजर लेक्सिकल एंटरप्राइज और इसकी सभी गुणों (चर) को मेमोरी में तब तक रखता है जब तक कोई आंतरिक फ़ंक्शन न हो।

इसे बंद करना कहा जाता है।







javascript python selenium-webdriver