Using Protractor Test with Bootstrapped AngularJS

2019-01-17 17:23发布

问题:

I want to be able to test my Angular application with Protractor. Since I use RequireJS, I cannot use ng-app directive in my DOM and that is why I bootstrap Angular manually with angular.bootstrap.

Protractor prints an error output like below:

Error: Angular could not be found on the page http://localhost:1428/ : retries looking for angular exceeded

Then, I realized that Protractor documentation has a warning:

Protractor does not work out-of-the-box with apps that bootstrap manually using angular.bootstrap. You must use the ng-app directive.

Well, Is there any workaround to run Protractor tests with manually bootstrapped angular application or should I start to learn about alternative testing suites?

回答1:

go to protractor confiuration and add this

onPrepare: function() {
// implicit and page load timeouts
  browser.manage().timeouts().pageLoadTimeout(40000);
  browser.manage().timeouts().implicitlyWait(25000);

  // for non-angular page
  browser.ignoreSynchronization = true;

  // sign in before all tests

}

It worked for me

my full config file looks like this...

// conf.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['../**/*.e2e.js'],
multiCapabilities: [{
browserName: 'firefox'
}],

onPrepare: function() {
// implicit and page load timeouts
browser.manage().timeouts().pageLoadTimeout(40000);
browser.manage().timeouts().implicitlyWait(25000);

// for non-angular page
browser.ignoreSynchronization = true;

// sign in before all tests

 }
}

What actually happens is that you ask from protractor to wait for an amount of time and ignnore the document.ready(), in order to give you time to bootstrap angular manually.