|
1 | 1 | import {EventEmitter} from 'events';
|
2 | 2 | // TODO(cnishina): remove when selenium webdriver is upgraded.
|
3 |
| -import {promise as wdpromise} from 'selenium-webdriver'; |
| 3 | +import {promise as wdpromise, WebDriver} from 'selenium-webdriver'; |
4 | 4 | import * as util from 'util';
|
5 | 5 |
|
6 | 6 | import {ProtractorBrowser} from './browser';
|
@@ -54,9 +54,6 @@ export class Runner extends EventEmitter {
|
54 | 54 | nodedebug.on('exit', () => {
|
55 | 55 | process.exit(1);
|
56 | 56 | });
|
57 |
| - this.ready_ = new Promise(resolve => { |
58 |
| - setTimeout(resolve, 1000); |
59 |
| - }); |
60 | 57 | }
|
61 | 58 |
|
62 | 59 | if (config.capabilities && config.capabilities.seleniumAddress) {
|
@@ -206,9 +203,9 @@ export class Runner extends EventEmitter {
|
206 | 203 | * @return {Protractor} a protractor instance.
|
207 | 204 | * @public
|
208 | 205 | */
|
209 |
| - createBrowser(plugins: any, parentBrowser?: ProtractorBrowser): any { |
| 206 | + async createBrowser(plugins: any, parentBrowser?: ProtractorBrowser): Promise<any> { |
210 | 207 | let config = this.config_;
|
211 |
| - let driver = this.driverprovider_.getNewDriver(); |
| 208 | + let driver = await this.driverprovider_.getNewDriver(); |
212 | 209 |
|
213 | 210 | let blockingProxyUrl: string;
|
214 | 211 | if (config.useBlockingProxy) {
|
@@ -258,58 +255,40 @@ export class Runner extends EventEmitter {
|
258 | 255 | browser_.ng12Hybrid = initProperties.ng12Hybrid;
|
259 | 256 | }
|
260 | 257 |
|
261 |
| - browser_.ready = |
262 |
| - browser_.ready |
263 |
| - .then(() => { |
264 |
| - return browser_.waitForAngularEnabled(initProperties.waitForAngularEnabled); |
265 |
| - }) |
266 |
| - .then(() => { |
267 |
| - return driver.manage().timeouts().setScriptTimeout( |
268 |
| - initProperties.allScriptsTimeout || 0); |
269 |
| - }) |
270 |
| - .then(() => { |
271 |
| - return browser_; |
272 |
| - }); |
| 258 | + await browser_.waitForAngularEnabled(initProperties.waitForAngularEnabled); |
| 259 | + await driver.manage().timeouts().setScriptTimeout(initProperties.allScriptsTimeout || 0); |
273 | 260 |
|
274 | 261 | browser_.getProcessedConfig = () => {
|
275 | 262 | return Promise.resolve(config);
|
276 | 263 | };
|
277 | 264 |
|
278 |
| - browser_.forkNewDriverInstance = |
279 |
| - (useSameUrl: boolean, copyMockModules: boolean, copyConfigUpdates = true) => { |
280 |
| - let newBrowser = this.createBrowser(plugins); |
281 |
| - if (copyMockModules) { |
282 |
| - newBrowser.mockModules_ = browser_.mockModules_; |
283 |
| - } |
284 |
| - if (useSameUrl) { |
285 |
| - newBrowser.ready = newBrowser.ready |
286 |
| - .then(() => { |
287 |
| - return browser_.driver.getCurrentUrl(); |
288 |
| - }) |
289 |
| - .then((url: string) => { |
290 |
| - return newBrowser.get(url); |
291 |
| - }) |
292 |
| - .then(() => { |
293 |
| - return newBrowser; |
294 |
| - }); |
295 |
| - } |
296 |
| - return newBrowser; |
297 |
| - }; |
298 |
| - |
299 |
| - let replaceBrowser = () => { |
300 |
| - let newBrowser = browser_.forkNewDriverInstance(false, true); |
| 265 | + browser_.forkNewDriverInstance = async( |
| 266 | + useSameUrl: boolean, copyMockModules: boolean, copyConfigUpdates = true): Promise<any> => { |
| 267 | + let newBrowser = await this.createBrowser(plugins); |
| 268 | + if (copyMockModules) { |
| 269 | + newBrowser.mockModules_ = browser_.mockModules_; |
| 270 | + } |
| 271 | + if (useSameUrl) { |
| 272 | + const currentUrl = await browser_.driver.getCurrentUrl(); |
| 273 | + await newBrowser.get(currentUrl); |
| 274 | + } |
| 275 | + return newBrowser; |
| 276 | + }; |
| 277 | + |
| 278 | + let replaceBrowser = async () => { |
| 279 | + let newBrowser = await browser_.forkNewDriverInstance(false, true); |
301 | 280 | if (browser_ === protractor.browser) {
|
302 | 281 | this.setupGlobals_(newBrowser);
|
303 | 282 | }
|
304 | 283 | return newBrowser;
|
305 | 284 | };
|
306 | 285 |
|
307 |
| - browser_.restart = () => { |
| 286 | + browser_.restart = async () => { |
308 | 287 | // Note: because tests are not paused at this point, any async
|
309 | 288 | // calls here are not guaranteed to complete before the tests resume.
|
310 |
| - return this.driverprovider_.quitDriver(browser_.driver) |
311 |
| - .then(replaceBrowser) |
312 |
| - .then(newBrowser => newBrowser.ready); |
| 289 | + const restartedBrowser = await replaceBrowser(); |
| 290 | + await this.driverprovider_.quitDriver(browser_.driver); |
| 291 | + return restartedBrowser; |
313 | 292 | };
|
314 | 293 |
|
315 | 294 | return browser_;
|
@@ -352,18 +331,15 @@ export class Runner extends EventEmitter {
|
352 | 331 | this.config_.useBlockingProxy = true;
|
353 | 332 | }
|
354 | 333 |
|
355 |
| - // 0) Wait for debugger |
356 |
| - await Promise.resolve(this.ready_); |
357 |
| - |
358 | 334 | // 1) Setup environment
|
359 | 335 | // noinspection JSValidateTypes
|
360 | 336 | await this.driverprovider_.setupEnv();
|
361 | 337 |
|
362 | 338 | // 2) Create a browser and setup globals
|
363 |
| - browser_ = this.createBrowser(plugins); |
| 339 | + browser_ = await this.createBrowser(plugins); |
364 | 340 | this.setupGlobals_(browser_);
|
365 | 341 | try {
|
366 |
| - const session = await browser_.ready.then(browser_.getSession); |
| 342 | + const session = await browser_.getSession(); |
367 | 343 | logger.debug(
|
368 | 344 | 'WebDriver session successfully started with capabilities ' +
|
369 | 345 | util.inspect(session.getCapabilities()));
|
@@ -403,9 +379,9 @@ export class Runner extends EventEmitter {
|
403 | 379 |
|
404 | 380 | if (this.config_.restartBrowserBetweenTests) {
|
405 | 381 | // TODO(sjelin): replace with warnings once `afterEach` support is required
|
406 |
| - let restartDriver = () => { |
| 382 | + let restartDriver = async () => { |
407 | 383 | if (!this.frameworkUsesAfterEach) {
|
408 |
| - this.restartPromise = Promise.resolve(browser_.restart()); |
| 384 | + this.restartPromise = await browser_.restart(); |
409 | 385 | }
|
410 | 386 | };
|
411 | 387 | this.on('testPass', restartDriver);
|
|
0 commit comments