Skip to content

Commit

Permalink
feat: support chrome headless mode
Browse files Browse the repository at this point in the history
  • Loading branch information
OrKoN committed Apr 21, 2022
1 parent 7b27e24 commit 4d27a16
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 5 deletions.
35 changes: 35 additions & 0 deletions .github/workflows/main.yml
Expand Up @@ -184,3 +184,38 @@ jobs:
max_attempts: 3
timeout_minutes: 10
command: npm run funit
chrome-headless:
runs-on: ${{ matrix.os }}
strategy:
matrix:
# https://github.com/actions/virtual-environments#available-environments
os: [ubuntu-latest, macos-latest, windows-latest]
node: [16]
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 2

- name: Set up Node.js
uses: actions/setup-node@v3.1.1
with:
node-version: ${{ matrix.node }}

- name: Install dependencies
run: |
npm install
ls .local-chromium
- name: Build
run: |
npm run build
- name: Run unit tests
uses: nick-invision/retry@v2
env:
CHROMIUM: true
with:
max_attempts: 1
command: npm run chrome-headless-unit
timeout_minutes: 60
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -18,6 +18,7 @@
"test-browser": "wtr",
"test-browser-watch": "wtr --watch",
"unit": "npm run tsc-cjs && mocha --config mocha-config/puppeteer-unit-tests.js",
"chrome-headless-unit": "cross-env HEADLESS=chrome npm run unit",
"unit-debug": "npm run tsc-cjs && mocha --inspect-brk --config mocha-config/puppeteer-unit-tests.js",
"unit-with-coverage": "cross-env COVERAGE=1 npm run unit",
"assert-unit-coverage": "cross-env COVERAGE=1 mocha --config mocha-config/coverage-tests.js",
Expand Down
2 changes: 1 addition & 1 deletion src/node/LaunchOptions.ts
Expand Up @@ -27,7 +27,7 @@ export interface BrowserLaunchArgumentOptions {
* Whether to run the browser in headless mode.
* @defaultValue true
*/
headless?: boolean;
headless?: boolean | 'chrome';
/**
* Path to a user data directory.
* {@link https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/user_data_dir.md | see the Chromium docs}
Expand Down
6 changes: 5 additions & 1 deletion src/node/Launcher.ts
Expand Up @@ -241,7 +241,11 @@ class ChromeLauncher implements ProductLauncher {
chromeArguments.push(`--user-data-dir=${path.resolve(userDataDir)}`);
if (devtools) chromeArguments.push('--auto-open-devtools-for-tabs');
if (headless) {
chromeArguments.push('--headless', '--hide-scrollbars', '--mute-audio');
chromeArguments.push(
headless === 'chrome' ? '--headless=chrome' : '--headless',
'--hide-scrollbars',
'--mute-audio'
);
}
if (args.every((arg) => arg.startsWith('-')))
chromeArguments.push('about:blank');
Expand Down
6 changes: 3 additions & 3 deletions test/mocha-utils.ts
Expand Up @@ -64,8 +64,8 @@ const product =

const alternativeInstall = process.env.PUPPETEER_ALT_INSTALL || false;

const isHeadless =
(process.env.HEADLESS || 'true').trim().toLowerCase() === 'true';
const headless = (process.env.HEADLESS || 'true').trim().toLowerCase();
const isHeadless = headless === 'true' || headless === 'chrome';
const isFirefox = product === 'firefox';
const isChrome = product === 'Chromium';

Expand All @@ -82,7 +82,7 @@ const defaultBrowserOptions = Object.assign(
{
handleSIGINT: true,
executablePath: process.env.BINARY,
headless: isHeadless,
headless: headless === 'chrome' ? ('chrome' as const) : isHeadless,
dumpio: !!process.env.DUMPIO,
},
extraLaunchOptions
Expand Down

0 comments on commit 4d27a16

Please sign in to comment.