creevey 0.10.0-beta.31 → 0.10.0-beta.33
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/README.md +19 -41
- package/dist/client/addon/withCreevey.js +1 -0
- package/dist/client/addon/withCreevey.js.map +1 -1
- package/dist/client/shared/components/ResultsPage.d.ts +1 -1
- package/dist/client/web/CreeveyApp.js +1 -0
- package/dist/client/web/CreeveyApp.js.map +1 -1
- package/dist/server/docker.d.ts +1 -1
- package/dist/server/docker.js +21 -14
- package/dist/server/docker.js.map +1 -1
- package/dist/server/index.js +9 -10
- package/dist/server/index.js.map +1 -1
- package/dist/server/playwright/docker-file.d.ts +1 -2
- package/dist/server/playwright/docker-file.js +10 -4
- package/dist/server/playwright/docker-file.js.map +1 -1
- package/dist/server/playwright/docker.d.ts +2 -1
- package/dist/server/playwright/docker.js +10 -2
- package/dist/server/playwright/docker.js.map +1 -1
- package/dist/server/playwright/internal.d.ts +3 -4
- package/dist/server/playwright/internal.js +48 -37
- package/dist/server/playwright/internal.js.map +1 -1
- package/dist/server/playwright/webdriver.js +4 -7
- package/dist/server/playwright/webdriver.js.map +1 -1
- package/dist/server/selenium/internal.js +5 -12
- package/dist/server/selenium/internal.js.map +1 -1
- package/dist/server/selenium/webdriver.js +4 -8
- package/dist/server/selenium/webdriver.js.map +1 -1
- package/dist/server/telemetry.js +2 -2
- package/dist/server/utils.d.ts +1 -2
- package/dist/server/utils.js +11 -8
- package/dist/server/utils.js.map +1 -1
- package/dist/server/webdriver.d.ts +2 -0
- package/dist/server/webdriver.js +13 -1
- package/dist/server/webdriver.js.map +1 -1
- package/dist/server/worker/context.d.ts +3 -0
- package/dist/server/worker/context.js +15 -0
- package/dist/server/worker/context.js.map +1 -0
- package/dist/types.d.ts +0 -2
- package/dist/types.js.map +1 -1
- package/docs/cli.md +12 -0
- package/docs/config.md +178 -167
- package/docs/storybook.md +60 -0
- package/docs/tests.md +50 -45
- package/package.json +1 -1
- package/src/client/addon/withCreevey.ts +1 -0
- package/src/client/web/CreeveyApp.tsx +1 -0
- package/src/server/docker.ts +24 -13
- package/src/server/index.ts +11 -14
- package/src/server/playwright/docker-file.ts +12 -5
- package/src/server/playwright/docker.ts +16 -3
- package/src/server/playwright/index-source.mjs +16 -0
- package/src/server/playwright/internal.ts +78 -52
- package/src/server/playwright/webdriver.ts +4 -7
- package/src/server/selenium/internal.ts +5 -12
- package/src/server/selenium/webdriver.ts +4 -8
- package/src/server/telemetry.ts +2 -2
- package/src/server/utils.ts +33 -25
- package/src/server/webdriver.ts +13 -0
- package/src/server/worker/context.ts +14 -0
- package/src/types.ts +0 -2
package/dist/server/utils.d.ts
CHANGED
@@ -27,7 +27,6 @@ export declare function shouldSkipByOption(browser: string, meta: {
|
|
27
27
|
export declare function shutdownWorkers(): Promise<void>;
|
28
28
|
export declare function gracefullyKill(worker: Worker): void;
|
29
29
|
export declare function killTree(rootPid: number): Promise<void>;
|
30
|
-
export declare function shutdown(): void;
|
31
30
|
export declare function shutdownWithError(): void;
|
32
31
|
export declare function resolvePlaywrightBrowserType(browserName: string): (typeof browserTypes)[keyof typeof browserTypes];
|
33
32
|
export declare function getCreeveyCache(): Promise<string | undefined>;
|
@@ -39,5 +38,5 @@ export declare const downloadBinary: (downloadUrl: string, destination: string)
|
|
39
38
|
export declare function readDirRecursive(dirPath: string): string[];
|
40
39
|
export declare function tryToLoadTestsData(filename: string): Partial<Record<string, ServerTest>> | undefined;
|
41
40
|
export declare function loadThroughTSX<T>(callback: (load: (modulePath: string) => Promise<T>) => Promise<T>): Promise<T>;
|
42
|
-
export declare function waitOnUrl(
|
41
|
+
export declare function waitOnUrl(waitUrl: string, timeout: number, delay: number): Promise<void>;
|
43
42
|
export {};
|
package/dist/server/utils.js
CHANGED
@@ -9,7 +9,6 @@ exports.shouldSkipByOption = shouldSkipByOption;
|
|
9
9
|
exports.shutdownWorkers = shutdownWorkers;
|
10
10
|
exports.gracefullyKill = gracefullyKill;
|
11
11
|
exports.killTree = killTree;
|
12
|
-
exports.shutdown = shutdown;
|
13
12
|
exports.shutdownWithError = shutdownWithError;
|
14
13
|
exports.resolvePlaywrightBrowserType = resolvePlaywrightBrowserType;
|
15
14
|
exports.getCreeveyCache = getCreeveyCache;
|
@@ -30,6 +29,7 @@ const api_1 = require("tsx/esm/api");
|
|
30
29
|
const api_2 = require("tsx/cjs/api");
|
31
30
|
const types_js_1 = require("../types.js");
|
32
31
|
const messages_js_1 = require("./messages.js");
|
32
|
+
const webdriver_js_1 = require("./webdriver.js");
|
33
33
|
const assert_1 = __importDefault(require("assert"));
|
34
34
|
const pidtree_1 = __importDefault(require("pidtree"));
|
35
35
|
const importMetaUrl = (0, url_1.pathToFileURL)(__filename).href;
|
@@ -91,7 +91,7 @@ async function shutdownWorkers() {
|
|
91
91
|
const timeout = setTimeout(() => {
|
92
92
|
if (worker.process.pid)
|
93
93
|
void killTree(worker.process.pid);
|
94
|
-
},
|
94
|
+
}, 10_000);
|
95
95
|
worker.on('exit', () => {
|
96
96
|
clearTimeout(timeout);
|
97
97
|
resolve();
|
@@ -122,9 +122,6 @@ async function killTree(rootPid) {
|
|
122
122
|
}
|
123
123
|
});
|
124
124
|
}
|
125
|
-
function shutdown() {
|
126
|
-
process.exit();
|
127
|
-
}
|
128
125
|
function shutdownWithError() {
|
129
126
|
process.exit(1);
|
130
127
|
}
|
@@ -209,9 +206,15 @@ async function loadThroughTSX(callback) {
|
|
209
206
|
await unregister();
|
210
207
|
return result;
|
211
208
|
}
|
212
|
-
function waitOnUrl(
|
209
|
+
function waitOnUrl(waitUrl, timeout, delay) {
|
210
|
+
const urls = [waitUrl];
|
211
|
+
if (!webdriver_js_1.LOCALHOST_REGEXP.test(waitUrl)) {
|
212
|
+
const parsedUrl = new URL(waitUrl);
|
213
|
+
parsedUrl.host = 'localhost';
|
214
|
+
urls.push(parsedUrl.toString());
|
215
|
+
}
|
213
216
|
const startTime = Date.now();
|
214
|
-
return new Promise((resolve, reject) => {
|
217
|
+
return Promise.race(urls.map((url) => new Promise((resolve, reject) => {
|
215
218
|
const interval = setInterval(() => {
|
216
219
|
http_1.default
|
217
220
|
.get(url, (response) => {
|
@@ -228,6 +231,6 @@ function waitOnUrl(url, timeout, delay) {
|
|
228
231
|
reject(new Error(`${url} didn't respond within ${timeout / 1000} seconds`));
|
229
232
|
}
|
230
233
|
}, delay);
|
231
|
-
});
|
234
|
+
})));
|
232
235
|
}
|
233
236
|
//# sourceMappingURL=utils.js.map
|
package/dist/server/utils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/server/utils.ts"],"names":[],"mappings":";;;;;;
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/server/utils.ts"],"names":[],"mappings":";;;;;;AA4CA,gCAiBC;AAED,gDA0BC;AAED,0CAqBC;AAED,wCASC;AAED,4BAUC;AAED,8CAEC;AAED,oEAOC;AAED,0CAGC;AAED,kCAKC;AAED,kCAEC;AAED,sCAeC;AAuCD,4CAQC;AAED,gDAOC;AAGD,wCAkBC;AAED,8BAgCC;AApSD,4CAAoB;AACpB,kDAA0B;AAC1B,gDAAwB;AACxB,sDAA8B;AAC9B,+BAA+B;AAC/B,6BAAmD;AACnD,qCAAsD;AACtD,qCAAsD;AACtD,0CAAqG;AACrG,+CAAyE;AACzE,iDAAkD;AAClD,oDAA4B;AAC5B,sDAA8B;AAE9B,MAAM,aAAa,GAAG,IAAA,mBAAa,EAAC,UAAU,CAAC,CAAC,IAAI,CAAC;AAExC,QAAA,cAAc,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAEpC,QAAA,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAExE,MAAM,YAAY,GAAG;IACnB,QAAQ,EAAE,UAAU;IACpB,yBAAyB,EAAE,UAAU;IACrC,MAAM,EAAE,UAAU;IAClB,aAAa,EAAE,UAAU;IACzB,MAAM,EAAE,UAAU;IAClB,aAAa,EAAE,UAAU;IACzB,YAAY,EAAE,UAAU;IACxB,eAAe,EAAE,UAAU;IAC3B,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACR,CAAC;AAEE,QAAA,cAAc,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAE5E,SAAS,OAAO,CAAC,OAA+C,EAAE,KAAa;IAC7E,OAAO,CACL,CAAC,OAAO,OAAO,IAAI,QAAQ,IAAI,OAAO,IAAI,KAAK,CAAC;QAChD,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC,OAAO,YAAY,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC,IAAA,oBAAS,EAAC,OAAO,CAAC,CACpB,CAAC;AACJ,CAAC;AAED,SAAgB,UAAU,CACxB,OAAe,EACf,IAGC,EACD,WAAwB,EACxB,IAAa;IAEb,IAAI,OAAO,WAAW,IAAI,QAAQ,EAAE,CAAC;QACnC,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACtF,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,kBAAkB,CAChC,OAAe,EACf,IAGC,EACD,UAAqC,EACrC,MAAc,EACd,IAAa;IAEb,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACrE,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;IAC3D,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAC7B,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,CAAC,IAAA,oBAAS,EAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE5D,OAAO,aAAa,IAAI,UAAU,IAAI,WAAW,IAAI,UAAU,IAAI,MAAM,CAAC;AAC5E,CAAC;AAEM,KAAK,UAAU,eAAe;IACnC,sBAAc,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,MAAM,CAAC,iBAAO,CAAC,OAAO,IAAI,EAAE,CAAC;SACjC,MAAM,CAAC,oBAAS,CAAC;SACjB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;SACxC,GAAG,CACF,CAAC,MAAM,EAAE,EAAE,CACT,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG;gBAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5D,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACrB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,IAAA,iCAAmB,EAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CACL,CACJ,CAAC;IACF,IAAA,iCAAmB,GAAE,CAAC;AACxB,CAAC;AAED,SAAgB,cAAc,CAAC,MAAc;IAC3C,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;QAC9B,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG;YAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5D,CAAC,EAAE,KAAK,CAAC,CAAC;IACV,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACrB,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,IAAA,iCAAmB,EAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,OAAe;IAC5C,MAAM,IAAI,GAAG,MAAM,IAAA,iBAAO,EAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,UAAU;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAgB,4BAA4B,CAAC,WAAmB;IAC9D,IAAA,gBAAM,EACJ,WAAW,IAAI,YAAY,EAC3B,IAAI,KAAK,CAAC,iCAAiC,WAAW,6BAA6B,CAAC,CACrF,CAAC;IAEF,OAAO,YAAY,CAAC,WAAwC,CAAC,CAAC;AAChE,CAAC;AAEM,KAAK,UAAU,eAAe;IACnC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACjE,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAA,cAAO,EAAC,IAAA,mBAAa,EAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;AACvF,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,GAAsB,EAAE,SAAwB;IAChF,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,SAAS,EAAE;YAAE,MAAM,EAAE,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,SAAS,EAAE,CAAC;AACrB,CAAC;AAED,SAAgB,WAAW,CAAC,IAAgB;IAC1C,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,oBAAS,CAAC,CAAC;AAC5E,CAAC;AAED,SAAgB,aAAa,CAAC,KAA+B;IAC3D,OAAO,IAAI,GAAG,CACX,EAAe,CAAC,MAAM,CACrB,GAAG,KAAK;SACL,MAAM,CAAC,oBAAS,CAAC;SACjB,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CACjD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAClD,CAAC,KAAK,EAAE,EAAE,CACR,GAAG,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;SACvE,MAAM,CAAC,oBAAS,CAAC;SACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CACrB,CACF,CACJ,CACF,CAAC;AACJ,CAAC;AAED,mEAAmE;AACtD,QAAA,cAAc,GACzB,CAAC,YAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,YAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClG,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC;AAEzB,MAAM,cAAc,GAAG,CAAC,WAAmB,EAAE,WAAmB,EAAiB,EAAE,CACxF,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAC9B,eAAK,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE;IAClC,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;QAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,QAAQ,CAAC,UAAU,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;YAClG,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAA,sBAAc,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,QAAQ,CAAC,UAAU,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;QAClG,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,YAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE1B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QAC3B,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC/B,YAAE,CAAC,MAAM,CAAC,WAAW,EAAE,eAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC;AA9BS,QAAA,cAAc,kBA8BvB;AAEJ,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,OAAQ,EAAe,CAAC,MAAM,CAC5B,GAAG,YAAE;SACF,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC7C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACd,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CACrG,CACJ,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAAC,QAAgB;IACjD,IAAI,CAAC;QACH,iEAAiE;QACjE,OAAO,OAAO,CAAC,QAAQ,CAAwC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,UAAU;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5D,KAAK,UAAU,cAAc,CAClC,QAAkE;IAElE,qDAAqD;IACrD,MAAM,UAAU,GAAG,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,IAAA,cAAW,GAAE,CAAC,CAAC,CAAC,IAAA,cAAW,GAAE,CAAC;IAEpE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,CAAC,UAAU,EAAE,EAAE,CAC3C,WAAW,GAAG,EAAE;QACd,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QACpB,CAAC,CAAC,iEAAiE;YACjE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAM,CAAC,CAC9C,CAAC;IAEF,oEAAoE;IACpE,8GAA8G;IAC9G,MAAM,UAAU,EAAE,CAAC;IAEnB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,SAAS,CAAC,OAAe,EAAE,OAAe,EAAE,KAAa;IACvE,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,IAAI,CAAC,+BAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,SAAS,CAAC,IAAI,GAAG,WAAW,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,IAAI,CACjB,IAAI,CAAC,GAAG,CACN,CAAC,GAAG,EAAE,EAAE,CACN,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,cAAI;iBACD,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACrB,IAAI,QAAQ,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;oBAChC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACxB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC;iBACD,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAChB,qBAAqB;YACvB,CAAC,CAAC,CAAC;YAEL,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;gBACrC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,0BAA0B,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,CAAC,CACL,CACF,CAAC;AACJ,CAAC"}
|
@@ -2,6 +2,8 @@ import type { Args } from '@storybook/csf';
|
|
2
2
|
import { StoryInput, BaseCreeveyTestContext, CreeveyTestContext, StoriesRaw, CreeveyWebdriver, ServerTest } from '../types.js';
|
3
3
|
export declare const storybookRootID = "storybook-root";
|
4
4
|
export declare const LOCALHOST_REGEXP: RegExp;
|
5
|
+
export declare const openBrowser: () => () => void;
|
6
|
+
export declare const waitForBrowserClose: () => Promise<void> | null;
|
5
7
|
export declare function resolveStorybookUrl(storybookUrl: string, checkUrl: (url: string) => Promise<boolean>): Promise<string>;
|
6
8
|
export declare function appendIframePath(url: string): string;
|
7
9
|
export declare function getAddresses(): string[];
|
package/dist/server/webdriver.js
CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.CreeveyWebdriverBase = exports.LOCALHOST_REGEXP = exports.storybookRootID = void 0;
|
6
|
+
exports.CreeveyWebdriverBase = exports.waitForBrowserClose = exports.openBrowser = exports.LOCALHOST_REGEXP = exports.storybookRootID = void 0;
|
7
7
|
exports.resolveStorybookUrl = resolveStorybookUrl;
|
8
8
|
exports.appendIframePath = appendIframePath;
|
9
9
|
exports.getAddresses = getAddresses;
|
@@ -15,6 +15,18 @@ const messages_js_1 = require("./messages.js");
|
|
15
15
|
exports.storybookRootID = 'storybook-root';
|
16
16
|
exports.LOCALHOST_REGEXP = /(localhost|127\.0\.0\.1)/i;
|
17
17
|
const DOCKER_INTERNAL = 'host.docker.internal';
|
18
|
+
let browserClosePromise = null;
|
19
|
+
const openBrowser = () => {
|
20
|
+
let resolve;
|
21
|
+
browserClosePromise = new Promise((r) => (resolve = r));
|
22
|
+
return () => {
|
23
|
+
resolve();
|
24
|
+
browserClosePromise = null;
|
25
|
+
};
|
26
|
+
};
|
27
|
+
exports.openBrowser = openBrowser;
|
28
|
+
const waitForBrowserClose = () => browserClosePromise;
|
29
|
+
exports.waitForBrowserClose = waitForBrowserClose;
|
18
30
|
async function resolveStorybookUrl(storybookUrl, checkUrl) {
|
19
31
|
(0, logger_js_1.logger)().debug('Resolving storybook url');
|
20
32
|
const addresses = getAddresses();
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"webdriver.js","sourceRoot":"","sources":["../../src/server/webdriver.ts"],"names":[],"mappings":";;;;;;
|
1
|
+
{"version":3,"file":"webdriver.js","sourceRoot":"","sources":["../../src/server/webdriver.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.setWorkerContainer = setWorkerContainer;
|
4
|
+
exports.removeWorkerContainer = removeWorkerContainer;
|
5
|
+
let workerContainer = null;
|
6
|
+
function setWorkerContainer(container) {
|
7
|
+
workerContainer = container;
|
8
|
+
}
|
9
|
+
async function removeWorkerContainer() {
|
10
|
+
if (workerContainer) {
|
11
|
+
await workerContainer.remove({ force: true });
|
12
|
+
workerContainer = null;
|
13
|
+
}
|
14
|
+
}
|
15
|
+
//# sourceMappingURL=context.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/server/worker/context.ts"],"names":[],"mappings":";;AAIA,gDAEC;AAED,sDAKC;AAXD,IAAI,eAAe,GAAqB,IAAI,CAAC;AAE7C,SAAgB,kBAAkB,CAAC,SAAoB;IACrD,eAAe,GAAG,SAAS,CAAC;AAC9B,CAAC;AAEM,KAAK,UAAU,qBAAqB;IACzC,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
@@ -119,7 +119,6 @@ export interface BrowserConfigObject {
|
|
119
119
|
screenshots?: boolean;
|
120
120
|
snapshots?: boolean;
|
121
121
|
sources?: boolean;
|
122
|
-
path: string;
|
123
122
|
};
|
124
123
|
};
|
125
124
|
}
|
@@ -318,7 +317,6 @@ export interface Options {
|
|
318
317
|
storybookUrl?: string;
|
319
318
|
storybookPort?: string;
|
320
319
|
storybookAutorunCmd?: string;
|
321
|
-
saveReport: boolean;
|
322
320
|
failFast?: boolean;
|
323
321
|
odiff?: boolean;
|
324
322
|
noDocker?: boolean;
|
package/dist/types.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAokBA,oBAEC;AAED,8BAEC;AAED,wBASC;AAED,4BAEC;AAED,4BAEC;AAGD,gCAEC;AAED,oCAEC;AAED,4CAEC;AAED,0CAEC;AAED,4CAEC;AAED,sCAEC;AA3kBD,IAAY,eAUX;AAVD,WAAY,eAAe;IACzB,6CAA0B,CAAA;IAC1B,wDAAqC,CAAA;IACrC,iDAA8B,CAAA;IAC9B,mDAAgC,CAAA;IAChC,iDAA8B,CAAA;IAC9B,gEAA6C,CAAA;IAC7C,wDAAqC,CAAA;IACrC,6CAA0B,CAAA;IAC1B,mDAAgC,CAAA;AAClC,CAAC,EAVW,eAAe,+BAAf,eAAe,QAU1B;AAsXD,MAAa,WAAY,SAAQ,KAAK;IACpC,MAAM,CAA4C;CACnD;AAFD,kCAEC;AAwCD,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,kCAAmB,CAAA;IACnB,8BAAe,CAAA;IACf,kCAAmB,CAAA;IACnB,oCAAqB,CAAA;IACrB,iCAAkB,CAAA;IAClB,iCAAkB,CAAA;AACpB,CAAC,EAPW,WAAW,2BAAX,WAAW,QAOtB;AAwGD,SAAgB,IAAI;IAClB,UAAU;AACZ,CAAC;AAED,SAAgB,SAAS,CAAI,KAA2B;IACtD,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAC/C,CAAC;AAED,SAAgB,MAAM,CAAC,CAA8B;IACnD,OAAO,CACL,SAAS,CAAC,CAAC,CAAC;QACZ,QAAQ,CAAC,CAAC,CAAC;QACX,IAAI,IAAI,CAAC;QACT,SAAS,IAAI,CAAC;QACd,OAAO,CAAC,CAAC,EAAE,IAAI,QAAQ;QACvB,OAAO,CAAC,CAAC,OAAO,IAAI,QAAQ,CAC7B,CAAC;AACJ,CAAC;AAED,SAAgB,QAAQ,CAAC,CAAU;IACjC,OAAO,OAAO,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC;AAC3C,CAAC;AAED,SAAgB,QAAQ,CAAC,CAAU;IACjC,OAAO,OAAO,CAAC,IAAI,QAAQ,CAAC;AAC9B,CAAC;AAED,8DAA8D;AAC9D,SAAgB,UAAU,CAAC,CAAU;IACnC,OAAO,OAAO,CAAC,IAAI,UAAU,CAAC;AAChC,CAAC;AAED,SAAgB,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,WAAW,IAAI,QAAQ,IAAI,KAAK,CAAC;AAC3D,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,OAAO,CAAC;AACjD,CAAC;AAED,SAAgB,eAAe,CAAC,OAAgB;IAC9C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;AAChE,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;AACjE,CAAC;AAED,SAAgB,aAAa,CAAC,OAAgB;IAC5C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;AAC9D,CAAC"}
|
package/docs/cli.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
## Creevey CLI Options
|
2
|
+
|
3
|
+
There are several options available for the Creevey CLI:
|
4
|
+
|
5
|
+
- `--ui` — Starts Creevey UI Runner, which allows to run tests individually, compare screenshots and approve them without hesitation
|
6
|
+
- `-s, --storybookStart` — Starts Storybook for you by using `storybook dev` command
|
7
|
+
- `-c, --config` — Specify path to the config file. Default `.creevey/config.ts` or `creevey.config.ts`
|
8
|
+
- `-p, --port` — Specify port in which UI Runner should be started. Default `3000`
|
9
|
+
- `-d, --debug` — Enable debug output. It also enables recording video and traces if Playwright is used
|
10
|
+
- `-u, --update` — Approve all images from `report` directory. But it's recommended to do it from the UI Runner
|
11
|
+
- `--reportDir` — Path where reports will be stored
|
12
|
+
- `--screenDir` — Path where reference images are located
|
package/docs/config.md
CHANGED
@@ -1,215 +1,226 @@
|
|
1
|
-
|
1
|
+
# Creevey Configuration Examples
|
2
2
|
|
3
|
-
|
3
|
+
Creevey is highly configurable and can be tailored to your specific needs. Here are some examples of how to configure Creevey for your Storybook.
|
4
4
|
|
5
|
-
|
6
|
-
- `--ui` — Start runner web server
|
7
|
-
- `--update` — Approve all images from `report` directory
|
8
|
-
- `--port` — Specify port for web server. Default `3000`
|
9
|
-
- `--reportDir` — Path where reports will be stored
|
10
|
-
- `--screenDir` — Path where reference images are located
|
11
|
-
- `--debug` — Enable debug output
|
5
|
+
## Zero Configuration
|
12
6
|
|
13
|
-
|
7
|
+
The simplest way to get started with Creevey, just run it without any configuration:
|
14
8
|
|
15
|
-
|
9
|
+
```bash
|
10
|
+
yarn creevey -s
|
11
|
+
```
|
12
|
+
|
13
|
+
This will start Creevey with default settings, using Chrome as the browser and also start Storybook hosted at `http://localhost:6006`. Adding `--ui` flag will start the web server for the UI Runner.
|
14
|
+
|
15
|
+
**NOTE** By default, Creevey uses Selenium WebDriver, but it's done for backward compatibility and it's recommended to define webdriver explicitly in the configuration.
|
16
16
|
|
17
17
|
```ts
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
},
|
18
|
+
// creevey.config.ts
|
19
|
+
import { SeleniumWebdriver } from 'creevey/selenium';
|
20
|
+
|
21
|
+
const config = {
|
22
|
+
webdriver: SeleniumWebdriver,
|
23
|
+
};
|
24
|
+
|
25
|
+
// or use Playwright instead
|
26
|
+
|
27
|
+
import { PlaywrightWebdriver } from 'creevey/playwright';
|
28
|
+
|
29
|
+
const config = {
|
30
|
+
webdriver: PlaywrightWebdriver,
|
32
31
|
};
|
33
32
|
```
|
34
33
|
|
35
|
-
|
34
|
+
## Basic Configuration
|
36
35
|
|
37
|
-
|
36
|
+
The minimal configuration to test your stories might be:
|
38
37
|
|
39
38
|
```ts
|
40
|
-
|
39
|
+
// creevey.config.ts
|
40
|
+
import { CreeveyConfig } from 'creevey';
|
41
|
+
import { PlaywrightWebdriver } from 'creevey/playwright';
|
41
42
|
|
42
|
-
|
43
|
-
|
44
|
-
// In most cases you don't need this option
|
45
|
-
gridUrl: '<gridUrl>/wd/hub',
|
43
|
+
const config: CreeveyConfig = {
|
44
|
+
webdriver: PlaywrightWebdriver,
|
46
45
|
|
47
|
-
//
|
48
|
-
storybookUrl: 'http://localhost:
|
46
|
+
// The URL where your Storybook is hosted
|
47
|
+
storybookUrl: 'http://localhost:9000',
|
49
48
|
|
50
|
-
//
|
51
|
-
|
49
|
+
// Define which browsers to use for testing
|
50
|
+
browsers: {
|
51
|
+
chromium: {
|
52
|
+
// The browser type name which will be used by Playwright
|
53
|
+
browserName: 'chromium',
|
54
|
+
// Default viewport dimensions
|
55
|
+
viewport: { width: 1024, height: 768 },
|
56
|
+
// Limit of retries for failed tests
|
57
|
+
maxRetries: 2,
|
58
|
+
},
|
59
|
+
},
|
60
|
+
};
|
52
61
|
|
53
|
-
|
54
|
-
|
62
|
+
export default config;
|
63
|
+
```
|
55
64
|
|
56
|
-
|
57
|
-
reportDir: path.join(__dirname, '../report'),
|
65
|
+
## Multiple Browsers Configuration
|
58
66
|
|
59
|
-
|
60
|
-
|
67
|
+
It's possible to est your stories across different browsers:
|
68
|
+
|
69
|
+
```ts
|
70
|
+
// creevey.config.ts
|
71
|
+
import { CreeveyConfig } from 'creevey';
|
72
|
+
import { PlaywrightWebdriver } from 'creevey/playwright';
|
61
73
|
|
62
|
-
|
63
|
-
|
74
|
+
const config: CreeveyConfig = {
|
75
|
+
webdriver: PlaywrightWebdriver,
|
64
76
|
|
65
|
-
// Describe browsers and their options
|
66
77
|
browsers: {
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
otherChrome: {
|
72
|
-
browserName: 'chrome',
|
73
|
-
// Define initial viewport size
|
74
|
-
viewport: { width: 1024, height: 720 },
|
75
|
-
// Increase parallel sessions
|
78
|
+
chromium: {
|
79
|
+
browserName: 'chromium',
|
80
|
+
// Amount of parallel browser sessions
|
76
81
|
limit: 2,
|
77
|
-
/* Also you can define any browser capabilities here */
|
78
|
-
version: '86.0',
|
79
|
-
// It's possible to set Storybook's globals
|
80
|
-
// https://github.com/storybookjs/storybook/blob/v6.0.0/docs/essentials/toolbars-and-globals.md
|
81
|
-
// NOTE: This is an experimental feature and will be replaced in future
|
82
|
-
_storybookGlobals: {
|
83
|
-
myTheme: 'dark',
|
84
|
-
},
|
85
82
|
},
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
browserName: 'internet explorer',
|
90
|
-
// Like user another Selenium Grid url
|
91
|
-
gridUrl: '<anotherGridUrl>/wd/hub',
|
92
|
-
// Or use different storybook instance
|
93
|
-
storybookUrl: 'http://mystoryhost:6007',
|
94
|
-
// And use you own docker image
|
95
|
-
// By default Creevey will use selenoid image according browser name and version:
|
96
|
-
// `selenoid/${browserName}:${version ?? 'latest'}` image
|
97
|
-
dockerImage: 'microsoft/ie:11.0',
|
83
|
+
firefox: {
|
84
|
+
browserName: 'firefox',
|
85
|
+
limit: 2,
|
98
86
|
},
|
99
87
|
},
|
88
|
+
};
|
89
|
+
|
90
|
+
export default config;
|
91
|
+
```
|
92
|
+
|
93
|
+
## Test stories with different themes
|
94
|
+
|
95
|
+
Test your components with different themes:
|
100
96
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
97
|
+
```ts
|
98
|
+
// creevey.config.ts
|
99
|
+
import { CreeveyConfig } from 'creevey';
|
100
|
+
import { PlaywrightWebdriver } from 'creevey/playwright';
|
101
|
+
|
102
|
+
const config: CreeveyConfig = {
|
103
|
+
webdriver: PlaywrightWebdriver,
|
104
|
+
browsers: {
|
105
|
+
dark: {
|
106
|
+
browserName: 'chromium',
|
107
|
+
// Define a storybook globals which will be applied to the stories
|
108
|
+
_storybookGlobals: {
|
109
|
+
theme: 'dark',
|
110
|
+
},
|
105
111
|
},
|
106
|
-
|
107
|
-
|
112
|
+
light: {
|
113
|
+
browserName: 'chromium',
|
114
|
+
_storybookGlobals: {
|
115
|
+
theme: 'light',
|
116
|
+
},
|
108
117
|
},
|
109
118
|
},
|
110
119
|
};
|
120
|
+
|
121
|
+
export default config;
|
111
122
|
```
|
112
123
|
|
113
|
-
|
124
|
+
## Using dedicated Selenium Grid server
|
114
125
|
|
115
|
-
|
126
|
+
Use Selenium Grid for distributed testing:
|
116
127
|
|
117
|
-
```
|
118
|
-
// .
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
128
|
+
```ts
|
129
|
+
// creevey.config.ts
|
130
|
+
import { CreeveyConfig } from 'creevey';
|
131
|
+
import { SeleniumWebdriver } from 'creevey/selenium';
|
132
|
+
|
133
|
+
const config: CreeveyConfig = {
|
134
|
+
webdriver: SeleniumWebdriver,
|
135
|
+
// Selenium Grid connection settings
|
136
|
+
gridUrl: 'http://selenium-hub:4444/wd/hub',
|
137
|
+
browsers: {
|
138
|
+
chrome: {
|
139
|
+
browserName: 'chrome',
|
140
|
+
// You can define any additional selenium capabilities here
|
141
|
+
// https://w3c.github.io/webdriver/#capabilities
|
142
|
+
seleniumCapabilities: {
|
143
|
+
browserVersion: '128.0',
|
144
|
+
platformName: 'linux',
|
145
|
+
},
|
124
146
|
},
|
125
147
|
},
|
126
148
|
};
|
149
|
+
|
150
|
+
export default config;
|
127
151
|
```
|
128
152
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
153
|
+
## Playwright configuration options
|
154
|
+
|
155
|
+
Leverage Playwright for testing:
|
156
|
+
|
157
|
+
```ts
|
158
|
+
// creevey.config.ts
|
159
|
+
import { CreeveyConfig } from 'creevey';
|
160
|
+
import { PlaywrightWebdriver } from 'creevey/playwright';
|
161
|
+
|
162
|
+
const config: CreeveyConfig = {
|
163
|
+
webdriver: PlaywrightWebdriver,
|
164
|
+
browsers: {
|
165
|
+
chromium: {
|
166
|
+
browserName: 'chromium',
|
167
|
+
// Playwright-specific options
|
168
|
+
// https://playwright.dev/docs/api/class-browsertype#browser-type-launch-server
|
169
|
+
playwrightOptions: {
|
170
|
+
headless: false,
|
171
|
+
channel: 'chrome-canary',
|
172
|
+
slowMo: 50, // Slow down Playwright operations by 50ms
|
147
173
|
},
|
148
174
|
},
|
149
175
|
},
|
150
|
-
} as Meta & CreeveyMeta;
|
151
|
-
|
152
|
-
export const Basic: Story & CreeveyStory = () => <MyComponent />;
|
153
|
-
Basic.parameters = {
|
154
|
-
creevey: {
|
155
|
-
captureElement: '.container',
|
156
|
-
// elements to ignore in capturing screenshot
|
157
|
-
ignoreElements: ['button', '.local-time'],
|
158
|
-
// Delay before test starts in ms
|
159
|
-
delay: 1000,
|
160
|
-
tests: {
|
161
|
-
/* ... */
|
162
|
-
},
|
163
|
-
},
|
164
176
|
};
|
177
|
+
|
178
|
+
export default config;
|
165
179
|
```
|
166
180
|
|
167
|
-
|
181
|
+
## Advanced Configuration
|
182
|
+
|
183
|
+
Comprehensive example combining multiple features and additional options:
|
168
184
|
|
169
185
|
```ts
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
186
|
+
// creevey.config.ts
|
187
|
+
import path from 'path';
|
188
|
+
import MochaJUnitReporter from 'mocha-junit-reporter';
|
189
|
+
import { CreeveyConfig } from 'creevey';
|
190
|
+
import { PlaywrightWebdriver } from 'creevey/playwright';
|
191
|
+
|
192
|
+
const config: CreeveyConfig = {
|
193
|
+
webdriver: PlaywrightWebdriver,
|
194
|
+
|
195
|
+
// It's possible to resolve Storybook URL at the runtime
|
196
|
+
resolveStorybookUrl: () =>
|
197
|
+
fetch('https://example.com/resolve-ip')
|
198
|
+
.then((res) => res.text())
|
199
|
+
.then((data) => `http://${data}:6006`),
|
200
|
+
|
201
|
+
// Define custom reference screenshots directory
|
202
|
+
screenDir: path.join(process.cwd(), 'screenshots'),
|
203
|
+
|
204
|
+
// Define custom report directory
|
205
|
+
reportDir: path.join(process.cwd(), 'reports'),
|
206
|
+
|
207
|
+
// Define path where Creevey tests are located
|
208
|
+
testDir: path.join(process.cwd(), 'tests'),
|
209
|
+
|
210
|
+
// You can use any Mocha-like reporter
|
211
|
+
reporter: MochaJUnitReporter,
|
179
212
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
- `skip: { 'Skip reason message': { stories: ['simple', 'special'] } }`
|
195
|
-
- `skip: { 'Skip reason message': { stories: /.*large$/ } }`
|
196
|
-
- Skip specific tests:
|
197
|
-
- `skip: { 'Skip reason message': { tests: 'click' } }`
|
198
|
-
- `skip: { 'Skip reason message': { tests: ['hover', 'click'] } }`
|
199
|
-
- `skip: { 'Skip reason message': { tests: /^press.*$/ } }`
|
200
|
-
- Multiple skip options:
|
201
|
-
- for one reason
|
202
|
-
```
|
203
|
-
skip: {
|
204
|
-
"reason": [{ /* ... */ }, { /* ... */ }],
|
205
|
-
}
|
206
|
-
```
|
207
|
-
- for several reasons
|
208
|
-
```
|
209
|
-
skip: {
|
210
|
-
"reason 1": { /* ... */ },
|
211
|
-
"reason 2": { /* ... */ },
|
212
|
-
}
|
213
|
-
```
|
214
|
-
|
215
|
-
NOTE: If you try to skip stories by story name, the storybook name format will be used (For more info see [storybook-export-vs-name-handling](https://storybook.js.org/docs/formats/component-story-format/#storybook-export-vs-name-handling))
|
213
|
+
// Pixelmatch options
|
214
|
+
diffOptions: { threshold: 0.1 },
|
215
|
+
|
216
|
+
// Regex pattern to match test files
|
217
|
+
testsRegex: /\.creevey\.ts$/,
|
218
|
+
|
219
|
+
// Disable using docker, to start browsers locally, it's useful for CI
|
220
|
+
useDocker: process.env.CI,
|
221
|
+
|
222
|
+
browsers: {
|
223
|
+
/* ... */
|
224
|
+
},
|
225
|
+
};
|
226
|
+
```
|