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

Commit 7cb9739

Browse files
committed
feat(browser.ready): make browser.ready wait for all async setup work (#4015)
Closes #3900
1 parent b77cb92 commit 7cb9739

File tree

2 files changed

+33
-16
lines changed

2 files changed

+33
-16
lines changed

lib/browser.ts

+16-12
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,6 @@ export class ProtractorBrowser extends AbstractExtendedWebDriver {
429429
this.ignoreSynchronization = false;
430430
this.getPageTimeout = DEFAULT_GET_PAGE_TIMEOUT;
431431
this.params = {};
432-
this.ready = null;
433432
this.plugins_ = new Plugins({});
434433
this.resetUrl = DEFAULT_RESET_URL;
435434
this.debugHelper = new DebugHelper(this);
@@ -451,17 +450,22 @@ export class ProtractorBrowser extends AbstractExtendedWebDriver {
451450
ng12Hybrid_ = ng12Hybrid;
452451
}
453452
});
454-
this.driver.getCapabilities().then((caps: Capabilities) => {
455-
// Internet Explorer does not accept data URLs, which are the default
456-
// reset URL for Protractor.
457-
// Safari accepts data urls, but SafariDriver fails after one is used.
458-
// PhantomJS produces a "Detected a page unload event" if we use data urls
459-
let browserName = caps.get('browserName');
460-
if (browserName === 'internet explorer' || browserName === 'safari' ||
461-
browserName === 'phantomjs' || browserName === 'MicrosoftEdge') {
462-
this.resetUrl = 'about:blank';
463-
}
464-
});
453+
this.ready = this.driver.controlFlow()
454+
.execute(() => {
455+
return this.driver.getSession();
456+
})
457+
.then((session: Session) => {
458+
// Internet Explorer does not accept data URLs, which are the default
459+
// reset URL for Protractor.
460+
// Safari accepts data urls, but SafariDriver fails after one is used.
461+
// PhantomJS produces a "Detected a page unload event" if we use data urls
462+
let browserName = session.getCapabilities().get('browserName');
463+
if (browserName === 'internet explorer' || browserName === 'safari' ||
464+
browserName === 'phantomjs' || browserName === 'MicrosoftEdge') {
465+
this.resetUrl = 'about:blank';
466+
}
467+
return this;
468+
});
465469

466470
this.trackOutstandingTimeouts_ = !opt_untrackOutstandingTimeouts;
467471
this.mockModules_ = [];

lib/runner.ts

+17-4
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,13 @@ export class Runner extends EventEmitter {
249249
}
250250

251251
browser_.ready =
252-
driver.manage().timeouts().setScriptTimeout(config.allScriptsTimeout).then(() => browser_);
252+
browser_.ready
253+
.then(() => {
254+
return driver.manage().timeouts().setScriptTimeout(config.allScriptsTimeout);
255+
})
256+
.then(() => {
257+
return browser_;
258+
});
253259

254260
browser_.getProcessedConfig = () => {
255261
return wdpromise.fulfilled(config);
@@ -261,9 +267,16 @@ export class Runner extends EventEmitter {
261267
newBrowser.mockModules_ = browser_.mockModules_;
262268
}
263269
if (opt_useSameUrl) {
264-
browser_.driver.getCurrentUrl().then((url: string) => {
265-
newBrowser.get(url);
266-
});
270+
newBrowser.ready = newBrowser.ready
271+
.then(() => {
272+
return browser_.driver.getCurrentUrl();
273+
})
274+
.then((url: string) => {
275+
return newBrowser.get(url);
276+
})
277+
.then(() => {
278+
return newBrowser;
279+
});
267280
}
268281
return newBrowser;
269282
};

0 commit comments

Comments
 (0)