@wdio/cli 8.14.6 → 8.15.0
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/constants.d.ts +1 -1
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +10 -1
- package/build/interface.d.ts +2 -2
- package/build/interface.d.ts.map +1 -1
- package/build/interface.js +5 -1
- package/build/launcher.d.ts +1 -0
- package/build/launcher.d.ts.map +1 -1
- package/build/launcher.js +25 -6
- package/build/templates/exampleFiles/browser/Component.stencil.ejs +43 -0
- package/build/templates/exampleFiles/browser/Component.stencil.test.ejs +23 -0
- package/build/utils.d.ts.map +1 -1
- package/build/utils.js +15 -2
- package/package.json +8 -8
package/build/constants.d.ts
CHANGED
|
@@ -192,7 +192,7 @@ export declare const QUESTIONNAIRE: ({
|
|
|
192
192
|
type: string;
|
|
193
193
|
name: string;
|
|
194
194
|
message: string;
|
|
195
|
-
choices: CompilerOptions[];
|
|
195
|
+
choices: (answers: Questionnair) => CompilerOptions[];
|
|
196
196
|
default: (answers: Questionnair) => Promise<CompilerOptions>;
|
|
197
197
|
when?: undefined;
|
|
198
198
|
} | {
|
package/build/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAG9C,eAAO,MAAM,GAAG,KAA6B,CAAA;AAE7C,eAAO,MAAM,YAAY,QAAqE,CAAA;AAE9F,eAAO,MAAM,mBAAmB,8HAI/B,CAAA;AAED,eAAO,MAAM,+BAA+B,UAA2C,CAAA;AACvF,eAAO,MAAM,6BAA6B,ucAYzC,CAAA;AAED,eAAO,MAAM,iCAAiC,8CAG7C,CAAA;AAED,eAAO,MAAM,WAAW,KAAK,CAAA;AAE7B,eAAO,MAAM,cAAc;;;;CAI1B,CAAA;AAED,eAAO,MAAM,UAAU;;;;CAItB,CAAA;AAED,oBAAY,eAAe;IACvB,KAAK,gCAAgC;IACrC,EAAE,iDAAiD;IACnD,GAAG,QAAQ;CACd;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;CAkF9B,CAAA;AAED,eAAO,MAAM,gCAAgC;;;;;;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAG9C,eAAO,MAAM,GAAG,KAA6B,CAAA;AAE7C,eAAO,MAAM,YAAY,QAAqE,CAAA;AAE9F,eAAO,MAAM,mBAAmB,8HAI/B,CAAA;AAED,eAAO,MAAM,+BAA+B,UAA2C,CAAA;AACvF,eAAO,MAAM,6BAA6B,ucAYzC,CAAA;AAED,eAAO,MAAM,iCAAiC,8CAG7C,CAAA;AAED,eAAO,MAAM,WAAW,KAAK,CAAA;AAE7B,eAAO,MAAM,cAAc;;;;CAI1B,CAAA;AAED,eAAO,MAAM,UAAU;;;;CAItB,CAAA;AAED,oBAAY,eAAe;IACvB,KAAK,gCAAgC;IACrC,EAAE,iDAAiD;IACnD,GAAG,QAAQ;CACd;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;CAkF9B,CAAA;AAED,eAAO,MAAM,gCAAgC;;;;;;IAS5C,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM3D,CAAA;AAED,oBAAY,aAAa;IACrB,KAAK,wBAAwB;IAC7B,UAAU,kCAAkC;IAC5C,SAAS,kCAAkC;IAC3C,YAAY,oCAAoC;IAChD,YAAY,uEAAuE;IACnF,IAAI,iCAAiC;CACxC;AAED,aAAK,eAAe;IAChB,KAAK,UAAU;IACf,IAAI,SAAS;CAChB;AAED,oBAAY,aAAa;IACrB,EAAE,OAAO;IACT,EAAE,OAAO;IACT,IAAI,SAAS;CAChB;AAED,eAAO,MAAM,gBAAgB;;;GAG5B,CAAA;AAED,eAAO,MAAM,mBAAmB;;;GAG/B,CAAA;AAED,eAAO,MAAM,oBAAoB;;;GAKhC,CAAA;AAED,iBAAS,eAAe,CAAE,OAAO,EAAE,YAAY,WAE9C;AAMD,eAAO,MAAM,aAAa,SAYzB,CAAA;AAqBD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAkBqB,YAAY;;;;;;;oBAkBX,YAAY;;;;;;;;;;;oBAOb,YAAY;;;;;;;;;;oBAgBX,YAAY;;;;;oBAQb,YAAY;;;;;;;;oBAMZ,YAAY;;;;;;;;oBAyBZ,YAAY;;;;;;oBAoDZ,YAAY;;;;;;;oBASZ,YAAY;;;;;;uBA0BR,YAAY;;;;;;;;;;uBAaxC,YAAY;uBASe,YAAY;;;;;;uBAmBZ,YAAY;oBAIf,YAAY;;;;;;uBAkCT,YAAY;oBAKf,YAAY;;;;;;;;;;;;;;;;uBAqBpC,YAAY;;;;uBAuBZ,YAAY;;;;;;;;;IA2DjC,CAAA"}
|
package/build/constants.js
CHANGED
|
@@ -137,6 +137,7 @@ export const SUPPORTED_BROWSER_RUNNER_PRESETS = [
|
|
|
137
137
|
{ name: 'Vue.js (https://vuejs.org/)', value: '@vitejs/plugin-vue$--$vue' },
|
|
138
138
|
{ name: 'Svelte (https://svelte.dev/)', value: '@sveltejs/vite-plugin-svelte$--$svelte' },
|
|
139
139
|
{ name: 'SolidJS (https://www.solidjs.com/)', value: 'vite-plugin-solid$--$solid' },
|
|
140
|
+
{ name: 'StencilJS (https://stenciljs.com/)', value: '$--$stencil' },
|
|
140
141
|
{ name: 'React (https://reactjs.org/)', value: '@vitejs/plugin-react$--$react' },
|
|
141
142
|
{ name: 'Preact (https://preactjs.com/)', value: '@preact/preset-vite$--$preact' },
|
|
142
143
|
{ name: 'Other', value: false }
|
|
@@ -392,7 +393,15 @@ export const QUESTIONNAIRE = [{
|
|
|
392
393
|
type: 'list',
|
|
393
394
|
name: 'isUsingCompiler',
|
|
394
395
|
message: 'Do you want to use a compiler?',
|
|
395
|
-
choices:
|
|
396
|
+
choices: (answers) => {
|
|
397
|
+
/**
|
|
398
|
+
* StencilJS only supports TypeScript
|
|
399
|
+
*/
|
|
400
|
+
if (answers.preset && answers.preset.includes('stencil')) {
|
|
401
|
+
return [CompilerOptions.TS];
|
|
402
|
+
}
|
|
403
|
+
return Object.values(CompilerOptions);
|
|
404
|
+
},
|
|
396
405
|
default: /* istanbul ignore next */ (answers) => detectCompiler(answers)
|
|
397
406
|
}, {
|
|
398
407
|
type: 'confirm',
|
package/build/interface.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { EventEmitter } from 'node:events';
|
|
3
3
|
import type { Options, Workers } from '@wdio/types';
|
|
4
|
-
import
|
|
4
|
+
import { HookError } from './utils.js';
|
|
5
5
|
interface TestError {
|
|
6
6
|
type: string;
|
|
7
7
|
message: string;
|
|
@@ -63,7 +63,7 @@ export default class WDIOCLInterface extends EventEmitter {
|
|
|
63
63
|
* for testing purposes call console log in a static method
|
|
64
64
|
*/
|
|
65
65
|
log(...args: any[]): any[];
|
|
66
|
-
logHookError(error: HookError): any[];
|
|
66
|
+
logHookError(error: Error | HookError): any[];
|
|
67
67
|
/**
|
|
68
68
|
* event handler that is triggered when runner sends up events
|
|
69
69
|
*/
|
package/build/interface.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../src/interface.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,KAAK,EAAE,OAAO,EAAgB,OAAO,EAAE,MAAM,aAAa,CAAA;AAEjE,OAAO,
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../src/interface.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,KAAK,EAAE,OAAO,EAAgB,OAAO,EAAE,MAAM,aAAa,CAAA;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAStC,UAAU,SAAS;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,iBAAiB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,KAAK,CAAC,EAAE,SAAS,CAAA;CACpB;AAED,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,YAAY;IAyBjD,OAAO,CAAC,OAAO;IACR,cAAc,EAAE,MAAM;IAC7B,OAAO,CAAC,YAAY;IA1BjB,cAAc,EAAE,OAAO,CAAA;IACvB,MAAM;;;;;MAKZ;IAED,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,qBAAqB,CAAQ;IAErC,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAMZ;gBAGO,OAAO,EAAE,OAAO,CAAC,UAAU,EAC5B,cAAc,EAAE,MAAM,EACrB,YAAY,UAAQ;IAuBhC,KAAK;IAqBL,OAAO;IAWP,aAAa,CAAE,GAAG,EAAE,MAAM;IAI1B,WAAW,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,SAAI;IAKxD,UAAU,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,SAAI;IAIvD,aAAa,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,SAAI;IAI1D,UAAU,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG;IAI1C,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,SAAI,EAAE,OAAO,SAAK,EAAE,OAAO,GAAE,QAAmB;IAYrG,WAAW,CAAE,OAAO,EAAE,iBAAiB;IAUvC,YAAY,CAAE,KAAK,GAAE,MAAM,EAAO;IAOlC;;OAEG;IACH,MAAM,CAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,GAAG,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;IASrE;;OAEG;IACH,QAAQ,CAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IA2BrF;;OAEG;IACH,GAAG,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAMnB,YAAY,CAAE,KAAK,EAAE,KAAK,GAAG,SAAS;IAOtC;;OAEG;IACH,SAAS,CAAE,KAAK,EAAE,iBAAiB;IAiDnC,aAAa;IAgBb,cAAc;IAYd,YAAY;IAaZ,QAAQ;CAIX"}
|
package/build/interface.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
2
|
import chalk, { supportsColor } from 'chalk';
|
|
3
3
|
import logger from '@wdio/logger';
|
|
4
|
+
import { HookError } from './utils.js';
|
|
4
5
|
import { getRunnerName } from './utils.js';
|
|
5
6
|
const log = logger('@wdio/cli');
|
|
6
7
|
const EVENT_FILTER = [
|
|
@@ -165,7 +166,10 @@ export default class WDIOCLInterface extends EventEmitter {
|
|
|
165
166
|
return args;
|
|
166
167
|
}
|
|
167
168
|
logHookError(error) {
|
|
168
|
-
|
|
169
|
+
if (error instanceof HookError) {
|
|
170
|
+
return this.log(`${chalk.red(error.name)} in "${error.origin}"\n${chalk.red(error.stack || error.message)}`);
|
|
171
|
+
}
|
|
172
|
+
return this.log(`${chalk.red(error.name)}: ${chalk.red(error.stack || error.message)}`);
|
|
169
173
|
}
|
|
170
174
|
/**
|
|
171
175
|
* event handler that is triggered when runner sends up events
|
package/build/launcher.d.ts
CHANGED
package/build/launcher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,OAAO,KAAK,EAAyB,QAAQ,EAAE,MAAM,aAAa,CAAA;AAElE,OAAO,WAAW,MAAM,gBAAgB,CAAA;AAGxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAkBrD,MAAM,WAAW,UAAU;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAA;CAClB;AAED,cAAM,QAAQ;
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,OAAO,KAAK,EAAyB,QAAQ,EAAE,MAAM,aAAa,CAAA;AAElE,OAAO,WAAW,MAAM,gBAAgB,CAAA;AAGxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAkBrD,MAAM,WAAW,UAAU;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAA;CAClB;AAED,cAAM,QAAQ;IAkBN,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,YAAY;IAnBjB,YAAY,EAAE,YAAY,CAAA;IAC1B,aAAa,UAAQ;IACrB,qBAAqB,UAAQ;IAC7B,MAAM,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAA;IAChC,SAAS,CAAC,EAAE,WAAW,CAAA;IAE9B,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,wBAAwB,CAAQ;IACxC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,aAAa,CAAI;IAEzB,OAAO,CAAC,SAAS,CAAC,CAA4B;IAC9C,OAAO,CAAC,QAAQ,CAAC,CAAU;gBAGf,eAAe,EAAE,MAAM,EACvB,KAAK,GAAE,OAAO,CAAC,mBAAmB,CAAM,EACxC,YAAY,UAAQ;IAKhC;;;OAGG;IACG,GAAG,IAAI,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IAqHxC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAyEhB;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAmEjB;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAIpC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;;;;;OAMG;YACW,cAAc;IA8F5B,OAAO,CAAC,gBAAgB;IAWxB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;;;OAMG;YACW,WAAW;IA0DzB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAcpB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAG7B;AAED,eAAe,QAAQ,CAAA"}
|
package/build/launcher.js
CHANGED
|
@@ -3,7 +3,7 @@ import path from 'node:path';
|
|
|
3
3
|
import exitHook from 'async-exit-hook';
|
|
4
4
|
import logger from '@wdio/logger';
|
|
5
5
|
import { ConfigParser } from '@wdio/config';
|
|
6
|
-
import { initialisePlugin, initialiseLauncherService, sleep } from '@wdio/utils';
|
|
6
|
+
import { initialisePlugin, initialiseLauncherService, sleep, setupDriver, setupBrowser } from '@wdio/utils';
|
|
7
7
|
import CLInterface from './interface.js';
|
|
8
8
|
import { runLauncherHook, runOnCompleteHook, runServiceHook } from './utils.js';
|
|
9
9
|
const log = logger('@wdio/cli:launcher');
|
|
@@ -13,6 +13,7 @@ class Launcher {
|
|
|
13
13
|
_isWatchMode;
|
|
14
14
|
configParser;
|
|
15
15
|
isMultiremote = false;
|
|
16
|
+
isParallelMultiremote = false;
|
|
16
17
|
runner;
|
|
17
18
|
interface;
|
|
18
19
|
_exitCode = 0;
|
|
@@ -42,15 +43,26 @@ class Launcher {
|
|
|
42
43
|
*/
|
|
43
44
|
this._args.autoCompileOpts = config.autoCompileOpts;
|
|
44
45
|
const capabilities = this.configParser.getCapabilities();
|
|
45
|
-
this.
|
|
46
|
+
this.isParallelMultiremote = Array.isArray(capabilities) &&
|
|
47
|
+
capabilities.every(cap => Object.values(cap).length > 0 && Object.values(cap).every(c => typeof c === 'object' && c.capabilities));
|
|
48
|
+
this.isMultiremote = this.isParallelMultiremote || !Array.isArray(capabilities);
|
|
46
49
|
if (config.outputDir) {
|
|
47
50
|
await fs.mkdir(path.join(config.outputDir), { recursive: true });
|
|
48
51
|
process.env.WDIO_LOG_PATH = path.join(config.outputDir, 'wdio.log');
|
|
49
52
|
}
|
|
50
53
|
logger.setLogLevelsConfig(config.logLevels, config.logLevel);
|
|
54
|
+
/**
|
|
55
|
+
* For Parallel-Multiremote, only get the specs and excludes from the first object
|
|
56
|
+
*/
|
|
51
57
|
const totalWorkerCnt = Array.isArray(capabilities)
|
|
52
58
|
? capabilities
|
|
53
|
-
.map((c) =>
|
|
59
|
+
.map((c) => {
|
|
60
|
+
if (this.isParallelMultiremote) {
|
|
61
|
+
const keys = Object.keys(c);
|
|
62
|
+
return this.configParser.getSpecs(c[keys[0]].capabilities.specs, c[keys[0]].capabilities.exclude).length;
|
|
63
|
+
}
|
|
64
|
+
return this.configParser.getSpecs(c.specs, c.exclude).length;
|
|
65
|
+
})
|
|
54
66
|
.reduce((a, b) => a + b, 0)
|
|
55
67
|
: 1;
|
|
56
68
|
this.interface = new CLInterface(config, totalWorkerCnt, this._isWatchMode);
|
|
@@ -80,6 +92,13 @@ class Launcher {
|
|
|
80
92
|
log.info('Run onPrepare hook');
|
|
81
93
|
await runLauncherHook(config.onPrepare, config, caps);
|
|
82
94
|
await runServiceHook(this._launcher, 'onPrepare', config, caps);
|
|
95
|
+
/**
|
|
96
|
+
* pre-configure necessary driver for worker threads
|
|
97
|
+
*/
|
|
98
|
+
await Promise.all([
|
|
99
|
+
setupDriver(config, caps),
|
|
100
|
+
setupBrowser(config, caps)
|
|
101
|
+
]);
|
|
83
102
|
exitCode = await this._runMode(config, caps);
|
|
84
103
|
/**
|
|
85
104
|
* run onComplete hook
|
|
@@ -135,7 +154,7 @@ class Launcher {
|
|
|
135
154
|
* schedule test runs
|
|
136
155
|
*/
|
|
137
156
|
let cid = 0;
|
|
138
|
-
if (this.isMultiremote) {
|
|
157
|
+
if (this.isMultiremote && !this.isParallelMultiremote) {
|
|
139
158
|
/**
|
|
140
159
|
* Multiremote mode
|
|
141
160
|
*/
|
|
@@ -149,13 +168,13 @@ class Launcher {
|
|
|
149
168
|
}
|
|
150
169
|
else {
|
|
151
170
|
/**
|
|
152
|
-
* Regular mode
|
|
171
|
+
* Regular mode & Parallel Multiremote
|
|
153
172
|
*/
|
|
154
173
|
for (const capabilities of caps) {
|
|
155
174
|
/**
|
|
156
175
|
* when using browser runner we only allow one session per browser
|
|
157
176
|
*/
|
|
158
|
-
const availableInstances = config.runner === 'browser'
|
|
177
|
+
const availableInstances = this.isParallelMultiremote ? config.maxInstances || 1 : config.runner === 'browser'
|
|
159
178
|
? 1
|
|
160
179
|
: capabilities.maxInstances || config.maxInstancesPerCapability;
|
|
161
180
|
this._schedule.push({
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Component, Prop, h, Fragment } from '@stencil/core'
|
|
2
|
+
|
|
3
|
+
@Component({
|
|
4
|
+
tag: 'my-element',
|
|
5
|
+
shadow: true,
|
|
6
|
+
styleUrl: 'Component.css'
|
|
7
|
+
})
|
|
8
|
+
export class MyElement {
|
|
9
|
+
@Prop() count = 0
|
|
10
|
+
@Prop() docsHint = 'Click on the Vite and Lit logos to learn more'
|
|
11
|
+
|
|
12
|
+
normalize(name: string): string {
|
|
13
|
+
if (name) {
|
|
14
|
+
return name.slice(0, 1).toUpperCase() + name.slice(1).toLowerCase()
|
|
15
|
+
}
|
|
16
|
+
return ''
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
render() {
|
|
20
|
+
return (
|
|
21
|
+
<>
|
|
22
|
+
<div>
|
|
23
|
+
<a href="https://webdriver.io/docs/component-testing" target="_blank">
|
|
24
|
+
<img src="https://webdriver.io/assets/images/robot-3677788dd63849c56aa5cb3f332b12d5.svg" class="logo"
|
|
25
|
+
alt="WebdriverIO logo" />
|
|
26
|
+
</a>
|
|
27
|
+
</div>
|
|
28
|
+
<h1>
|
|
29
|
+
<slot />
|
|
30
|
+
</h1>
|
|
31
|
+
<div class="card">
|
|
32
|
+
<button onClick={() => { this.count++ }} part="button">
|
|
33
|
+
count is {this.count}
|
|
34
|
+
</button>
|
|
35
|
+
<p>
|
|
36
|
+
Edit <code>src/Component.test.tsx</code> and save to test HMR
|
|
37
|
+
</p>
|
|
38
|
+
</div>
|
|
39
|
+
<p class="read-the-docs">{this.docsHint}</p>
|
|
40
|
+
</>
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { render } from '@wdio/browser-runner/stencil'
|
|
2
|
+
import { $, expect } from '@wdio/globals'
|
|
3
|
+
|
|
4
|
+
import { MyElement } from './Component.js'
|
|
5
|
+
|
|
6
|
+
describe('Lit component testing', () => {
|
|
7
|
+
it('should increment value on click', async () => {
|
|
8
|
+
await render({
|
|
9
|
+
components: [MyElement],
|
|
10
|
+
template: () => (
|
|
11
|
+
<my-element count={42}>WebdriverIO Component Testing</my-element>
|
|
12
|
+
)
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
const button = await $('my-element').$('>>>button')
|
|
16
|
+
await expect(button).toHaveText('count is 42')
|
|
17
|
+
|
|
18
|
+
await button.click()
|
|
19
|
+
await button.click()
|
|
20
|
+
|
|
21
|
+
await expect(button).toHaveText('count is 44')
|
|
22
|
+
})
|
|
23
|
+
})
|
package/build/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/build/utils.js
CHANGED
|
@@ -292,7 +292,7 @@ export async function generateTestFiles(answers) {
|
|
|
292
292
|
}
|
|
293
293
|
return generateBrowserRunnerTestFiles(answers);
|
|
294
294
|
}
|
|
295
|
-
const TSX_BASED_FRAMEWORKS = ['react', 'preact', 'solid'];
|
|
295
|
+
const TSX_BASED_FRAMEWORKS = ['react', 'preact', 'solid', 'stencil'];
|
|
296
296
|
export async function generateBrowserRunnerTestFiles(answers) {
|
|
297
297
|
const isUsingFramework = typeof answers.preset === 'string';
|
|
298
298
|
const preset = getPreset(answers);
|
|
@@ -334,7 +334,7 @@ async function generateLocalRunnerTestFiles(answers) {
|
|
|
334
334
|
const files = (await Promise.all(testFiles.map((dirPath) => readDir(dirPath, [(file, stats) => !stats.isDirectory() && !(file.endsWith('.ejs') || file.endsWith('.feature'))])))).reduce((cur, acc) => [...acc, ...(cur)], []);
|
|
335
335
|
for (const file of files) {
|
|
336
336
|
const renderedTpl = await renderFile(file, { answers });
|
|
337
|
-
const isJSX = answers.preset &&
|
|
337
|
+
const isJSX = answers.preset && TSX_BASED_FRAMEWORKS.includes(answers.preset);
|
|
338
338
|
const fileEnding = (answers.isUsingTypeScript ? '.ts' : '.js') + (isJSX ? 'x' : '');
|
|
339
339
|
const destPath = (file.endsWith('page.js.ejs')
|
|
340
340
|
? path.join(answers.destPageObjectRootPath, path.basename(file))
|
|
@@ -567,6 +567,12 @@ export function npmInstall(parsedAnswers, useYarn, npmTag) {
|
|
|
567
567
|
if (preset === 'lit') {
|
|
568
568
|
parsedAnswers.packagesToInstall.push('lit');
|
|
569
569
|
}
|
|
570
|
+
/**
|
|
571
|
+
* add dependency for Stencil testing
|
|
572
|
+
*/
|
|
573
|
+
if (preset === 'stencil') {
|
|
574
|
+
parsedAnswers.packagesToInstall.push('@stencil/core');
|
|
575
|
+
}
|
|
570
576
|
/**
|
|
571
577
|
* add helper for React rendering when not using Testing Library
|
|
572
578
|
*/
|
|
@@ -682,6 +688,13 @@ export async function setupTypeScript(parsedAnswers) {
|
|
|
682
688
|
jsx: 'preserve',
|
|
683
689
|
jsxImportSource: 'solid-js'
|
|
684
690
|
}
|
|
691
|
+
: {}, preset === 'stencil'
|
|
692
|
+
? {
|
|
693
|
+
experimentalDecorators: true,
|
|
694
|
+
jsx: 'react',
|
|
695
|
+
jsxFactory: 'h',
|
|
696
|
+
jsxFragmentFactory: 'Fragment'
|
|
697
|
+
}
|
|
685
698
|
: {})
|
|
686
699
|
},
|
|
687
700
|
include: preset === 'svelte'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wdio/cli",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.15.0",
|
|
4
4
|
"description": "WebdriverIO testrunner command line interface",
|
|
5
5
|
"author": "Christian Bromann <mail@bromann.dev>",
|
|
6
6
|
"homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-cli",
|
|
@@ -46,12 +46,12 @@
|
|
|
46
46
|
"typeScriptVersion": "3.8.3",
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@types/node": "^20.1.1",
|
|
49
|
-
"@wdio/config": "8.
|
|
50
|
-
"@wdio/globals": "8.
|
|
49
|
+
"@wdio/config": "8.15.0",
|
|
50
|
+
"@wdio/globals": "8.15.0",
|
|
51
51
|
"@wdio/logger": "8.11.0",
|
|
52
52
|
"@wdio/protocols": "8.14.6",
|
|
53
|
-
"@wdio/types": "8.
|
|
54
|
-
"@wdio/utils": "8.
|
|
53
|
+
"@wdio/types": "8.15.0",
|
|
54
|
+
"@wdio/utils": "8.15.0",
|
|
55
55
|
"async-exit-hook": "^2.0.1",
|
|
56
56
|
"chalk": "^5.2.0",
|
|
57
57
|
"chokidar": "^3.5.3",
|
|
@@ -60,13 +60,13 @@
|
|
|
60
60
|
"ejs": "^3.1.9",
|
|
61
61
|
"execa": "^7.1.1",
|
|
62
62
|
"import-meta-resolve": "^3.0.0",
|
|
63
|
-
"inquirer": "9.2.
|
|
63
|
+
"inquirer": "9.2.10",
|
|
64
64
|
"lodash.flattendeep": "^4.4.0",
|
|
65
65
|
"lodash.pickby": "^4.6.0",
|
|
66
66
|
"lodash.union": "^4.6.0",
|
|
67
67
|
"read-pkg-up": "10.0.0",
|
|
68
68
|
"recursive-readdir": "^2.2.3",
|
|
69
|
-
"webdriverio": "8.
|
|
69
|
+
"webdriverio": "8.15.0",
|
|
70
70
|
"yargs": "^17.7.2",
|
|
71
71
|
"yarn-install": "^1.0.0"
|
|
72
72
|
},
|
|
@@ -83,5 +83,5 @@
|
|
|
83
83
|
"publishConfig": {
|
|
84
84
|
"access": "public"
|
|
85
85
|
},
|
|
86
|
-
"gitHead": "
|
|
86
|
+
"gitHead": "78e199c5ffd74bdf3a5576952c3834c29afa989f"
|
|
87
87
|
}
|