fix: robustly check for launch executable (#8468)
This commit is contained in:
parent
328c3f5b08
commit
b54dc55f76
@ -71,8 +71,8 @@ class ChromeLauncher implements ProductLauncher {
|
|||||||
ignoreDefaultArgs = false,
|
ignoreDefaultArgs = false,
|
||||||
args = [],
|
args = [],
|
||||||
dumpio = false,
|
dumpio = false,
|
||||||
channel = null,
|
channel,
|
||||||
executablePath = null,
|
executablePath,
|
||||||
pipe = false,
|
pipe = false,
|
||||||
env = process.env,
|
env = process.env,
|
||||||
handleSIGINT = true,
|
handleSIGINT = true,
|
||||||
@ -83,7 +83,7 @@ class ChromeLauncher implements ProductLauncher {
|
|||||||
slowMo = 0,
|
slowMo = 0,
|
||||||
timeout = 30000,
|
timeout = 30000,
|
||||||
waitForInitialPage = true,
|
waitForInitialPage = true,
|
||||||
debuggingPort = null,
|
debuggingPort,
|
||||||
} = options;
|
} = options;
|
||||||
|
|
||||||
const chromeArguments = [];
|
const chromeArguments = [];
|
||||||
@ -103,7 +103,7 @@ class ChromeLauncher implements ProductLauncher {
|
|||||||
) {
|
) {
|
||||||
if (pipe) {
|
if (pipe) {
|
||||||
assert(
|
assert(
|
||||||
debuggingPort === null,
|
!debuggingPort,
|
||||||
'Browser should be launched with either pipe or debugging port - not both.'
|
'Browser should be launched with either pipe or debugging port - not both.'
|
||||||
);
|
);
|
||||||
chromeArguments.push('--remote-debugging-pipe');
|
chromeArguments.push('--remote-debugging-pipe');
|
||||||
@ -134,25 +134,22 @@ class ChromeLauncher implements ProductLauncher {
|
|||||||
isTempUserDataDir = false;
|
isTempUserDataDir = false;
|
||||||
|
|
||||||
let chromeExecutable = executablePath;
|
let chromeExecutable = executablePath;
|
||||||
|
|
||||||
if (channel) {
|
if (channel) {
|
||||||
// executablePath is detected by channel, so it should not be specified by user.
|
// executablePath is detected by channel, so it should not be specified by user.
|
||||||
assert(
|
assert(
|
||||||
typeof executablePath === 'string',
|
!chromeExecutable,
|
||||||
'`executablePath` must not be specified when `channel` is given.'
|
'`executablePath` must not be specified when `channel` is given.'
|
||||||
);
|
);
|
||||||
|
|
||||||
chromeExecutable = executablePathForChannel(channel);
|
chromeExecutable = executablePathForChannel(channel);
|
||||||
} else if (!executablePath) {
|
} else if (!chromeExecutable) {
|
||||||
const { missingText, executablePath } = resolveExecutablePath(this);
|
const { missingText, executablePath } = resolveExecutablePath(this);
|
||||||
if (missingText) throw new Error(missingText);
|
if (missingText) {
|
||||||
|
throw new Error(missingText);
|
||||||
|
}
|
||||||
chromeExecutable = executablePath;
|
chromeExecutable = executablePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!chromeExecutable) {
|
|
||||||
throw new Error('chromeExecutable is not found.');
|
|
||||||
}
|
|
||||||
|
|
||||||
const usePipe = chromeArguments.includes('--remote-debugging-pipe');
|
const usePipe = chromeArguments.includes('--remote-debugging-pipe');
|
||||||
const runner = new BrowserRunner(
|
const runner = new BrowserRunner(
|
||||||
this.product,
|
this.product,
|
||||||
@ -183,7 +180,7 @@ class ChromeLauncher implements ProductLauncher {
|
|||||||
[],
|
[],
|
||||||
ignoreHTTPSErrors,
|
ignoreHTTPSErrors,
|
||||||
defaultViewport,
|
defaultViewport,
|
||||||
runner.proc ?? undefined,
|
runner.proc,
|
||||||
runner.close.bind(runner)
|
runner.close.bind(runner)
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -262,7 +259,8 @@ class ChromeLauncher implements ProductLauncher {
|
|||||||
if (channel) {
|
if (channel) {
|
||||||
return executablePathForChannel(channel);
|
return executablePathForChannel(channel);
|
||||||
} else {
|
} else {
|
||||||
return resolveExecutablePath(this).executablePath;
|
const results = resolveExecutablePath(this);
|
||||||
|
return results.executablePath;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user