2016-09-27 8 views
7

मेरे पास प्रोटैक्टर परीक्षण हैं जो स्थानीय रूप से ठीक से चलते हैं (प्रत्यक्ष कनेक्ट: सत्य), लेकिन जब मैं उन्हें दूरस्थ सेलेनियम सर्वर (ग्रिड) पर चलाने की कोशिश करता हूं, तो मुझे हमेशा निम्न मिलता है संदेश।रिमोट सेलेनियम सर्वर पर प्रोटैक्टर परीक्षण चलाने पर जैस्मीन स्पेक टाइमआउट

A Jasmine spec timed out. Resetting the WebDriver Control Flow. 

, विफलताओं को देखते हुए संदेश और ढेर मेरी सभी प्रकार के परीक्षण के लिए निम्नलिखित प्रदर्शित:

Message: 
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. 
Stack: 
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. 
    at Timer.listOnTimeout (timers.js:92:15) 

मैं ऐसे चमेली टाइमआउट अंतराल में वृद्धि के रूप में बातें, के एक नंबर की कोशिश की है, जोड़ने पहले टाइमआउट जैसे GetPageTimeout और confScripts के लिए allScriptsTimeout, लेकिन यह अभी भी चमेली टाइमआउट त्रुटि फेंकता है। लॉग निम्न त्रुटि दिखाता है:

00:03:18.328 INFO - Done: [execute async script: try { return (function (rootSelector, ng12Hybrid, callback) { 
var el = document.querySelector(rootSelector); 

try { 
    if (!ng12Hybrid && window.getAngularTestability) { 
    window.getAngularTestability(el).whenStable(callback); 
    return; 
    } 
    if (!window.angular) { 
    throw new Error('window.angular is undefined. This could be either ' + 
     'because this is a non-angular page or because your test involves ' + 
     'client-side navigation, which can interfere with Protractor\'s ' + 
     'bootstrapping. See http://git.io/v4gXM for details'); 
} 
    if (angular.getTestability) { 
    angular.getTestability(el).whenStable(callback); 
} else { 
     if (!angular.element(el).injector()) { 
    throw new Error('root element (' + rootSelector + ') has no injector.' + 
     ' this may mean it is not inside ng-app.'); 
    } 
    angular.element(el).injector().get('$browser'). 
     notifyWhenNoOutstandingRequests(callback); 
} 
} catch (err) { 
callback(err.message); 
} 
}).apply(this, arguments); } 
catch(e) { throw (e instanceof Error) ? e : new Error(e); }, [body, false]]) 

मुझे पता है कि मेरा ऐप कोणीय है और यह स्थानीय रूप से चलते समय सफलतापूर्वक चलता है। मैं

browser.ignoreSynchronization = true 

स्थापित करने की कोशिश की है, साथ ही

rootElement='html#ng-app' 
conf में

की स्थापना (बीसी मेरी एनजी-ऐप शरीर में नहीं है, बल्कि HTML टैग के अंदर)। फ्रेमवर्क 'चमेली' पर सेट है हालांकि मैंने 'jasmine2' की कोशिश की है लेकिन न ही कोई फर्क पड़ता है। रिमोट सर्वर पर, मैं फ़ायरफ़ॉक्स शुरू करने में सक्षम हूं, और यूआई मुझे प्रारंभिक फ़ायरफ़ॉक्स सत्र दिखाता है। हालांकि यह समय समाप्ति होने तक बस वहां बैठता है। किसी भी इनपुट की सराहना की जाएगी!

उत्तर

2

जैस्मीन को यह जानना आवश्यक है कि यह एक एसिंक प्रक्रिया चला रहा है और जब उस प्रक्रिया को पूरा किया जाना चाहिए (किसी अन्य परीक्षण के साथ आगे बढ़ने के लिए आप चल रहे हैं)।

यह done को जैस्मीन एसिंक विधि कॉलबैक में पास करके और done() पर कॉल करके प्राप्त किया जाता है जब एसिंक ऑपरेशन हल हो जाता है।

यदि आप done() पर कॉल नहीं करते हैं तो जैस्मीन टाइमआउट त्रुटि दिखाता है। मुझे लगता है कि यह आपकी समस्या का समाधान करना चाहिए।

अधिक जानकारी यहां: Mocking ngResource in Angular unit tests

आशा है कि इससे मदद मिलती है!

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