Skip to content
This repository was archived by the owner on Jul 29, 2024. It is now read-only.

Commit 1525705

Browse files
committed
feat(browser.ready): make browser.ready wait for all async setup work
Closes #3900
1 parent f4cf277 commit 1525705

File tree

2 files changed

+25
-16
lines changed

2 files changed

+25
-16
lines changed

lib/browser.ts

+15-12
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,6 @@ export class ProtractorBrowser extends AbstractExtendedWebDriver {
343343
this.ignoreSynchronization = false;
344344
this.getPageTimeout = DEFAULT_GET_PAGE_TIMEOUT;
345345
this.params = {};
346-
this.ready = null;
347346
this.plugins_ = new Plugins({});
348347
this.resetUrl = DEFAULT_RESET_URL;
349348
this.debugHelper = new DebugHelper(this);
@@ -365,17 +364,21 @@ export class ProtractorBrowser extends AbstractExtendedWebDriver {
365364
ng12Hybrid_ = ng12Hybrid;
366365
}
367366
});
368-
this.driver.getCapabilities().then((caps: Capabilities) => {
369-
// Internet Explorer does not accept data URLs, which are the default
370-
// reset URL for Protractor.
371-
// Safari accepts data urls, but SafariDriver fails after one is used.
372-
// PhantomJS produces a "Detected a page unload event" if we use data urls
373-
let browserName = caps.get('browserName');
374-
if (browserName === 'internet explorer' || browserName === 'safari' ||
375-
browserName === 'phantomjs' || browserName === 'MicrosoftEdge') {
376-
this.resetUrl = 'about:blank';
377-
}
378-
});
367+
this.ready = this.driver.controlFlow()
368+
.execute(() => {
369+
return this.driver.getSession();
370+
})
371+
.then((session: Session) => {
372+
// Internet Explorer does not accept data URLs, which are the default
373+
// reset URL for Protractor.
374+
// Safari accepts data urls, but SafariDriver fails after one is used.
375+
// PhantomJS produces a "Detected a page unload event" if we use data urls
376+
let browserName = session.getCapabilities().get('browserName');
377+
if (browserName === 'internet explorer' || browserName === 'safari' ||
378+
browserName === 'phantomjs' || browserName === 'MicrosoftEdge') {
379+
this.resetUrl = 'about:blank';
380+
}
381+
});
379382

380383
this.trackOutstandingTimeouts_ = !opt_untrackOutstandingTimeouts;
381384
this.mockModules_ = [];

lib/runner.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,9 @@ export class Runner extends EventEmitter {
246246
browser_.ng12Hybrid = config.ng12Hybrid;
247247
}
248248

249-
browser_.ready = driver.manage().timeouts().setScriptTimeout(config.allScriptsTimeout);
249+
browser_.ready = browser_.ready.then(() => {
250+
return driver.manage().timeouts().setScriptTimeout(config.allScriptsTimeout);
251+
});
250252

251253
browser_.getProcessedConfig = () => {
252254
return wdpromise.fulfilled(config);
@@ -258,9 +260,13 @@ export class Runner extends EventEmitter {
258260
newBrowser.mockModules_ = browser_.mockModules_;
259261
}
260262
if (opt_useSameUrl) {
261-
browser_.driver.getCurrentUrl().then((url: string) => {
262-
newBrowser.get(url);
263-
});
263+
newBrowser.ready = wdpromise.all([newBrowser.ready, browser_.driver.getCurrentUrl()])
264+
.then((results: any[]) => {
265+
return newBrowser.get(results[1]);
266+
})
267+
.then(() => {
268+
return newBrowser;
269+
});
264270
}
265271
return newBrowser;
266272
};

0 commit comments

Comments
 (0)