@@ -44,33 +44,37 @@ function wrapWithHelpers(fun) {
44
44
* Asynchronous.
45
45
*
46
46
* @param {string } rootSelector The selector housing an ng-app
47
- * @param {boolean } ng12Hybrid Flag set if app is a hybrid of angular 1 and 2
48
47
* @param {function(string) } callback callback. If a failure occurs, it will
49
48
* be passed as a parameter.
50
49
*/
51
- functions . waitForAngular = function ( rootSelector , ng12Hybrid , callback ) {
50
+ functions . waitForAngular = function ( rootSelector , callback ) {
52
51
var el = document . querySelector ( rootSelector ) ;
53
52
54
53
try {
55
- if ( ! ng12Hybrid && window . getAngularTestability ) {
54
+ if ( window . angular && ! ( window . angular . version &&
55
+ window . angular . version . major > 1 ) ) {
56
+ if ( angular . getTestability ) {
57
+ angular . getTestability ( el ) . whenStable ( callback ) ;
58
+ } else if ( angular . element ( el ) . injector ( ) ) {
59
+ angular . element ( el ) . injector ( ) . get ( '$browser' ) .
60
+ notifyWhenNoOutstandingRequests ( callback ) ;
61
+ } else {
62
+ throw new Error ( 'root element (' + rootSelector + ') has no injector.' +
63
+ ' this may mean it is not inside ng-app.' ) ;
64
+ }
65
+ } else if ( window . getAngularTestability ) {
56
66
window . getAngularTestability ( el ) . whenStable ( callback ) ;
57
- return ;
58
- }
59
- if ( ! window . angular ) {
67
+ } else if ( ! window . angular ) {
60
68
throw new Error ( 'window.angular is undefined. This could be either ' +
61
69
'because this is a non-angular page or because your test involves ' +
62
70
'client-side navigation, which can interfere with Protractor\'s ' +
63
71
'bootstrapping. See http://git.io/v4gXM for details' ) ;
64
- }
65
- if ( angular . getTestability ) {
66
- angular . getTestability ( el ) . whenStable ( callback ) ;
72
+ } else if ( window . angular . version == 2 ) {
73
+ throw new Error ( 'You appear to be using angular2, but window.' +
74
+ 'getAngularTestability was never set. This is all very strange.' ) ;
67
75
} else {
68
- if ( ! angular . element ( el ) . injector ( ) ) {
69
- throw new Error ( 'root element (' + rootSelector + ') has no injector.' +
70
- ' this may mean it is not inside ng-app.' ) ;
71
- }
72
- angular . element ( el ) . injector ( ) . get ( '$browser' ) .
73
- notifyWhenNoOutstandingRequests ( callback ) ;
76
+ throw new Error ( 'Cannot get testability API for unknown angular ' +
77
+ 'version "' + window . angular . version + '"' ) ;
74
78
}
75
79
} catch ( err ) {
76
80
callback ( err . message ) ;
@@ -599,15 +603,36 @@ functions.testForAngular = function(attempts, ng12Hybrid, asyncCallback) {
599
603
asyncCallback ( args ) ;
600
604
} , 0 ) ;
601
605
} ;
606
+ var definitelyNg1 = ! ! ng12Hybrid ;
607
+ var definitelyNg2 = false ;
602
608
var check = function ( n ) {
603
609
try {
604
- if ( ! ng12Hybrid && window . getAllAngularTestabilities ) {
605
- callback ( { ver : 2 } ) ;
606
- } else if ( window . angular && window . angular . resumeBootstrap ) {
607
- callback ( { ver : 1 } ) ;
608
- } else if ( n < 1 ) {
609
- if ( window . angular ) {
610
+ // Figure out which version of angular we're waiting on
611
+ if ( ! definitelyNg1 && ! definitelyNg2 ) {
612
+ if ( window . angular && ! ( window . angular . version && window . angular . version . major > 1 ) ) {
613
+ definitelyNg1 = true ;
614
+ } else if ( window . getAllAngularTestabilities ) {
615
+ definitelyNg2 = true ;
616
+ }
617
+ }
618
+ // See if our version of angular is ready
619
+ if ( definitelyNg1 ) {
620
+ if ( window . angular && window . angular . resumeBootstrap ) {
621
+ return callback ( { ver : 1 } ) ;
622
+ }
623
+ } else if ( definitelyNg2 ) {
624
+ if ( true /** ng2 has no resumeBootstrap() **/ ) {
625
+ return callback ( { ver : 2 } ) ;
626
+ }
627
+ }
628
+ // Try again (or fail)
629
+ if ( n < 1 ) {
630
+ if ( definitelyNg1 && window . angular ) {
610
631
callback ( { message : 'angular never provided resumeBootstrap' } ) ;
632
+ } else if ( ng12Hybrid && ! window . angular ) {
633
+ callback ( { message : 'angular 1 never loaded' +
634
+ window . getAllAngularTestabilities ? ' (are you sure this app ' +
635
+ 'uses ngUpgrade? Try un-setting ng12Hybrid)' : '' } ) ;
611
636
} else {
612
637
callback ( { message : 'retries looking for angular exceeded' } ) ;
613
638
}
0 commit comments