Why must I use browser.sleep while writing protractor tests

43,061

Since there is an ignoreSynchronization turned on, you cannot use waitForAngular(), which would be a solution in case of an angular-site testing.

A better solution here would be to set a page load timeout:

browser.manage().timeouts().pageLoadTimeout(10000);  // 10 seconds

See also these relevant threads on explicit waits and timeouts:

Share:
43,061
Armeen Moon
Author by

Armeen Moon

I am a generalist; slowly becoming a specialist in Web Development. I mix art, design, and technology, to create effective experiences that deliver value at scale. My professional goals are simple: surround myself with smart, energetic, creative people while working on solving problems that matter. Specialties: Functional and Object Oriented JavaScript ,Angular+, AngularJS, AWS, CSS/SCSS, Vector/DOM motion graphics, semantic HTML, NodeJS, Golang, and passionate about learning i18n/l10n, a11y, and modern web workflow.

Updated on June 11, 2020

Comments

  • Armeen Moon
    Armeen Moon almost 4 years

    My first run at E2E tests. I'm trying to digest someone else's protractor tests.

    Problem: There are a lot of browser.driver.sleep and this seems fragile.

    Goal: not to use browser.driver.sleep

    Question: What is a better approach to browser.driver.sleep? Something less fragile like a promise or something I dont know about lol?

    var config = require('../../protractor.conf.js').config;
    describe('this Homepage Body Tests', function(){
    browser.driver.get(config.homepageUrl);
    
    it("should open find a clinic page", function(){
      // page loads :: want to fix this random wait interval 
      browser.driver.sleep(2000);
      browser.ignoreSynchronization = true;
    
      var string = 'clinic';
      var main = '.search-large-text';
      var link = element(by.cssContainingText('.submenu li a', string));
    
      link.click().then(function() {
        // page reloads :: want to fix this random wait interval
        browser.driver.sleep(3000);
        var title = element(by.cssContainingText(main, string));
        expect(title.getText()).toBe(string);
      });
    });
    });