diff --git a/packages/playwright-test/src/index.ts b/packages/playwright-test/src/index.ts index cb4b6990c9..fc758f4ac7 100644 --- a/packages/playwright-test/src/index.ts +++ b/packages/playwright-test/src/index.ts @@ -64,8 +64,8 @@ export const test = _baseTest.extend({ await use(require('playwright-core')); } }, { scope: 'worker' } ], - headless: [ true, { scope: 'worker', option: true } ], - channel: [ undefined, { scope: 'worker', option: true } ], + headless: [ ({ launchOptions }, use) => use(launchOptions.headless ?? true), { scope: 'worker', option: true } ], + channel: [ ({ launchOptions }, use) => use(launchOptions.channel), { scope: 'worker', option: true } ], launchOptions: [ {}, { scope: 'worker', option: true } ], connectOptions: [ undefined, { scope: 'worker', option: true } ], screenshot: [ 'off', { scope: 'worker', option: true } ], diff --git a/tests/playwright-test/playwright.config.spec.ts b/tests/playwright-test/playwright.config.spec.ts new file mode 100644 index 0000000000..35f6668463 --- /dev/null +++ b/tests/playwright-test/playwright.config.spec.ts @@ -0,0 +1,69 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { test, expect } from './playwright-test-fixtures'; + +test('should fall back to launchOptions', async ({ runInlineTest }) => { + const result = await runInlineTest({ + 'playwright.config.ts': ` + module.exports = { + use: { + launchOptions: { + headless: false, + channel: 'chrome', + } + } + }; + `, + 'a.test.ts': ` + const { test } = pwt; + test('pass', async ({ headless, channel }) => { + expect.soft(headless).toBe(false); + expect.soft(channel).toBe('chrome'); + }); + `, + }, { workers: 1 }); + + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); +}); + +test('should override launchOptions', async ({ runInlineTest }) => { + const result = await runInlineTest({ + 'playwright.config.ts': ` + module.exports = { + use: { + headless: false, + channel: 'chrome', + launchOptions: { + headless: true, + channel: 'msedge', + } + } + }; + `, + 'a.test.ts': ` + const { test } = pwt; + test('pass', async ({ headless, channel }) => { + expect.soft(headless).toBe(false); + expect.soft(channel).toBe('chrome'); + }); + `, + }, { workers: 1 }); + + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); +});