2015-02-10 6 views
9

जब भी मैं इंतजार करने की कोशिश करता हूं तब तक मैं इस समस्या में भाग लेता हूं जब तक कि मेरे प्रोटैक्टर परीक्षण का परीक्षण करने वाले वेब पेज पर वर्तमान डोम पेड़ से कोई DOM तत्व हटा नहीं जाता है। जब तक मैं किसी अन्य धागे में उपयोगकर्ता 2 9 12739 द्वारा पेश की गई इस अच्छी तकनीक के साथ एक डोम तत्व छुपा नहीं जाता तब तक मुझे प्रतीक्षा करने की कोशिश की जाती है।डीओएम से तत्व निकालने के लिए कैसे प्रतीक्षा करें?

var el = element(by.css('.your-css-class')); 
return browser.wait(protractor.until.elementIsNotVisible(el)); 

यह बहुत सभ्य काम करता है। हालांकि, जब डीओएम पेड़ से .isDisplayed() और .isPresent() या किसी उपरोक्त रेखाओं को काम करने के लिए प्रतीत नहीं होता है, तो तत्व को निकालने की प्रतीक्षा करने की बात आती है। परीक्षण जारी रहेगा लेकिन ऐसा प्रतीत होता है कि यह उस तत्व को प्राप्त करने का प्रयास कर रहा है लेकिन कभी सफल नहीं होता है, इसलिए अंततः कॉन्फ़िगरेशन फ़ाइल को सेट करने के आधार पर यह समाप्त हो जाता है। उदाहरण के लिए। यह लॉग है।

समय समाप्त:

इस के उपयोग के मामले काफी अक्सर अगर एक तत्व डोम पेड़ से निकाल दिया जाता है जब भी आप परीक्षण के साथ काम कर रहे हैं, के लिए किया जा सकता है पूरा करने के लिए कल्पना के लिए इंतज़ार कर 30000 msec के बाद का समय समाप्त हो उदाहरण के लिए, एक मोडल जो पृष्ठ से बंद और हटा दिया जाता है जब उपयोगकर्ता उन क्रियाओं पर क्लिक करता है जो उस मोडल तत्व को खारिज करते हैं, या एक तत्व जिसे आप अभी "हटाना" चाहते हैं ताकि यह पृष्ठ पर मौजूद न हो। तो, परीक्षण में, आप डीओएम पेड़ से हटाए जाने के तुरंत बाद टेस्ट रन जारी रखना चाहते हैं।

मैंने प्रोटैक्टर और वेब ड्राइवर एपीआई के माध्यम से खोज की है, और ऐसा लगता है कि इस काम को कोई एपीआई नहीं है।

+0

मैं चांदा के लिए नया हूँ और है कि पहली बार मैं कैसे देखा है इस तरह आप चांदा के साथ क्या करना होगा है उस 'तक' का उपयोग करने के लिए। कोई दस्तावेज़ नहीं कहता है कि इसे 'प्रोटैक्टर' के अंदर परिभाषित किया गया है ... – llamerr

उत्तर

15

यह सुनिश्चित नहीं है कि आपको protractor.until से कोर लाइब्रेरी का हिस्सा नहीं मिला है।

var el = element(by.css('.your-css-class')); 
return browser.wait(function() { 
    return el.isPresent().then(function(present) { 
    return !present; 
    }) 
}); 

एक बार feat(expectedConditions) में (शायद चांदा 1.7) है, तो आप कर सकते हैं::

var EC = protractor.ExpectedConditions; 

var el = element(by.css('.your-css-class')); 
return browser.wait(EC.not(EC.presenceOf(el))); 
+0

धन्यवाद, हैंकडुआन, यह मेरे पिछले पोस्ट http://stackoverflow.com/questions/26411574/protractor-wait-for के लिए समान दृष्टिकोण था -element-to-be-invisible-hidden – vichsu

+0

लेकिन जब यह देखने की बात आती है कि तत्व को डीओएम से "हटाया गया" है, तो el.isPresent() या el.isDisplayed() दोनों जैसे ही होता है या कोई वादा नहीं कर सकता है यह पहले से ही डोम का हिस्सा नहीं है, क्योंकि यह कभी पूरा नहीं हुआ है। नतीजा यह है कि प्रोटैक्टर जैस्मीन में कोड के इस ब्लॉक के लिए बस समय निकालता है, यह ब्लॉक ब्लॉक करता है। मुझे लगता है कि हम ऐसी स्थिति से निपट रहे हैं जो कभी संतुष्ट नहीं हो सकता है। – vichsu

+0

क्या आप इसे स्पष्ट कर सकते हैं? मुझे नहीं पता तुम्हारा क्या मतलब है। – hankduan

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