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

Commit dda9df4

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

File tree

2 files changed

+33
-16
lines changed

2 files changed

+33
-16
lines changed

Diff for: lib/browser.ts

+16-12
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,6 @@ export class ProtractorBrowser extends AbstractExtendedWebDriver {
394394
this.ignoreSynchronization = false;
395395
this.getPageTimeout = DEFAULT_GET_PAGE_TIMEOUT;
396396
this.params = {};
397-
this.ready = null;
398397
this.plugins_ = new Plugins({});
399398
this.resetUrl = DEFAULT_RESET_URL;
400399
this.debugHelper = new DebugHelper(this);
@@ -416,17 +415,22 @@ export class ProtractorBrowser extends AbstractExtendedWebDriver {
416415
ng12Hybrid_ = ng12Hybrid;
417416
}
418417
});
419-
this.driver.getCapabilities().then((caps: Capabilities) => {
420-
// Internet Explorer does not accept data URLs, which are the default
421-
// reset URL for Protractor.
422-
// Safari accepts data urls, but SafariDriver fails after one is used.
423-
// PhantomJS produces a "Detected a page unload event" if we use data urls
424-
let browserName = caps.get('browserName');
425-
if (browserName === 'internet explorer' || browserName === 'safari' ||
426-
browserName === 'phantomjs' || browserName === 'MicrosoftEdge') {
427-
this.resetUrl = 'about:blank';
428-
}
429-
});
418+
this.ready = this.driver.controlFlow()
419+
.execute(() => {
420+
return this.driver.getSession();
421+
})
422+
.then((session: Session) => {
423+
// Internet Explorer does not accept data URLs, which are the default
424+
// reset URL for Protractor.
425+
// Safari accepts data urls, but SafariDriver fails after one is used.
426+
// PhantomJS produces a "Detected a page unload event" if we use data urls
427+
let browserName = session.getCapabilities().get('browserName');
428+
if (browserName === 'internet explorer' || browserName === 'safari' ||
429+
browserName === 'phantomjs' || browserName === 'MicrosoftEdge') {
430+
this.resetUrl = 'about:blank';
431+
}
432+
return this;
433+
});
430434

431435
this.trackOutstandingTimeouts_ = !opt_untrackOutstandingTimeouts;
432436
this.mockModules_ = [];

Diff for: 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)