@@ -44,33 +44,38 @@ 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 angular, but window.' +
74
+ 'getAngularTestability was never set. This may be due to bad ' +
75
+ 'obfuscation.' ) ;
67
76
} 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 ) ;
77
+ throw new Error ( 'Cannot get testability API for unknown angular ' +
78
+ 'version "' + window . angular . version + '"' ) ;
74
79
}
75
80
} catch ( err ) {
76
81
callback ( err . message ) ;
@@ -599,15 +604,36 @@ functions.testForAngular = function(attempts, ng12Hybrid, asyncCallback) {
599
604
asyncCallback ( args ) ;
600
605
} , 0 ) ;
601
606
} ;
607
+ var definitelyNg1 = ! ! ng12Hybrid ;
608
+ var definitelyNg2OrNewer = false ;
602
609
var check = function ( n ) {
603
610
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 ) {
611
+ /* Figure out which version of angular we're waiting on */
612
+ if ( ! definitelyNg1 && ! definitelyNg2OrNewer ) {
613
+ if ( window . angular && ! ( window . angular . version && window . angular . version . major > 1 ) ) {
614
+ definitelyNg1 = true ;
615
+ } else if ( window . getAllAngularTestabilities ) {
616
+ definitelyNg2OrNewer = true ;
617
+ }
618
+ }
619
+ /* See if our version of angular is ready */
620
+ if ( definitelyNg1 ) {
621
+ if ( window . angular && window . angular . resumeBootstrap ) {
622
+ return callback ( { ver : 1 } ) ;
623
+ }
624
+ } else if ( definitelyNg2OrNewer ) {
625
+ if ( true /* ng2 has no resumeBootstrap() */ ) {
626
+ return callback ( { ver : 2 } ) ;
627
+ }
628
+ }
629
+ /* Try again (or fail) */
630
+ if ( n < 1 ) {
631
+ if ( definitelyNg1 && window . angular ) {
610
632
callback ( { message : 'angular never provided resumeBootstrap' } ) ;
633
+ } else if ( ng12Hybrid && ! window . angular ) {
634
+ callback ( { message : 'angular 1 never loaded' +
635
+ window . getAllAngularTestabilities ? ' (are you sure this app ' +
636
+ 'uses ngUpgrade? Try un-setting ng12Hybrid)' : '' } ) ;
611
637
} else {
612
638
callback ( { message : 'retries looking for angular exceeded' } ) ;
613
639
}
0 commit comments