2014-09-29 26 views
20

से विंडो ऑब्जेक्ट/ब्राउज़र स्कोप एक्सेस करें मैं प्रोटैक्टर के साथ परीक्षण चला रहा हूं, लेकिन जेएस 'विंडो' ऑब्जेक्ट तक पहुंचना असंभव लगता है। मैं अपने html फ़ाइल में कोई टैग इस तरहप्रोटैक्टर

var a = window.location; 

कुछ होते हैं और फिर कोशिश जोड़ने की कोशिश की उम्मीद (क) लेकिन मैं यह काम करते हैं, मैं हमेशा अपरिभाषित संदर्भ प्राप्त नहीं कर सके ...

ब्राउज़र स्कोप में मौजूद चरों तक पहुंचने के लिए मुझे कैसे प्रक्रिया करनी चाहिए?

उत्तर

21

आप कोणमापक का नवीनतम संस्करण का उपयोग कर रहे मान लिया जाये कि, मान लें कि> = 1.1.0, उम्मीद है कि> = 1.3.1

कोणमापक से सीधे पहुँच ब्राउज़र पक्ष जे एस कोड का प्रयास कर काम नहीं करेगा क्योंकि कोणमापक में चलाता जाने नोडजेएस और प्रत्येक ब्राउजर साइड कोड सेलेनियम JsonWireProtocol के माध्यम से निष्पादित किया जाता है।

अधिक विस्तार के बिना

, एक काम उदाहरण:

browser.get('https://angularjs.org/'); 

एक-लाइनर वादा है कि, आज के रूप में, '1.3.0-rc.3'

browser.executeScript('return window.angular.version.full;'); 

पर ले कर आप इसे सीधे दिया एक उम्मीद बयान कोणमापक का उपयोग कर सकते हैं उम्मीद आपके लिए वादे का वादा करता है:

expect(browser.executeScript('return window.angular.version.full;')). 
    toEqual('1.3.0-rc.3'); 

लंबा er उदाहरण आपके लिए वादे को हल करने के बिना expect के बिना स्ट्रिंग प्लस के बजाय फ़ंक्शन पास कर रहा है। यानी अधिक नियंत्रण के लिए और परिणाम के साथ कुछ फैंसी चीज करने के लिए।

browser.driver.executeScript(function() { 
    return window.angular.version.full; 
}).then(function(result) { 
    console.log('NodeJS-side console log result: ' + result); 
    //=> NodeJS-side console log result: 1.3.0-rc.3 
}); 
+1

चांदा संस्करण मैं उपयोग कर रहा हूँ के साथ वास्तव में, मैं 'browser.executeScript का इस्तेमाल किया था ('वापसी myVar;') तो (समारोह (myVar) {...});।' लेकिन पूरी तरह से काम किया , धन्यवाद! – hilnius

+2

यदि मैं इस विधि का उपयोग करके केवल विंडो ऑब्जेक्ट लौटाता हूं, तो मुझे "अधिकतम कॉल स्टैक आकार पार हो गया" मिलता है :( – chrismarx

+1

शायद किसी भी बुरे विचार को @chrismarx है, केवल वही लौटाएं जो आपको वास्तव में चाहिए;) –

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