fix: propagate custom executable path to codegen (#6509)
This commit is contained in:
parent
d540b4478b
commit
460cc31941
|
|
@ -209,10 +209,10 @@ type CaptureOptions = {
|
||||||
fullPage: boolean;
|
fullPage: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
async function launchContext(options: Options, headless: boolean): Promise<{ browser: Browser, browserName: string, launchOptions: LaunchOptions, contextOptions: BrowserContextOptions, context: BrowserContext }> {
|
async function launchContext(options: Options, headless: boolean, executablePath?: string): Promise<{ browser: Browser, browserName: string, launchOptions: LaunchOptions, contextOptions: BrowserContextOptions, context: BrowserContext }> {
|
||||||
validateOptions(options);
|
validateOptions(options);
|
||||||
const browserType = lookupBrowserType(options);
|
const browserType = lookupBrowserType(options);
|
||||||
const launchOptions: LaunchOptions = { headless };
|
const launchOptions: LaunchOptions = { headless, executablePath };
|
||||||
if (options.channel)
|
if (options.channel)
|
||||||
launchOptions.channel = options.channel as any;
|
launchOptions.channel = options.channel as any;
|
||||||
|
|
||||||
|
|
@ -347,7 +347,7 @@ async function openPage(context: BrowserContext, url: string | undefined): Promi
|
||||||
}
|
}
|
||||||
|
|
||||||
async function open(options: Options, url: string | undefined, language: string) {
|
async function open(options: Options, url: string | undefined, language: string) {
|
||||||
const { context, launchOptions, contextOptions } = await launchContext(options, !!process.env.PWTEST_CLI_HEADLESS);
|
const { context, launchOptions, contextOptions } = await launchContext(options, !!process.env.PWTEST_CLI_HEADLESS, process.env.PWTEST_CLI_EXECUTABLE_PATH);
|
||||||
await context._enableRecorder({
|
await context._enableRecorder({
|
||||||
language,
|
language,
|
||||||
launchOptions,
|
launchOptions,
|
||||||
|
|
@ -361,7 +361,7 @@ async function open(options: Options, url: string | undefined, language: string)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function codegen(options: Options, url: string | undefined, language: string, outputFile?: string) {
|
async function codegen(options: Options, url: string | undefined, language: string, outputFile?: string) {
|
||||||
const { context, launchOptions, contextOptions } = await launchContext(options, !!process.env.PWTEST_CLI_HEADLESS);
|
const { context, launchOptions, contextOptions } = await launchContext(options, !!process.env.PWTEST_CLI_HEADLESS, process.env.PWTEST_CLI_EXECUTABLE_PATH);
|
||||||
await context._enableRecorder({
|
await context._enableRecorder({
|
||||||
language,
|
language,
|
||||||
launchOptions,
|
launchOptions,
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ export class CodeGenerator extends EventEmitter {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
launchOptions = { headless: false, ...launchOptions };
|
launchOptions = { headless: false, ...launchOptions };
|
||||||
|
delete launchOptions.executablePath;
|
||||||
this._enabled = generateHeaders;
|
this._enabled = generateHeaders;
|
||||||
this._options = { browserName, generateHeaders, launchOptions, contextOptions, deviceName, saveStorage };
|
this._options = { browserName, generateHeaders, launchOptions, contextOptions, deviceName, saveStorage };
|
||||||
this.restart();
|
this.restart();
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ type CLITestArgs = {
|
||||||
recorderPageGetter: () => Promise<Page>;
|
recorderPageGetter: () => Promise<Page>;
|
||||||
openRecorder: () => Promise<Recorder>;
|
openRecorder: () => Promise<Recorder>;
|
||||||
runCLI: (args: string[]) => CLIMock;
|
runCLI: (args: string[]) => CLIMock;
|
||||||
|
executablePath: string | undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const test = contextTest.extend({
|
export const test = contextTest.extend({
|
||||||
|
|
@ -34,7 +35,7 @@ export const test = contextTest.extend({
|
||||||
process.env.PWTEST_RECORDER_PORT = String(10907 + workerInfo.workerIndex);
|
process.env.PWTEST_RECORDER_PORT = String(10907 + workerInfo.workerIndex);
|
||||||
},
|
},
|
||||||
|
|
||||||
async beforeEach({ page, context, toImpl, browserName, browserChannel, headful, mode }, testInfo: folio.TestInfo): Promise<CLITestArgs> {
|
async beforeEach({ page, context, toImpl, browserName, browserChannel, headful, mode, launchOptions: { executablePath } }, testInfo: folio.TestInfo): Promise<CLITestArgs> {
|
||||||
testInfo.skip(mode === 'service');
|
testInfo.skip(mode === 'service');
|
||||||
const recorderPageGetter = async () => {
|
const recorderPageGetter = async () => {
|
||||||
while (!toImpl(context).recorderAppForTest)
|
while (!toImpl(context).recorderAppForTest)
|
||||||
|
|
@ -46,7 +47,7 @@ export const test = contextTest.extend({
|
||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
runCLI: (cliArgs: string[]) => {
|
runCLI: (cliArgs: string[]) => {
|
||||||
this._cli = new CLIMock(browserName, browserChannel, !headful, cliArgs);
|
this._cli = new CLIMock(browserName, browserChannel, !headful, cliArgs, executablePath);
|
||||||
return this._cli;
|
return this._cli;
|
||||||
},
|
},
|
||||||
openRecorder: async () => {
|
openRecorder: async () => {
|
||||||
|
|
@ -54,6 +55,7 @@ export const test = contextTest.extend({
|
||||||
return new Recorder(page, await recorderPageGetter());
|
return new Recorder(page, await recorderPageGetter());
|
||||||
},
|
},
|
||||||
recorderPageGetter,
|
recorderPageGetter,
|
||||||
|
executablePath
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -161,7 +163,7 @@ class CLIMock {
|
||||||
private waitForCallback: () => void;
|
private waitForCallback: () => void;
|
||||||
exited: Promise<void>;
|
exited: Promise<void>;
|
||||||
|
|
||||||
constructor(browserName: string, browserChannel: string, headless: boolean, args: string[]) {
|
constructor(browserName: string, browserChannel: string, headless: boolean, args: string[], executablePath?: string) {
|
||||||
this.data = '';
|
this.data = '';
|
||||||
const nodeArgs = [
|
const nodeArgs = [
|
||||||
path.join(__dirname, '..', '..', 'lib', 'cli', 'cli.js'),
|
path.join(__dirname, '..', '..', 'lib', 'cli', 'cli.js'),
|
||||||
|
|
@ -176,6 +178,7 @@ class CLIMock {
|
||||||
...process.env,
|
...process.env,
|
||||||
PWTEST_CLI_EXIT: '1',
|
PWTEST_CLI_EXIT: '1',
|
||||||
PWTEST_CLI_HEADLESS: headless ? '1' : undefined,
|
PWTEST_CLI_HEADLESS: headless ? '1' : undefined,
|
||||||
|
PWTEST_CLI_EXECUTABLE_PATH: executablePath,
|
||||||
},
|
},
|
||||||
stdio: 'pipe'
|
stdio: 'pipe'
|
||||||
});
|
});
|
||||||
|
|
@ -186,9 +189,15 @@ class CLIMock {
|
||||||
});
|
});
|
||||||
this.exited = new Promise((f, r) => {
|
this.exited = new Promise((f, r) => {
|
||||||
this.process.stderr.on('data', data => {
|
this.process.stderr.on('data', data => {
|
||||||
r(new Error(data));
|
console.error(data.toString());
|
||||||
|
});
|
||||||
|
this.process.on('exit', (exitCode, signal) => {
|
||||||
|
if (exitCode)
|
||||||
|
r(new Error(`Process failed with exit code ${exitCode}`));
|
||||||
|
if (signal)
|
||||||
|
r(new Error(`Process recieved signal: ${signal}`));
|
||||||
|
f();
|
||||||
});
|
});
|
||||||
this.process.on('exit', f);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue