2017-06-22 27 views
5

में मैं चांदा के लिए नया हूँ। इस फ़ंक्शन में async/प्रतीक्षा कैसे करता है? क्या कोई मुझे यह समझा सकता है?async के बारे में के बारे में बताएं/इंतजार कोणमापक

it('TC_01 - Verify Cockpit page title', async (done) => { 
    headerPage.waitForTitleContain('PEAX', 30000); 
    expect(await headerPage.getTitle()).toEqual('PEAX'); 
    done(); 
}); 

उत्तर

8

यह जावास्क्रिप्ट की असीमित प्रकृति के बारे में है।

वर्तमान में चांदा (यहाँ मैं प्रत्यक्ष वादा श्रृंखलन का वर्णन नहीं किया था, और जनरेटर) कई तरीके अतुल्यकालिक क्रियाओं को संचालित करने, का प्रस्ताव:

1) वादा प्रबंधक/नियंत्रण प्रवाह

https://github.com/SeleniumHQ/selenium/wiki/WebDriverJs#control-flows

यह अमूर्त है कि आपके सभी कार्यों एक के बाद एक के नाम से जाना, एक कतार की तरह बना देता है। प्रत्येक कार्रवाई एक विशेष वस्तु - वादा करता है। यह एसिंक ऑपरेशन के परिणाम का प्रतिनिधित्व करता है, जो भविष्य में प्राप्त किया जाएगा।

2) दूसरा तरीका है - async/इंतजार

https://ponyfoo.com/articles/understanding-javascript-async-await#using-async-await

यह नई अमूर्त आसपास की वस्तुओं का वादा किया और करने की अनुमति देता है आसानी से कार्रवाई एक के बाद एक श्रृंखला। लाभ यह मूल भाषा निर्माण है, वादा प्रबंधक के बजाय है, और सिंक्रनाइज़, ट्राई/कैच और अन्य परिचित निर्माण के साथ की तरह अपने कोड नज़र आता है।

आप सोच सकते हैं की तरह इंतजार

लेकिन async/अभी भी इंतजार है अंदर वादों से काम करता है "वादा जब तक कोड निष्पादन कि कार्रवाई से लौटे हल हो गई है निलंबित"।

सलाह जब async का उपयोग करने का युगल/protractorJS साथ इंतजार है:

1) सुनिश्चित करें कि आप विकलांग नियंत्रण प्रवाह/वादा प्रबंधक बनाओ: https://github.com/angular/protractor/blob/master/lib/config.ts#L631 मिश्रण सक्षम नियंत्रण प्रवाह के साथ इंतजार कर रहा है अप्रत्याशित परिणाम हो सकता है।

2) इंतजार के साथ सभी अपने async कार्रवाई (आमतौर पर यह सब चांदा एपीआई तरीकों है) पहले जोड़ें करने के लिए मत भूलना। यदि आप ऐसा करने के लिए भूल गए हैं - इंतजार किए बिना कार्रवाई अन्य कार्यों के साथ कतारबद्ध नहीं की जाएगी, इसलिए कार्यों का क्रम तोड़ दिया जाएगा

3) सुनिश्चित करें कि आप इसका समर्थन करने वाले नोडजेज़ का उपयोग कर रहे हैं - कम से कम नोडजेस 7.8.x (या नया)। टाइपप्रति प्रयोग किया जाता है 'लक्ष्य' के रूप में, सेट संकलन लक्ष्य: "es2017"

अधिक पढ़ने के लिए: https://github.com/igniteram/protractor/blob/93f2e4943cc291064bc04e789b1c33b270446af9/docs/control-flow.md

https://github.com/SeleniumHQ/selenium/wiki/WebDriverJs#option-3-migrate-to-asyncawait

-3

प्रतीक्षा के लिए आपको एक फ़ंक्शन का उपयोग करके वादे को संभालने की आवश्यकता होगी। कोड भालू आपको एक विचार देगा।

element(by.xpath("xpath")).click().then(function(){ 
     var list = element(by.id('id')); 
     var until = protractor.ExpectedConditions; 
     browser.wait(until.presenceOf(list), 80000, 'Message: took too long'); 
    }); 
संबंधित मुद्दे