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

Commit f11fece

Browse files
authored
feat(browser.ready): make browser.ready wait for all async setup work (#4015)
Closes #3900
1 parent ed2534a commit f11fece

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
@@ -348,7 +348,6 @@ export class ProtractorBrowser extends AbstractExtendedWebDriver {
348348
this.ignoreSynchronization = false;
349349
this.getPageTimeout = DEFAULT_GET_PAGE_TIMEOUT;
350350
this.params = {};
351-
this.ready = null;
352351
this.plugins_ = new Plugins({});
353352
this.resetUrl = DEFAULT_RESET_URL;
354353
this.debugHelper = new DebugHelper(this);
@@ -370,17 +369,22 @@ export class ProtractorBrowser extends AbstractExtendedWebDriver {
370369
ng12Hybrid_ = ng12Hybrid;
371370
}
372371
});
373-
this.driver.getCapabilities().then((caps: Capabilities) => {
374-
// Internet Explorer does not accept data URLs, which are the default
375-
// reset URL for Protractor.
376-
// Safari accepts data urls, but SafariDriver fails after one is used.
377-
// PhantomJS produces a "Detected a page unload event" if we use data urls
378-
let browserName = caps.get('browserName');
379-
if (browserName === 'internet explorer' || browserName === 'safari' ||
380-
browserName === 'phantomjs' || browserName === 'MicrosoftEdge') {
381-
this.resetUrl = 'about:blank';
382-
}
383-
});
372+
this.ready = this.driver.controlFlow()
373+
.execute(() => {
374+
return this.driver.getSession();
375+
})
376+
.then((session: Session) => {
377+
// Internet Explorer does not accept data URLs, which are the default
378+
// reset URL for Protractor.
379+
// Safari accepts data urls, but SafariDriver fails after one is used.
380+
// PhantomJS produces a "Detected a page unload event" if we use data urls
381+
let browserName = session.getCapabilities().get('browserName');
382+
if (browserName === 'internet explorer' || browserName === 'safari' ||
383+
browserName === 'phantomjs' || browserName === 'MicrosoftEdge') {
384+
this.resetUrl = 'about:blank';
385+
}
386+
return this;
387+
});
384388

385389
this.trackOutstandingTimeouts_ = !opt_untrackOutstandingTimeouts;
386390
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)