@@ -33,6 +33,8 @@ export class Runner extends EventEmitter {
33
33
driverprovider_ : DriverProvider ;
34
34
o : any ;
35
35
plugins_ : Plugins ;
36
+ restartPromise : q . Promise < any > ;
37
+ frameworkUsesAfterEach : boolean ;
36
38
37
39
constructor ( config : Config ) {
38
40
super ( ) ;
@@ -86,6 +88,26 @@ export class Runner extends EventEmitter {
86
88
} ) ;
87
89
}
88
90
91
+ /**
92
+ * Called after each test finishes.
93
+ *
94
+ * Responsible for `restartBrowserBetweenTests`
95
+ *
96
+ * @public
97
+ * @return {q.Promise } A promise that will resolve when the work here is done
98
+ */
99
+ afterEach ( ) : q . Promise < void > {
100
+ let ret : q . Promise < void > ;
101
+ this . frameworkUsesAfterEach = true ;
102
+ if ( this . config_ . restartBrowserBetweenTests ) {
103
+ // TODO(sjelin): remove the `|| q()` once `restart()` returns a promise
104
+ this . restartPromise = this . restartPromise || protractor . browser . restart ( ) || q ( ) ;
105
+ ret = this . restartPromise ;
106
+ this . restartPromise = undefined ;
107
+ }
108
+ return ret || q ( ) ;
109
+ }
110
+
89
111
/**
90
112
* Grab driver provider based on type
91
113
* @private
@@ -322,8 +344,12 @@ export class Runner extends EventEmitter {
322
344
}
323
345
324
346
if ( this . config_ . restartBrowserBetweenTests ) {
347
+ // TODO(sjelin): replace with warnings once `afterEach` support is required
325
348
let restartDriver = ( ) => {
326
- browser_ . restart ( ) ;
349
+ if ( ! this . frameworkUsesAfterEach ) {
350
+ // TODO(sjelin): remove the `|| q()` once `restart()` returns a promise
351
+ this . restartPromise = browser_ . restart ( ) || q ( ) ;
352
+ }
327
353
} ;
328
354
this . on ( 'testPass' , restartDriver ) ;
329
355
this . on ( 'testFail' , restartDriver ) ;
0 commit comments