2015-06-17 12 views
5

मैं ब्राउज़र.वाइट फ़ंक्शन का बार-बार जांच करना चाहता हूं कि एक निश्चित समय के लिए कोई बटन तत्व मौजूद है या नहीं, तो प्रासंगिक कॉलबैक का उपयोग करें। नीचे मेरे पास कोड है जो प्रतीक्षा का उपयोग नहीं करता है।प्रोटैक्टर ब्राउज़र क्या करता है अगर स्थिति कभी सच नहीं होती है तो वापसी करें?

detailsButton.isPresent() 
    .then(function(present){ 
     if(!present) { 
      callback(); 
     } else { 
      callback(new Error('The details button was not present.')); 
     } 
    }); 

मैं, कुछ इस कोड को फिक्सिंग मदद करना के रूप में मुझे यकीन है कि नहीं कर रहा हूँ कि कैसे एक falure/समय समाप्ति के साथ इंतजार समारोह से संबंधित है। अनिवार्य रूप से मैं पूछ रहा हूं कि नीचे दिए गए कोड के '.then' भाग में क्या होना चाहिए जो कि कम वर्तमान में है जो मेरे पास है।

browser.driver.wait(function(){ 
    return pgTransactionHistory.transactionHistoryDetails.isPresent(); 
}, 60000).then(function(){ 
    pgTransactionHistory.transactionHistoryDetails.isPresent() 
     .then(function(present){ 
      if(!present) { 
       callback(); 
      } else { 
       callback(new Error('The details button was not present.')); 
      } 
     }); 
}); 

धन्यवाद!

उत्तर

9

ऐसा करने के दो तरीके हैं। इसलिए जैसा:

browser.driver.wait(function(){ 
    return //condition 
}, timeout, 'Error message string') 
    .then(function(){ 
     callback(); 
    }); 

या दूसरी बात इस तरह तो फिर करने के लिए एक दूसरा तर्क का उपयोग कर:

browser.driver.wait(function(){ 
    return //condition 
}, timeout) 
    .then(function(){ 
     callback(); 
    }, function(){ 
     //code to want to execute on failure. 
    }); 
+0

प्रोटैक्टर क्यों न केवल त्रुटि को अस्वीकार करता है और इसे। कैच हैंडलर में समाप्त कर देता है? – Abdel

1

प्रतीक्षा समारोह टाइमआउट पर अस्वीकार करता है। यही है - यह एक वादा देता है और जब टाइमआउट पहुंच जाता है तो यह अस्वीकार कर देता है। सबसे पहले आप एक स्ट्रिंग है जिसमें त्रुटि संदेश के रूप में भेजा जाएगा करने के लिए browser.wait के तीसरे तर्क का उपयोग कर सकते हैं:

browser.driver.wait(function(){ 
    return pgTransactionHistory.transactionHistoryDetails.isPresent(); 
}, 60000).then(function(){ 
    callback(); // instead of doing this, you should return a promise 
}).catch(function(){ 
    callback(new Error('The details button was not present.')); 
}); 
+0

जवाब के लिए धन्यवाद! कुछ कारणों से, .catch() जोड़ना एक त्रुटि का कारण बनता है: "अपरिभाषित कोई फ़ंक्शन नहीं है।" जब मैं पकड़ने को छोड़ देता हूं तो यह बिना हिचकिचाहट के काम करता है, इसके अलावा कुछ भी 'पकड़ा' नहीं जाएगा। – JasoonS

+0

ठीक है, तो मैं इसे कैसे काम करने के लिए मिला है ब्राउज़र.wait के तीसरे पैरामीटर का उपयोग करना है, जो एक त्रुटि संदेश के रूप में उपयोग करने के लिए एक स्ट्रिंग है। ऐसा लगता है कि मुझे दस्तावेज़ों को अधिक सावधानी से पढ़ना चाहिए था ... सुनिश्चित नहीं है कि पकड़ क्यों काम नहीं कर रही है। – JasoonS

1

क्योंकि कोणमापक अतुल्यकालिक संचालन तुल्यकालिक लिखने की क्षमता प्रदान करता है, यह भी ब्राउज़र को संभालने के लिए संभव है। अधिक समकालिक तरीके से टाइमआउट प्रतीक्षा करें।

export class AppPage { 

    public static isLoaded() { 
    return browser 
    .wait(until.presenceOf(by.id('myID')), 5000) 
    .then(() => true,() => false); 
    } 
} 

और अपने e2e.spec में इसका इस्तेमाल करते हैं इस प्रकार है:

expect(AppPage.isLoaded()).toBeTruthy(); 
+0

हालांकि यह काम करता है, मुझे आश्चर्य है कि 'उम्मीद' हुड के तहत क्या कर रही है और क्या यह धागा को अवरुद्ध करेगा या नहीं। – Abdel

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