|
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