8

मेरे पास निम्नलिखित जावास्क्रिप्ट कोड null लौटा रहा है जब सेलेनियम JavascriptExecutor के माध्यम से चलाया गया। हालांकि, फ़ायरफ़ॉक्स डेवलपर कंसोल में चलने पर एक ही कोड एक मान लौटाता है।सेलेनियम जावास्क्रिप्ट निष्पादक शून्य

JavascriptExecutor jsExec = (JavascriptExecutor)driver; 
Object inpType = 
     jsExec.executeScript("function tmp(){...}tmp();"); 
System.out.println("Type: " + inpType); 

ऊपर आउटपुट "पाठ" स्ट्रिंग के बजाय null:

function tmp(){ 
    var attrb = jQuery(jQuery("[name='q']")[0]).attr('type'); 
    if(typeof attrb !== 'undefined' && attrb !== false){ 
     return attrb; 
    } else { 
     return ''; 
    } 
} 

tmp(); 

नीचे जे एस ऊपर के रूप में ही साथ मेरे WebDriver कोड है। कोई विचार?

+0

ऊपर मेरा सेलेनियम कोड जोड़ा है, कृपया एक नज़र डालें। धन्यवाद। – Jsm

उत्तर

1

समस्या यह है कि आप executeScript() में दो कथन निष्पादित करते हैं। Tmp() की फ़ंक्शन परिभाषा और tmp() की फ़ंक्शन कॉल।

मुझे विवरण नहीं पता, लेकिन फ़ंक्शन परिभाषा शून्य वापस आती है।

चूंकि executeScript पहला मान देता है जिसे वापस किया जा सकता है, यह शून्य हो जाता है। यदि आप फ़ंक्शन को परिभाषित नहीं करते हैं और कोड इनलाइन लिखते हैं, तो यह काम करेगा।

JavascriptExecutor jsExec = (JavascriptExecutor) driver; 
Object inpType = jsExec 
    .executeScript("var attrb = jQuery(jQuery(\"[name='q']\")[0]).attr('type');"+ 
      "if(typeof attrb !== 'undefined' && attrb !== false)" + 
      "{return attrb;}" + 
      "else{return '';}"); 
System.out.println("-------------- Type: " + inpType); 

यह आपके अपेक्षित मूल्य को मुद्रित करना चाहिए।

संपादित करें: इसके अलावा, आपका पोस्ट कोड "" से [name='q'] से बच नहीं आता है। यह स्ट्रिंग समाप्त होता है और वाक्यविन्यास त्रुटियों का कारण बनता है।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। मेरे पास पहले सब कुछ इनलाइन है, लेकिन इसने फ़ायरफ़ॉक्स को एक त्रुटि वापस करने का कारण बताया जो "फ़ंक्शन में वापस नहीं लौटाता" है, यही कारण है कि मैंने इस स्निपेट को फ़ंक्शन tmp() में बुलाया और कहा। उद्धरण के लिए आ रहा है, उपरोक्त एक टाइपो है। स्क्रिप्ट गतिशील रूप से जेनरेट की गई है जहां मैंने अपने कोड में '' 'से बच निकला है, सादगी के लिए मैंने उपर्युक्त जावास्क्रिप्ट को फ़ंक्शन कॉल में कॉपी किया है। – Jsm

+0

@ जेएसएम 'executeScript()' में वापसी का विवरण हो सकता है और कोई त्रुटि नहीं फेंकती है। क्यों नहीं बस 'executeScript() 'के लिए फ़ंक्शन इनलाइन का उपयोग करें, और फ़ायरफ़ॉक्स में सीधे प्रवेश के लिए फ़ंक्शन में लपेटा गया है? –

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