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}) => {