9

में पृष्ठ पुनर्निर्देशन की प्रतीक्षा करें मेरे पास एक परीक्षण है जो एक बटन क्लिक करता है और उपयोगकर्ता डैशबोर्ड पर रीडायरेक्ट करता है। जब ऐसा होता है Webdriver रिटर्न: javascript error: document unloaded while waiting for result.प्रोटैक्टर/वेबड्राइवर

इस बिंदु पर मैं browser.sleep(2000) डालने जहां पुनर्निर्देशन होता है और यह सोचते हैं मेरे CPU उपयोग कम है, इस मुद्दे को हल करती है ठीक करने के लिए। हालांकि, 2000 एमएस मनमाने ढंग से और धीमी है। क्या browser.waitForAngular() की तरह कुछ है जो expect(..) से पहले रीडायरेक्ट पेज पर कोणीय लोड करने की प्रतीक्षा करेगा?

it('should create a new user',() => { 
 
    $signUp.click(); 
 
    $email.sendKeys((new Date().getTime()) + '@.com'); 
 
    $password.sendKeys('12345'); 
 
    $submit.click(); 
 

 
    browser.sleep(2000); // Need alternative to sleep... 
 

 
    // This doesn't do it... 
 
    // browser.sleep(1); 
 
    // browser.waitForAngular(); 
 

 
    $body.evaluate('user') 
 
    .then((user) => { 
 
    expect(user).toBe(true); 
 
    }); 
 
});

उत्तर

11

आपको लगता है कुछ इस तरह आप के लिए काम कर सकता है? इस URL के लिए 10 सेकंड तक इंतजार करेंगे पाठ शामिल करने के लिए 'pageTwo', या जो भी आप में डाल दिया।

var nextPageButton = $('#nextPage'); 
nextPageButton.click().then(function(){ 
    return browser.driver.wait(function() { 
     return browser.driver.getCurrentUrl().then(function(url) { 
     return /pageTwo/.test(url); 
     }); 
    }, 10000); 
}; 

बस यूआरएल आप उम्मीद कर रहे हैं की regex में चिपके रहते हैं।

वैकल्पिक रूप से, आप अगले पृष्ठ से एक तत्व के लिए प्रतीक्षा के रूप में अच्छी तरह से प्रकट करने के लिए कर सकते हैं:

var nextPageButton = $('#nextPage'); 
nextPageButton.click(); 

var elementFromSecondPage = $('#coolElement'); 
browser.wait(protractor.until.elementIsVisible(elementFromSecondPage), 5000, 'Error: Element did not display within 5 seconds'); 

जब .click का उपयोग कर, चांदा स्वाभाविक रूप से के लिए इंतजार करेंगे जैसे, कार्रवाई क्लिक से जुड़ी खत्म करने के लिए कोणीय पेज बदलना लेकिन, पृष्ठ बदलते समय, आपको अभी भी लोड होने के लिए विशिष्ट कुछ की आवश्यकता हो सकती है, इसलिए परीक्षण उस भाग से पहले विफल हो जाता है। इसका उपयोग करके, इसे क्लिक भाग को समाप्त करने के लिए प्रतीक्षा करनी चाहिए, फिर तत्व प्रकट होने की प्रतीक्षा करें।

4

उपयोगकर्ता2020347 के उत्तर पर विस्तार करने के लिए: धन्यवाद कि मेरी समस्या हल हो गई। मुझे आश्चर्य है कि यह एक समारोह में क्यों नहीं है। ब्राउजर नेविगेशन की प्रतीक्षा करने के लिए मैं इसे कई स्थानों पर उपयोग करूँगा। यह बहुत ही सरल रखने

$button.click().then(waitUntilURLContains('dashboard')); 
+0

यह वास्तव में पेज के लिए इंतजार करेंगे browser.get तरह लोड होने तक फिर जांच? मुझे चिंता है कि यह सिर्फ वर्तमान यूआरएल में इनपुट स्ट्रिंग की तलाश में है। – jgritten

1

:

यह अधिक संक्षिप्त बनाने के लिए, मैं एक छोटे से सहायक बनाया:

Object.assign(global, { 
    waitUntilURLContains: string => { 
    let fn =() => { 
     return browser.driver.wait(() => { 
     return browser.driver.getCurrentUrl().then((url) => { 
      return url.includes(string); 
     }); 
     }, waitDelay); 
    } 

    return fn.bind(null, string); 
    } 
}); 

अपने परीक्षण में। मैं भी यही समस्या में चल रहा था, लेकिन निम्नलिखित कोड का उपयोग कर इसे हल करने में सक्षम था:

 page.setUsername(objectrepository.userdetails.useremail); 
     page.setPassword(objectrepository.userdetails.userpassword); 
     page.login().click(); 
     **browser.wait(EC.visibilityOf(page.greetingMessageElement()), 5000);** 

     page.greetingMessageElement().getText() 
     .then(function (value){ 
     expect(browser.getCurrentUrl()).toContain("#/mytickets"); 
     }); 
+0

toContain मेरे लिए काम किया :) धन्यवाद! –

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

  • कोई संबंधित समस्या नहीं^_^