diff --git a/lib/Launcher.js b/lib/Launcher.js index e33a146f2be..6c191c1d0f6 100644 --- a/lib/Launcher.js +++ b/lib/Launcher.js @@ -165,12 +165,33 @@ class Launcher { } const ignoreHTTPSErrors = !!options.ignoreHTTPSErrors; const setDefaultViewport = !options.appMode; - return Browser.create(connection, [], ignoreHTTPSErrors, setDefaultViewport, chromeProcess, gracefullyCloseChrome); + const browser = await Browser.create(connection, [], ignoreHTTPSErrors, setDefaultViewport, chromeProcess, gracefullyCloseChrome); + await ensureInitialPage(browser); + return browser; } catch (e) { killChrome(); throw e; } + /** + * @param {!Browser} browser + */ + async function ensureInitialPage(browser) { + // Wait for initial page target to be created. + if (browser.targets().find(target => target.type() === 'page')) + return; + + let initialPageCallback; + const initialPagePromise = new Promise(resolve => initialPageCallback = resolve); + const listeners = [helper.addEventListener(browser, 'targetcreated', target => { + if (target.type() === 'page') + initialPageCallback(); + })]; + + await initialPagePromise; + helper.removeEventListeners(listeners); + } + /** * @return {Promise} */ diff --git a/test/puppeteer.spec.js b/test/puppeteer.spec.js index f3de335e844..d81f35ad5bf 100644 --- a/test/puppeteer.spec.js +++ b/test/puppeteer.spec.js @@ -218,6 +218,7 @@ module.exports.addTests = function({testRunner, expect, PROJECT_ROOT, defaultBro it('should support the pipe option', async() => { const options = Object.assign({pipe: true}, defaultBrowserOptions); const browser = await puppeteer.launch(options); + expect((await browser.pages()).length).toBe(1); expect(browser.wsEndpoint()).toBe(''); const page = await browser.newPage(); expect(await page.evaluate('11 * 11')).toBe(121);