2015-02-18 7 views
5

मैं सेलेनियम के वेबड्राइवर का उपयोग कर एक गैर दृश्यमान टेक्स्ट फ़ील्ड तक पहुंचने के लिए एक रास्ता तलाश रहा हूं। एक ही रास्ता मैं यह काम करने के लिए मिल गया है बजाय XYZ का उपयोग करने कामैं जावास्क्रिप्ट में पाइथन चर का उपयोग कैसे करूं?

driver.execute_script("document.getElementById('text_field').value+='XYZ'") 

उपयोग कर रहा है हालांकि, मैं अजगर चर का उपयोग करना चाहते हैं।

उत्तर

0

मैं समस्या को समझने हूँ सही ढंग से आप के बजाय एक var पारित करने के लिए कोशिश कर रहे हैं कठिन कोडित XYZ

driver.execute_script("document.getElementById('text_field').value+='" + var + "'"); 
+0

संपादन के लिए धन्यवाद @ जोसेफ – Saifur

1

जब तक मैं कुछ misisng रहा हूँ, एक विकल्प है:

driver.execute_script("document.getElementById('text_field').value+='{0}'".format(foo)) 
2

आप की जरूरत है अपने पायथन वैरिएबल के मान का जावास्क्रिप्ट स्ट्रिंग प्रस्तुति प्राप्त करने के लिए, और इसे अपने जावास्क्रिप्ट कमांड में डालें। सौभाग्य से, पायथन का json मॉड्यूल आपके लिए यह करेगा।

from json import dumps 

driver.execute_script("document.getElementById('text_field').value+=" + 
         dumps(my_python_variable)) 

मैं उद्धरण चिह्नों में मूल्य डालने से सावधान रहूंगा क्योंकि अन्य उत्तरों दिखाए गए हैं। क्या होगा यदि मूल्य में पहले से ही उद्धरण चिह्न हैं, या विशेष पात्र जिन्हें भागने की आवश्यकता है? क्या होगा यदि यह बिल्कुल एक स्ट्रिंग नहीं है? json.dumps आपके परिवर्तनीय प्रकार के लिए उपयुक्त सभी आवश्यक स्वरूपण और आपके लिए भागने को संभालेगा।

+0

मुझे गर्म और अस्पष्ट देने के लिए पर्याप्त जानकारी के साथ बिल्कुल सही जवाब! –

+0

अगर आपको यह पसंद आया, तो इसे स्वीकार करने में संकोच न करें! – kindall

5

जावा स्क्रिप्ट कोड आप सेलेनियम के माध्यम से निष्पादित करने के लिए चर पारित करने के लिए सामान्य तरीके से सिर्फ execute_script को चर पारित करने के लिए है:

foo = "something" 
driver.execute_script(""" 
var foo = arguments[0]; 
document.getElementById('text_field').value += foo; 
""", foo) 

आप arguments object के माध्यम से जावास्क्रिप्ट तरफ तर्क पुनः प्राप्त।

function() { 
    var foo = arguments[0]; 
    document.getElementById('text_field').value += foo; 
} 

और समारोह तर्क execute_script को पारित किए गए के साथ कहा जाता है: आप तो क्या निष्पादित किया जाता है की तरह कुछ है, क्योंकि कोड आप execute_script के पास एक समारोह में लपेटा जाता है यह कर सकते हैं। तर्क सेलेनियम द्वारा स्वचालित रूप से क्रमबद्ध किया जाता है।

.format या समेकित तारों के साथ इंटरपोलिंग करने के लिए नाजुक तरीके हैं। उदाहरण के लिए यदि आप 'var foo = "' + foo + '"' करते हैं तो यह आपके foo वैरिएबल में डबल कोट होगा ('var foo = "{0}"'.format(foo) के साथ)। का उपयोग करते हुए json.dumps इससे बचने के लिए जा रहा है और ज्यादातर मामलों में काम करेगा लेकिन यह कुछ इस तरह की देखभाल नहीं करता है:

el = driver.find_element(".something") 

// Do stuff with el on the Python side. 

driver.execute_script(""" 
var el = arguments[0]; 
// Do something with el on the JavaScript side. 
""") 

सेलेनियम जानता है कि कैसे कन्वर्ट करने के लिए अजगर आपत्ति यह आप देता है जब आप एक डोम के लिए एक वस्तु को खोजने जावास्क्रिप्ट पक्ष पर वस्तु। json.dumps ऐसा नहीं करता है।

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

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