@wdio/utils 8.15.7 → 8.15.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/driver/index.d.ts +1 -1
- package/build/driver/index.d.ts.map +1 -1
- package/build/driver/index.js +17 -4
- package/build/driver/manager.d.ts.map +1 -1
- package/build/driver/manager.js +19 -14
- package/build/driver/utils.d.ts +7 -3
- package/build/driver/utils.d.ts.map +1 -1
- package/build/driver/utils.js +47 -29
- package/package.json +3 -3
package/build/driver/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { type GeckodriverParameters } from 'geckodriver';
|
|
|
5
5
|
import { type EdgedriverParameters } from 'edgedriver';
|
|
6
6
|
import type { InstallOptions } from '@puppeteer/browsers';
|
|
7
7
|
import type { Options } from '@wdio/types';
|
|
8
|
-
export type ChromedriverParameters = InstallOptions & Omit<EdgedriverParameters, 'port' | 'edgeDriverVersion' | 'customEdgeDriverPath'>;
|
|
8
|
+
export type ChromedriverParameters = Partial<InstallOptions> & Omit<EdgedriverParameters, 'port' | 'edgeDriverVersion' | 'customEdgeDriverPath'>;
|
|
9
9
|
declare global {
|
|
10
10
|
namespace WebdriverIO {
|
|
11
11
|
interface ChromedriverOptions extends ChromedriverParameters {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAyB,MAAM,oBAAoB,CAAA;AAO1D,OAAO,EAA8B,KAAK,mBAAmB,IAAI,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAC7G,OAAO,EAA6B,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EAA0C,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC9F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,KAAK,EAAgB,OAAO,EAAE,MAAM,aAAa,CAAA;AAQxD,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,mBAAmB,GAAG,sBAAsB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAyB,MAAM,oBAAoB,CAAA;AAO1D,OAAO,EAA8B,KAAK,mBAAmB,IAAI,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAC7G,OAAO,EAA6B,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EAA0C,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC9F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,KAAK,EAAgB,OAAO,EAAE,MAAM,aAAa,CAAA;AAQxD,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,mBAAmB,GAAG,sBAAsB,CAAC,CAAA;AAChJ,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,WAAW,CAAC;QAClB,UAAU,mBAAoB,SAAQ,sBAAsB;SAAG;QAC/D,UAAU,kBAAmB,SAAQ,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC;SAAG;QAC3E,UAAU,iBAAkB,SAAQ,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC;SAAG;QACzE,UAAU,mBAAoB,SAAQ,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC;SAAG;KAChF;CACJ;AAKD,wBAAsB,cAAc,CAAE,OAAO,EAAE,OAAO,CAAC,SAAS,wCAmJ/D"}
|
package/build/driver/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import { deepmerge } from 'deepmerge-ts';
|
|
|
9
9
|
import { start as startSafaridriver } from 'safaridriver';
|
|
10
10
|
import { start as startGeckodriver } from 'geckodriver';
|
|
11
11
|
import { start as startEdgedriver, findEdgePath } from 'edgedriver';
|
|
12
|
-
import { parseParams,
|
|
12
|
+
import { parseParams, setupPuppeteerBrowser, definesRemoteDriver, setupChromedriver, isChrome, isFirefox, isEdge, isSafari, getCacheDir } from './utils.js';
|
|
13
13
|
import { SUPPORTED_BROWSERNAMES } from '../constants.js';
|
|
14
14
|
const log = logger('@wdio/utils');
|
|
15
15
|
const DRIVER_WAIT_TIMEOUT = 10 * 1000; // 10s
|
|
@@ -49,7 +49,7 @@ export async function startWebDriver(options) {
|
|
|
49
49
|
* Chrome
|
|
50
50
|
*/
|
|
51
51
|
const chromedriverOptions = caps['wdio:chromedriverOptions'] || {};
|
|
52
|
-
const { executablePath: chromeExecuteablePath, browserVersion } = await
|
|
52
|
+
const { executablePath: chromeExecuteablePath, browserVersion } = await setupPuppeteerBrowser(cacheDir, caps);
|
|
53
53
|
const { executablePath: chromedriverExcecuteablePath } = chromedriverOptions.binary
|
|
54
54
|
? { executablePath: chromedriverOptions.binary }
|
|
55
55
|
: await setupChromedriver(cacheDir, browserVersion);
|
|
@@ -80,7 +80,17 @@ export async function startWebDriver(options) {
|
|
|
80
80
|
/**
|
|
81
81
|
* Firefox
|
|
82
82
|
*/
|
|
83
|
-
const
|
|
83
|
+
const { executablePath } = await setupPuppeteerBrowser(cacheDir, caps);
|
|
84
|
+
caps['moz:firefoxOptions'] = deepmerge({ binary: executablePath }, caps['moz:firefoxOptions'] || {});
|
|
85
|
+
/**
|
|
86
|
+
* the "binary" parameter refers to the driver binary in the WebdriverIO.GeckodriverOptions and
|
|
87
|
+
* to the Firefox binary in the driver option
|
|
88
|
+
*/
|
|
89
|
+
delete caps.browserVersion;
|
|
90
|
+
const { binary, ...geckodriverOptions } = caps['wdio:geckodriverOptions'] || {};
|
|
91
|
+
if (binary) {
|
|
92
|
+
geckodriverOptions.customGeckoDriverPath = binary;
|
|
93
|
+
}
|
|
84
94
|
driver = 'GeckoDriver';
|
|
85
95
|
driverProcess = await startGeckodriver({ ...geckodriverOptions, cacheDir, port });
|
|
86
96
|
}
|
|
@@ -88,7 +98,10 @@ export async function startWebDriver(options) {
|
|
|
88
98
|
/**
|
|
89
99
|
* Microsoft Edge
|
|
90
100
|
*/
|
|
91
|
-
const edgedriverOptions = caps['wdio:edgedriverOptions'] || {};
|
|
101
|
+
const { binary, ...edgedriverOptions } = caps['wdio:edgedriverOptions'] || {};
|
|
102
|
+
if (binary) {
|
|
103
|
+
edgedriverOptions.customEdgeDriverPath = binary;
|
|
104
|
+
}
|
|
92
105
|
driver = 'EdgeDriver';
|
|
93
106
|
driverProcess = await startEdgedriver({ ...edgedriverOptions, cacheDir, port }).catch((err) => {
|
|
94
107
|
log.warn(`Couldn't start EdgeDriver: ${err.message}, retry ...`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/driver/manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/driver/manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAgGxD,wBAAsB,WAAW,CAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,kBAAkB,kCAezH;AAED,wBAAgB,YAAY,CAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,kBAAkB,kCAYpH"}
|
package/build/driver/manager.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import logger from '@wdio/logger';
|
|
2
|
-
import { getCacheDir, definesRemoteDriver, isSafari, isEdge, isFirefox, isChrome, setupChromedriver, setupEdgedriver, setupGeckodriver,
|
|
2
|
+
import { getCacheDir, definesRemoteDriver, getDriverOptions, isSafari, isEdge, isFirefox, isChrome, setupChromedriver, setupEdgedriver, setupGeckodriver, setupPuppeteerBrowser } from './utils.js';
|
|
3
3
|
const log = logger('@wdio/utils');
|
|
4
4
|
const UNDEFINED_BROWSER_VERSION = null;
|
|
5
|
+
var BrowserDriverTaskLabel;
|
|
6
|
+
(function (BrowserDriverTaskLabel) {
|
|
7
|
+
BrowserDriverTaskLabel["BROWSER"] = "browser binaries";
|
|
8
|
+
BrowserDriverTaskLabel["DRIVER"] = "browser driver";
|
|
9
|
+
})(BrowserDriverTaskLabel || (BrowserDriverTaskLabel = {}));
|
|
5
10
|
function mapCapabilities(options, caps, task, taskItemLabel) {
|
|
6
11
|
const capabilitiesToRequireSetup = (Array.isArray(caps)
|
|
7
12
|
? caps.map((cap) => {
|
|
@@ -25,13 +30,15 @@ function mapCapabilities(options, caps, task, taskItemLabel) {
|
|
|
25
30
|
})).flat().filter((cap) => (
|
|
26
31
|
/**
|
|
27
32
|
* only set up driver if
|
|
28
|
-
* - browserName is defined so we know it is a browser session
|
|
29
|
-
* - we are not about to run a cloud session
|
|
30
|
-
* - we are not running Safari (driver already installed on macOS)
|
|
31
33
|
*/
|
|
34
|
+
// - browserName is defined so we know it is a browser session
|
|
32
35
|
cap.browserName &&
|
|
36
|
+
// - we are not about to run a cloud session
|
|
33
37
|
!definesRemoteDriver(options) &&
|
|
34
|
-
|
|
38
|
+
// - we are not running Safari (driver already installed on macOS)
|
|
39
|
+
!isSafari(cap.browserName) &&
|
|
40
|
+
// - driver options don't define a binary path
|
|
41
|
+
!getDriverOptions(cap).binary));
|
|
35
42
|
/**
|
|
36
43
|
* nothing to setup
|
|
37
44
|
*/
|
|
@@ -71,13 +78,15 @@ export async function setupDriver(options, caps) {
|
|
|
71
78
|
return setupEdgedriver(cacheDir, cap.browserVersion);
|
|
72
79
|
}
|
|
73
80
|
else if (isFirefox(cap.browserName)) {
|
|
74
|
-
|
|
81
|
+
// "latest" works for setting up browser only but not geckodriver
|
|
82
|
+
const version = cap.browserVersion === 'latest' ? undefined : cap.browserVersion;
|
|
83
|
+
return setupGeckodriver(cacheDir, version);
|
|
75
84
|
}
|
|
76
85
|
else if (isChrome(cap.browserName)) {
|
|
77
86
|
return setupChromedriver(cacheDir, cap.browserVersion);
|
|
78
87
|
}
|
|
79
88
|
return Promise.resolve();
|
|
80
|
-
},
|
|
89
|
+
}, BrowserDriverTaskLabel.DRIVER);
|
|
81
90
|
}
|
|
82
91
|
export function setupBrowser(options, caps) {
|
|
83
92
|
return mapCapabilities(options, caps, async (cap) => {
|
|
@@ -86,13 +95,9 @@ export function setupBrowser(options, caps) {
|
|
|
86
95
|
// not yet implemented
|
|
87
96
|
return Promise.resolve();
|
|
88
97
|
}
|
|
89
|
-
else if (isFirefox(cap.browserName)) {
|
|
90
|
-
|
|
91
|
-
return Promise.resolve();
|
|
92
|
-
}
|
|
93
|
-
else if (isChrome(cap.browserName)) {
|
|
94
|
-
return setupChrome(cacheDir, cap);
|
|
98
|
+
else if (isChrome(cap.browserName) || isFirefox(cap.browserName)) {
|
|
99
|
+
return setupPuppeteerBrowser(cacheDir, cap);
|
|
95
100
|
}
|
|
96
101
|
return Promise.resolve();
|
|
97
|
-
},
|
|
102
|
+
}, BrowserDriverTaskLabel.BROWSER);
|
|
98
103
|
}
|
package/build/driver/utils.d.ts
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import type { EdgedriverParameters } from 'edgedriver';
|
|
2
2
|
import type { Options, Capabilities } from '@wdio/types';
|
|
3
3
|
export declare function parseParams(params: EdgedriverParameters): string[];
|
|
4
|
-
export declare function
|
|
5
|
-
export declare function
|
|
4
|
+
export declare function getBuildIdByChromePath(chromePath?: string): string | undefined;
|
|
5
|
+
export declare function getBuildIdByFirefoxPath(firefoxPath?: string): Promise<string | undefined>;
|
|
6
6
|
export declare const downloadProgressCallback: (artifact: string, downloadedBytes: number, totalBytes: number) => void;
|
|
7
|
-
export declare function
|
|
7
|
+
export declare function setupPuppeteerBrowser(cacheDir: string, caps: Capabilities.Capabilities): Promise<{
|
|
8
8
|
executablePath: string;
|
|
9
9
|
browserVersion: string | undefined;
|
|
10
|
+
} | {
|
|
11
|
+
executablePath: string | undefined;
|
|
12
|
+
browserVersion: string;
|
|
10
13
|
}>;
|
|
14
|
+
export declare function getDriverOptions(caps: Capabilities.Capabilities): WebdriverIO.ChromedriverOptions | WebdriverIO.GeckodriverOptions | WebdriverIO.EdgedriverOptions;
|
|
11
15
|
export declare function getCacheDir(options: Pick<Options.WebDriver, 'cacheDir'>, caps: Capabilities.Capabilities): string;
|
|
12
16
|
export declare function setupChromedriver(cacheDir: string, driverVersion?: string): Promise<{
|
|
13
17
|
executablePath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/driver/utils.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAOxD,wBAAgB,WAAW,CAAC,MAAM,EAAE,oBAAoB,YAYvD;AAED,wBAAgB,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/driver/utils.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAOxD,wBAAgB,WAAW,CAAC,MAAM,EAAE,oBAAoB,YAYvD;AAED,wBAAgB,sBAAsB,CAAC,UAAU,CAAC,EAAE,MAAM,sBAiBzD;AAED,wBAAsB,uBAAuB,CAAC,WAAW,CAAC,EAAE,MAAM,+BAiBjE;AAGD,eAAO,MAAM,wBAAwB,aAAc,MAAM,mBAAmB,MAAM,cAAc,MAAM,SAOrG,CAAA;AAED,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,YAAY;;;;;;GAwE5F;AAED,wBAAgB,gBAAgB,CAAE,IAAI,EAAE,YAAY,CAAC,YAAY,oGAShE;AAED,wBAAgB,WAAW,CAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,YAAY,UAGzG;AAED,wBAAsB,iBAAiB,CAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM;;GA8DhF;AAED,wBAAgB,gBAAgB,CAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,mBAEzE;AAED,wBAAgB,eAAe,CAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,mBAExE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,WAQ/H;AAED,wBAAgB,QAAQ,CAAE,WAAW,CAAC,EAAE,MAAM,WAE7C;AACD,wBAAgB,QAAQ,CAAE,WAAW,CAAC,EAAE,MAAM,WAE7C;AACD,wBAAgB,SAAS,CAAE,WAAW,CAAC,EAAE,MAAM,WAE9C;AACD,wBAAgB,MAAM,CAAE,WAAW,CAAC,EAAE,MAAM,WAE3C"}
|
package/build/driver/utils.js
CHANGED
|
@@ -6,10 +6,10 @@ import cp from 'node:child_process';
|
|
|
6
6
|
import got from 'got';
|
|
7
7
|
import decamelize from 'decamelize';
|
|
8
8
|
import logger from '@wdio/logger';
|
|
9
|
-
import { getChromePath } from 'chrome-launcher';
|
|
10
9
|
import { install, canDownload, resolveBuildId, detectBrowserPlatform, Browser, ChromeReleaseChannel, computeExecutablePath } from '@puppeteer/browsers';
|
|
11
10
|
import { download as downloadGeckodriver } from 'geckodriver';
|
|
12
11
|
import { download as downloadEdgedriver } from 'edgedriver';
|
|
12
|
+
import { locateChrome, locateFirefox } from 'locate-app';
|
|
13
13
|
import { DEFAULT_HOSTNAME, DEFAULT_PROTOCOL, DEFAULT_PATH, SUPPORTED_BROWSERNAMES } from '../constants.js';
|
|
14
14
|
const log = logger('webdriver');
|
|
15
15
|
const EXCLUDED_PARAMS = ['version', 'help'];
|
|
@@ -26,20 +26,11 @@ export function parseParams(params) {
|
|
|
26
26
|
.flat()
|
|
27
27
|
.filter(Boolean);
|
|
28
28
|
}
|
|
29
|
-
export function
|
|
30
|
-
try {
|
|
31
|
-
const chromePath = getChromePath();
|
|
32
|
-
return chromePath;
|
|
33
|
-
}
|
|
34
|
-
catch (err) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
export function getBuildIdByPath(chromePath) {
|
|
29
|
+
export function getBuildIdByChromePath(chromePath) {
|
|
39
30
|
if (!chromePath) {
|
|
40
31
|
return;
|
|
41
32
|
}
|
|
42
|
-
|
|
33
|
+
if (os.platform() === 'win32') {
|
|
43
34
|
const versionPath = path.dirname(chromePath);
|
|
44
35
|
const contents = fs.readdirSync(versionPath);
|
|
45
36
|
const versions = contents.filter(a => /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/g.test(a));
|
|
@@ -48,7 +39,23 @@ export function getBuildIdByPath(chromePath) {
|
|
|
48
39
|
return oldest;
|
|
49
40
|
}
|
|
50
41
|
const versionString = cp.execSync(`"${chromePath}" --version`).toString();
|
|
51
|
-
return versionString.split(' ').pop()?.trim();
|
|
42
|
+
return versionString.trim().split(' ').pop()?.trim();
|
|
43
|
+
}
|
|
44
|
+
export async function getBuildIdByFirefoxPath(firefoxPath) {
|
|
45
|
+
if (!firefoxPath) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (os.platform() === 'win32') {
|
|
49
|
+
const appPath = path.dirname(firefoxPath);
|
|
50
|
+
const contents = (await fsp.readFile(path.join(appPath, 'application.ini'))).toString('utf-8');
|
|
51
|
+
return contents
|
|
52
|
+
.split('\n')
|
|
53
|
+
.filter((line) => line.startsWith('Version='))
|
|
54
|
+
.map((line) => line.replace('Version=', '').replace(/\r/, ''))
|
|
55
|
+
.pop();
|
|
56
|
+
}
|
|
57
|
+
const versionString = cp.execSync(`"${firefoxPath}" --version`).toString();
|
|
58
|
+
return versionString.trim().split(' ').pop()?.trim();
|
|
52
59
|
}
|
|
53
60
|
let lastTimeCalled = Date.now();
|
|
54
61
|
export const downloadProgressCallback = (artifact, downloadedBytes, totalBytes) => {
|
|
@@ -59,8 +66,9 @@ export const downloadProgressCallback = (artifact, downloadedBytes, totalBytes)
|
|
|
59
66
|
log.info(`Downloading ${artifact} ${percentage}%`);
|
|
60
67
|
lastTimeCalled = Date.now();
|
|
61
68
|
};
|
|
62
|
-
export async function
|
|
69
|
+
export async function setupPuppeteerBrowser(cacheDir, caps) {
|
|
63
70
|
caps.browserName = caps.browserName?.toLowerCase();
|
|
71
|
+
const browserName = caps.browserName === Browser.FIREFOX ? Browser.FIREFOX : Browser.CHROME;
|
|
64
72
|
const exist = await fsp.access(cacheDir).then(() => true, () => false);
|
|
65
73
|
if (!exist) {
|
|
66
74
|
await fsp.mkdir(cacheDir, { recursive: true });
|
|
@@ -68,11 +76,15 @@ export async function setupChrome(cacheDir, caps) {
|
|
|
68
76
|
/**
|
|
69
77
|
* don't set up Chrome if a binary was defined in caps
|
|
70
78
|
*/
|
|
71
|
-
const
|
|
72
|
-
|
|
79
|
+
const browserOptions = (browserName === Browser.CHROME
|
|
80
|
+
? caps['goog:chromeOptions']
|
|
81
|
+
: caps['moz:firefoxOptions']) || {};
|
|
82
|
+
if (typeof browserOptions.binary === 'string') {
|
|
73
83
|
return {
|
|
74
|
-
executablePath:
|
|
75
|
-
browserVersion:
|
|
84
|
+
executablePath: browserOptions.binary,
|
|
85
|
+
browserVersion: browserName === Browser.CHROME
|
|
86
|
+
? getBuildIdByChromePath(browserOptions.binary)
|
|
87
|
+
: await getBuildIdByFirefoxPath(browserOptions.binary)
|
|
76
88
|
};
|
|
77
89
|
}
|
|
78
90
|
const platform = detectBrowserPlatform();
|
|
@@ -80,41 +92,47 @@ export async function setupChrome(cacheDir, caps) {
|
|
|
80
92
|
throw new Error('The current platform is not supported.');
|
|
81
93
|
}
|
|
82
94
|
if (!caps.browserVersion) {
|
|
83
|
-
const executablePath =
|
|
84
|
-
|
|
95
|
+
const executablePath = browserName === Browser.CHROME
|
|
96
|
+
? await locateChrome().catch(() => undefined)
|
|
97
|
+
: await locateFirefox().catch(() => undefined);
|
|
98
|
+
const tag = browserName === Browser.CHROME
|
|
99
|
+
? getBuildIdByChromePath(executablePath)
|
|
100
|
+
: await getBuildIdByFirefoxPath(executablePath);
|
|
85
101
|
/**
|
|
86
102
|
* verify that we have a valid Chrome browser installed
|
|
87
103
|
*/
|
|
88
104
|
if (tag) {
|
|
89
105
|
return {
|
|
90
106
|
executablePath,
|
|
91
|
-
browserVersion: await resolveBuildId(
|
|
107
|
+
browserVersion: await resolveBuildId(browserName, platform, tag)
|
|
92
108
|
};
|
|
93
109
|
}
|
|
94
110
|
}
|
|
95
111
|
/**
|
|
96
112
|
* otherwise download provided Chrome browser version or "stable"
|
|
97
113
|
*/
|
|
98
|
-
const tag =
|
|
99
|
-
|
|
114
|
+
const tag = browserName === Browser.CHROME
|
|
115
|
+
? caps.browserVersion || ChromeReleaseChannel.STABLE
|
|
116
|
+
: caps.browserVersion || 'latest';
|
|
117
|
+
const buildId = await resolveBuildId(browserName, platform, tag);
|
|
100
118
|
const installOptions = {
|
|
101
119
|
unpack: true,
|
|
102
120
|
cacheDir,
|
|
103
121
|
platform,
|
|
104
122
|
buildId,
|
|
105
|
-
browser:
|
|
106
|
-
downloadProgressCallback: (downloadedBytes, totalBytes) => downloadProgressCallback(
|
|
123
|
+
browser: browserName,
|
|
124
|
+
downloadProgressCallback: (downloadedBytes, totalBytes) => downloadProgressCallback(`${browserName} (${buildId})`, downloadedBytes, totalBytes)
|
|
107
125
|
};
|
|
108
126
|
const isCombinationAvailable = await canDownload(installOptions);
|
|
109
127
|
if (!isCombinationAvailable) {
|
|
110
|
-
throw new Error(`Couldn't find a matching
|
|
128
|
+
throw new Error(`Couldn't find a matching ${browserName} browser for tag "${buildId}" on platform "${platform}"`);
|
|
111
129
|
}
|
|
112
|
-
log.info(`Setting up
|
|
130
|
+
log.info(`Setting up ${browserName} v${buildId}`);
|
|
113
131
|
await install(installOptions);
|
|
114
132
|
const executablePath = computeExecutablePath(installOptions);
|
|
115
133
|
return { executablePath, browserVersion: buildId };
|
|
116
134
|
}
|
|
117
|
-
function getDriverOptions(caps) {
|
|
135
|
+
export function getDriverOptions(caps) {
|
|
118
136
|
return (caps['wdio:chromedriverOptions'] ||
|
|
119
137
|
caps['wdio:geckodriverOptions'] ||
|
|
120
138
|
caps['wdio:edgedriverOptions'] ||
|
|
@@ -131,7 +149,7 @@ export async function setupChromedriver(cacheDir, driverVersion) {
|
|
|
131
149
|
if (!platform) {
|
|
132
150
|
throw new Error('The current platform is not supported.');
|
|
133
151
|
}
|
|
134
|
-
const version = driverVersion ||
|
|
152
|
+
const version = driverVersion || getBuildIdByChromePath(await locateChrome()) || ChromeReleaseChannel.STABLE;
|
|
135
153
|
const buildId = await resolveBuildId(Browser.CHROMEDRIVER, platform, version);
|
|
136
154
|
let executablePath = computeExecutablePath({
|
|
137
155
|
browser: Browser.CHROMEDRIVER,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wdio/utils",
|
|
3
|
-
"version": "8.15.
|
|
3
|
+
"version": "8.15.9",
|
|
4
4
|
"description": "A WDIO helper utility to provide several utility functions used across the project.",
|
|
5
5
|
"author": "Christian Bromann <mail@bromann.dev>",
|
|
6
6
|
"homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-utils",
|
|
@@ -33,7 +33,6 @@
|
|
|
33
33
|
"@puppeteer/browsers": "^1.6.0",
|
|
34
34
|
"@wdio/logger": "8.11.0",
|
|
35
35
|
"@wdio/types": "8.15.7",
|
|
36
|
-
"chrome-launcher": "^1.0.0",
|
|
37
36
|
"decamelize": "^6.0.0",
|
|
38
37
|
"deepmerge-ts": "^5.1.0",
|
|
39
38
|
"edgedriver": "^5.3.5",
|
|
@@ -41,11 +40,12 @@
|
|
|
41
40
|
"get-port": "^7.0.0",
|
|
42
41
|
"got": "^13.0.0",
|
|
43
42
|
"import-meta-resolve": "^3.0.0",
|
|
43
|
+
"locate-app": "^2.1.0",
|
|
44
44
|
"safaridriver": "^0.1.0",
|
|
45
45
|
"wait-port": "^1.0.4"
|
|
46
46
|
},
|
|
47
47
|
"publishConfig": {
|
|
48
48
|
"access": "public"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "86eec4b2a71da7dcfaa0f021db32c8035e0ff06a"
|
|
51
51
|
}
|