From 66887743ead54405e2e8b5865462b87e76e8e5cf Mon Sep 17 00:00:00 2001 From: Yaniv Efraim Date: Fri, 23 Feb 2018 05:06:13 +0200 Subject: [PATCH] fix(Launcher): fix dumpio bug (#2071) This patch fixes `dumpio` launcher option. Fixes #2046 --- lib/Launcher.js | 8 ++++++-- test/fixtures/dumpio.js | 9 +++++++++ test/test.js | 12 ++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/dumpio.js diff --git a/lib/Launcher.js b/lib/Launcher.js index 7c7e60b0..cc0a7d7e 100644 --- a/lib/Launcher.js +++ b/lib/Launcher.js @@ -100,10 +100,9 @@ class Launcher { if (Array.isArray(options.args)) chromeArguments.push(...options.args); - const stdio = options.dumpio ? ['inherit', 'inherit', 'inherit'] : ['pipe', 'pipe', 'pipe']; + const stdio = ['pipe', 'pipe', 'pipe']; if (options.appMode) stdio.push('pipe', 'pipe'); - const chromeProcess = childProcess.spawn( chromeExecutable, chromeArguments, @@ -114,6 +113,11 @@ class Launcher { } ); + if (options.dumpio) { + chromeProcess.stderr.pipe(process.stderr); + chromeProcess.stdout.pipe(process.stdout); + } + let chromeClosed = false; const waitForChromeToClose = new Promise((fulfill, reject) => { chromeProcess.once('close', () => { diff --git a/test/fixtures/dumpio.js b/test/fixtures/dumpio.js new file mode 100644 index 00000000..edcbc12a --- /dev/null +++ b/test/fixtures/dumpio.js @@ -0,0 +1,9 @@ +(async() => { + const [, , puppeteerRoot, options, emptyPage, dumpioTextToLog] = process.argv; + const browser = await require(puppeteerRoot).launch(JSON.parse(options)); + const page = await browser.newPage(); + await page.goto(emptyPage); + await page.evaluate(_dumpioTextToLog => console.log(_dumpioTextToLog), dumpioTextToLog); + await page.close(); + await browser.close(); +})(); diff --git a/test/test.js b/test/test.js index ae8fd19f..98944985 100644 --- a/test/test.js +++ b/test/test.js @@ -271,6 +271,18 @@ describe('Puppeteer', function() { const args = puppeteer.defaultArgs(); expect(args).toContain('--no-first-run'); }); + it('should dump browser process stderr', async({server}) => { + const dumpioTextToLog = 'MAGIC_DUMPIO_TEST'; + let dumpioData = ''; + const {spawn} = require('child_process'); + const options = Object.assign({dumpio: true}, defaultBrowserOptions); + const res = spawn('node', + [path.join(__dirname, 'fixtures', 'dumpio.js'), PROJECT_ROOT, JSON.stringify(options), server.EMPTY_PAGE, dumpioTextToLog]); + res.stderr.on('data', data => dumpioData += data.toString('utf8')); + await new Promise(resolve => res.on('close', resolve)); + + expect(dumpioData).toContain(dumpioTextToLog); + }); }); describe('Puppeteer.connect', function() { it('should be able to connect multiple times to the same browser', async({server}) => {