creevey 0.10.0-beta.1 → 0.10.0-beta.11
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/dist/client/addon/components/Panel.js +2 -2
- package/dist/client/addon/components/Panel.js.map +1 -1
- package/dist/client/addon/controller.js +4 -5
- package/dist/client/addon/controller.js.map +1 -1
- package/dist/client/addon/withCreevey.js +18 -34
- package/dist/client/addon/withCreevey.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SwapView.js +12 -0
- package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -1
- package/dist/client/shared/components/PageHeader/ImagePreview.js +1 -0
- package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -1
- package/dist/client/shared/components/ResultsPage.js +23 -5
- package/dist/client/shared/components/ResultsPage.js.map +1 -1
- package/dist/client/web/CreeveyApp.js +22 -6
- package/dist/client/web/CreeveyApp.js.map +1 -1
- package/dist/client/web/CreeveyContext.d.ts +5 -0
- package/dist/client/web/CreeveyContext.js +3 -0
- package/dist/client/web/CreeveyContext.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/Search.js +2 -2
- package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBar.js +1 -0
- package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js +49 -6
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +1 -3
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/TestLink.js +1 -3
- package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -1
- package/dist/client/web/KeyboardEventsContext.d.ts +1 -8
- package/dist/client/web/KeyboardEventsContext.js +62 -57
- package/dist/client/web/KeyboardEventsContext.js.map +1 -1
- package/dist/client/web/assets/{index-DkmZfG9C.js → index-BE9CL5_G.js} +94 -94
- package/dist/client/web/index.html +1 -1
- package/dist/creevey.js +13 -5
- package/dist/creevey.js.map +1 -1
- package/dist/server/config.js +4 -3
- package/dist/server/config.js.map +1 -1
- package/dist/server/docker.js +2 -2
- package/dist/server/docker.js.map +1 -1
- package/dist/server/index.js +29 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/logger.d.ts +2 -1
- package/dist/server/logger.js +7 -3
- package/dist/server/logger.js.map +1 -1
- package/dist/server/master/api.js +1 -1
- package/dist/server/master/api.js.map +1 -1
- package/dist/server/master/pool.d.ts +3 -3
- package/dist/server/master/pool.js +10 -63
- package/dist/server/master/pool.js.map +1 -1
- package/dist/server/master/queue.d.ts +13 -0
- package/dist/server/master/queue.js +64 -0
- package/dist/server/master/queue.js.map +1 -0
- package/dist/server/master/runner.d.ts +1 -0
- package/dist/server/master/runner.js +4 -1
- package/dist/server/master/runner.js.map +1 -1
- package/dist/server/master/server.js +1 -1
- package/dist/server/master/server.js.map +1 -1
- package/dist/server/master/start.js +4 -4
- package/dist/server/master/start.js.map +1 -1
- package/dist/server/playwright/docker-file.js +12 -2
- package/dist/server/playwright/docker-file.js.map +1 -1
- package/dist/server/playwright/internal.d.ts +2 -2
- package/dist/server/playwright/internal.js +56 -44
- package/dist/server/playwright/internal.js.map +1 -1
- package/dist/server/playwright/webdriver.js +1 -1
- package/dist/server/playwright/webdriver.js.map +1 -1
- package/dist/server/providers/browser.js +2 -1
- package/dist/server/providers/browser.js.map +1 -1
- package/dist/server/providers/hybrid.js +1 -1
- package/dist/server/providers/hybrid.js.map +1 -1
- package/dist/server/reporter.js +8 -4
- package/dist/server/reporter.js.map +1 -1
- package/dist/server/selenium/internal.d.ts +2 -3
- package/dist/server/selenium/internal.js +116 -90
- package/dist/server/selenium/internal.js.map +1 -1
- package/dist/server/selenium/selenoid.js +2 -2
- package/dist/server/selenium/selenoid.js.map +1 -1
- package/dist/server/selenium/webdriver.js +1 -1
- package/dist/server/selenium/webdriver.js.map +1 -1
- package/dist/server/telemetry.js +7 -3
- package/dist/server/telemetry.js.map +1 -1
- package/dist/server/utils.d.ts +2 -1
- package/dist/server/utils.js +13 -3
- package/dist/server/utils.js.map +1 -1
- package/dist/server/webdriver.d.ts +2 -3
- package/dist/server/webdriver.js +10 -9
- package/dist/server/webdriver.js.map +1 -1
- package/dist/server/worker/chai-image.d.ts +1 -2
- package/dist/server/worker/chai-image.js +4 -3
- package/dist/server/worker/chai-image.js.map +1 -1
- package/dist/server/worker/start.js +24 -14
- package/dist/server/worker/start.js.map +1 -1
- package/dist/types.d.ts +30 -11
- package/dist/types.js +13 -1
- package/dist/types.js.map +1 -1
- package/package.json +36 -42
- package/src/client/addon/components/Panel.tsx +2 -2
- package/src/client/addon/controller.ts +13 -6
- package/src/client/addon/withCreevey.ts +25 -13
- package/src/client/shared/components/ImagesView/SwapView.tsx +18 -0
- package/src/client/shared/components/PageHeader/ImagePreview.tsx +1 -0
- package/src/client/shared/components/ResultsPage.tsx +28 -7
- package/src/client/web/CreeveyApp.tsx +25 -7
- package/src/client/web/CreeveyContext.tsx +9 -0
- package/src/client/web/CreeveyView/SideBar/Search.tsx +3 -3
- package/src/client/web/CreeveyView/SideBar/SideBar.tsx +1 -0
- package/src/client/web/CreeveyView/SideBar/SideBarFooter.tsx +37 -6
- package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +3 -5
- package/src/client/web/CreeveyView/SideBar/TestLink.tsx +2 -4
- package/src/client/web/KeyboardEventsContext.tsx +61 -73
- package/src/creevey.ts +13 -6
- package/src/server/config.ts +4 -3
- package/src/server/docker.ts +2 -2
- package/src/server/index.ts +27 -4
- package/src/server/logger.ts +6 -2
- package/src/server/master/api.ts +1 -1
- package/src/server/master/pool.ts +18 -56
- package/src/server/master/queue.ts +64 -0
- package/src/server/master/runner.ts +4 -1
- package/src/server/master/server.ts +1 -1
- package/src/server/master/start.ts +7 -4
- package/src/server/playwright/docker-file.ts +14 -2
- package/src/server/playwright/internal.ts +76 -49
- package/src/server/playwright/webdriver.ts +1 -1
- package/src/server/providers/browser.ts +2 -1
- package/src/server/providers/hybrid.ts +1 -1
- package/src/server/reporter.ts +9 -3
- package/src/server/selenium/internal.ts +119 -92
- package/src/server/selenium/selenoid.ts +2 -2
- package/src/server/selenium/webdriver.ts +1 -1
- package/src/server/telemetry.ts +7 -3
- package/src/server/utils.ts +14 -4
- package/src/server/webdriver.ts +10 -15
- package/src/server/worker/chai-image.ts +4 -4
- package/src/server/worker/start.ts +25 -16
- package/src/types.ts +32 -13
- package/.yarnrc.yml +0 -1
- package/chromatic.config.json +0 -5
package/dist/server/reporter.js
CHANGED
@@ -17,20 +17,20 @@ class CreeveyReporter {
|
|
17
17
|
// TODO Output in better way, like vitest, maybe
|
18
18
|
constructor(runner, options) {
|
19
19
|
const { sessionId, browserName } = options.reporterOptions.creevey;
|
20
|
-
const testLogger = loglevel_1.default.getLogger(
|
20
|
+
const testLogger = loglevel_1.default.getLogger(sessionId);
|
21
21
|
loglevel_plugin_prefix_1.default.apply(testLogger, {
|
22
22
|
format(level) {
|
23
|
-
return
|
23
|
+
return `[${browserName}:${chalk_1.default.gray(process.pid)}] ${testLevels[level]} => ${chalk_1.default.gray(sessionId)}`;
|
24
24
|
},
|
25
25
|
});
|
26
26
|
runner.on(types_js_1.TEST_EVENTS.TEST_BEGIN, (test) => {
|
27
27
|
testLogger.warn(chalk_1.default.cyan(test.titlePath().join('/')));
|
28
28
|
});
|
29
29
|
runner.on(types_js_1.TEST_EVENTS.TEST_PASS, (test) => {
|
30
|
-
testLogger.info(chalk_1.default.cyan(test.titlePath().join('/')));
|
30
|
+
testLogger.info(chalk_1.default.cyan(test.titlePath().join('/')), chalk_1.default.gray(`(${test.duration} ms)`));
|
31
31
|
});
|
32
32
|
runner.on(types_js_1.TEST_EVENTS.TEST_FAIL, (test, error) => {
|
33
|
-
testLogger.error(chalk_1.default.cyan(test.titlePath().join('/')), '\n ', this.getErrors(error, (error, imageName) => `${chalk_1.default.bold(imageName ?? browserName)}:${error}`, (error) => error.stack ?? error.message).join('\n '));
|
33
|
+
testLogger.error(chalk_1.default.cyan(test.titlePath().join('/')), chalk_1.default.gray(`(${test.duration} ms)`), '\n ', this.getErrors(error, (error, imageName) => `${chalk_1.default.bold(imageName ?? browserName)}:${error}`, (error) => error.stack ?? error.message).join('\n '));
|
34
34
|
});
|
35
35
|
}
|
36
36
|
getErrors(error, imageErrorToString, errorToString) {
|
@@ -61,12 +61,16 @@ class TeamcityReporter {
|
|
61
61
|
runner.on(types_js_1.TEST_EVENTS.TEST_BEGIN, (test) => {
|
62
62
|
console.log(`##teamcity[testStarted name='${this.escape(test.title)}' flowId='${process.pid}']`);
|
63
63
|
});
|
64
|
+
runner.on(types_js_1.TEST_EVENTS.TEST_PASS, (test) => {
|
65
|
+
console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`);
|
66
|
+
});
|
64
67
|
runner.on(types_js_1.TEST_EVENTS.TEST_FAIL, (test, error) => {
|
65
68
|
Object.entries(reporterOptions.images).forEach(([name, image]) => {
|
66
69
|
if (!image)
|
67
70
|
return;
|
68
71
|
const filePath = test
|
69
72
|
.titlePath()
|
73
|
+
.slice(0, -1)
|
70
74
|
.concat(name == browserName ? [] : [browserName])
|
71
75
|
.map(this.escape)
|
72
76
|
.join('/');
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/server/reporter.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,wDAA8B;AAC9B,oFAA4C;AAC5C,0CAAqF;AAWrF,MAAM,UAAU,GAA2B;IACzC,IAAI,EAAE,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IACzB,IAAI,EAAE,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC;IAC3B,KAAK,EAAE,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC;CACzB,CAAC;AAEF,MAAa,eAAe;IAC1B,gDAAgD;IAChD,YAAY,MAAoB,EAAE,OAA0D;QAC1F,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;QACnE,MAAM,UAAU,GAAG,kBAAM,CAAC,SAAS,CAAC,
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/server/reporter.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,wDAA8B;AAC9B,oFAA4C;AAC5C,0CAAqF;AAWrF,MAAM,UAAU,GAA2B;IACzC,IAAI,EAAE,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IACzB,IAAI,EAAE,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC;IAC3B,KAAK,EAAE,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC;CACzB,CAAC;AAEF,MAAa,eAAe;IAC1B,gDAAgD;IAChD,YAAY,MAAoB,EAAE,OAA0D;QAC1F,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;QACnE,MAAM,UAAU,GAAG,kBAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE/C,gCAAM,CAAC,KAAK,CAAC,UAAU,EAAE;YACvB,MAAM,CAAC,KAAK;gBACV,OAAO,IAAI,WAAW,IAAI,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACxG,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,sBAAW,CAAC,UAAU,EAAE,CAAC,IAAc,EAAE,EAAE;YACnD,UAAU,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,sBAAW,CAAC,SAAS,EAAE,CAAC,IAAc,EAAE,EAAE;YAClD,UAAU,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,MAAM,CAAC,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,sBAAW,CAAC,SAAS,EAAE,CAAC,IAAc,EAAE,KAAK,EAAE,EAAE;YACzD,UAAU,CAAC,KAAK,CACd,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACtC,eAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,MAAM,CAAC,EACnC,MAAM,EACN,IAAI,CAAC,SAAS,CACZ,KAAK,EACL,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,IAAI,KAAK,EAAE,EACxE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CACxC,CAAC,IAAI,CAAC,MAAM,CAAC,CACf,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACO,SAAS,CACf,KAAc,EACd,kBAAiE,EACjE,aAAuC;QAEvC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,CAAC,IAAA,uBAAY,EAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,OAAO,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC7C,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAnDD,0CAmDC;AAED,MAAa,gBAAgB;IAC3B,YAAY,MAAoB,EAAE,OAA0D;QAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC7E,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;QAExD,MAAM,CAAC,EAAE,CAAC,sBAAW,CAAC,UAAU,EAAE,CAAC,IAAc,EAAE,EAAE;YACnD,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,sBAAW,CAAC,SAAS,EAAE,CAAC,IAAc,EAAE,EAAE;YAClD,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACpG,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,sBAAW,CAAC,SAAS,EAAE,CAAC,IAAc,EAAE,KAAY,EAAE,EAAE;YAChE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC/D,IAAI,CAAC,KAAK;oBAAE,OAAO;gBACnB,MAAM,QAAQ,GAAG,IAAI;qBAClB,SAAS,EAAE;qBACX,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBACZ,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;qBAChD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;qBAChB,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEb,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;gBACpC,MAAM,CAAC,MAAM,CAAC,IAAuB,CAAC;qBACnC,MAAM,CAAC,oBAAS,CAAC;qBACjB,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACpB,OAAO,CAAC,GAAG,CACT,gCAAgC,eAAe,CAAC,SAAS,IAAI,QAAQ,IAAI,QAAQ,cAAc,QAAQ,IAAI,CAC5G,CAAC;oBACF,OAAO,CAAC,GAAG,CACT,qCAAqC,IAAI,CAAC,MAAM,CAC9C,IAAI,CAAC,KAAK,CACX,gCAAgC,QAAQ,IAAI,QAAQ,aAAa,OAAO,CAAC,GAAG,IAAI,CAClF,CAAC;gBACJ,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,mEAAmE;YACnE,0KAA0K;YAE1K,IAAI,eAAe,CAAC,SAAS;gBAC3B,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;;gBAElG,OAAO,CAAC,GAAG,CACT,+BAA+B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,MAAM,CAC7E,KAAK,CAAC,OAAO,CACd,cAAc,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,aAAa,OAAO,CAAC,GAAG,IAAI,CAC1E,CAAC;QACN,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE;QACvC,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,OAAO,CACL,GAAG;aACA,QAAQ,EAAE;YACX,4CAA4C;aAC3C,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;aACxB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;aACxB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;aACxB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;aACxB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CACvB,CAAC;IACJ,CAAC,CAAC;CACH;AAtED,4CAsEC"}
|
@@ -1,10 +1,9 @@
|
|
1
1
|
import { Args } from '@storybook/csf';
|
2
|
-
import Logger from 'loglevel';
|
3
2
|
import { WebDriver } from 'selenium-webdriver';
|
4
|
-
import { Config, StoryInput, StoriesRaw, Options, ServerTest } from '../../types.js';
|
3
|
+
import { Config, StorybookGlobals, StoryInput, StoriesRaw, Options, ServerTest } from '../../types.js';
|
5
4
|
export declare class InternalBrowser {
|
6
5
|
#private;
|
7
|
-
constructor(browser: WebDriver, port: number,
|
6
|
+
constructor(browser: WebDriver, port: number, storybookGlobals?: StorybookGlobals);
|
8
7
|
get browser(): WebDriver;
|
9
8
|
closeBrowser(): Promise<void>;
|
10
9
|
takeScreenshot(captureElement?: string | null, ignoreElements?: string | string[] | null): Promise<Buffer>;
|
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
exports.InternalBrowser = void 0;
|
7
|
-
const core_events_1 = require("@storybook/core-events");
|
8
7
|
const chalk_1 = __importDefault(require("chalk"));
|
9
8
|
const http_1 = __importDefault(require("http"));
|
10
9
|
const https_1 = __importDefault(require("https"));
|
@@ -59,15 +58,19 @@ async function openUrlAndWaitForPageSource(browser, url, predicate) {
|
|
59
58
|
} while (predicate(source));
|
60
59
|
return source;
|
61
60
|
}
|
62
|
-
async function buildWebdriver(
|
63
|
-
const browserConfig = config.browsers[
|
64
|
-
const {
|
61
|
+
async function buildWebdriver(browser, gridUrl, config, options) {
|
62
|
+
const browserConfig = config.browsers[browser];
|
63
|
+
const { /*customizeBuilder,*/ seleniumCapabilities, browserName } = browserConfig;
|
65
64
|
const url = new URL(gridUrl);
|
66
65
|
url.username = url.username ? '********' : '';
|
67
66
|
url.password = url.password ? '********' : '';
|
68
|
-
logger_js_1.logger.debug(`
|
67
|
+
(0, logger_js_1.logger)().debug(`Connecting to Selenium ${chalk_1.default.magenta(url.toString())}`);
|
69
68
|
// TODO Define some capabilities explicitly and define typings
|
70
|
-
const capabilities = new selenium_webdriver_1.Capabilities({
|
69
|
+
const capabilities = new selenium_webdriver_1.Capabilities({
|
70
|
+
browserName,
|
71
|
+
...seleniumCapabilities,
|
72
|
+
pageLoadStrategy: capabilities_js_1.PageLoadStrategy.EAGER,
|
73
|
+
});
|
71
74
|
const prefs = new selenium_webdriver_1.logging.Preferences();
|
72
75
|
if (options.trace) {
|
73
76
|
for (const type of Object.values(selenium_webdriver_1.logging.Type)) {
|
@@ -77,47 +80,74 @@ async function buildWebdriver(browserName, gridUrl, config, options) {
|
|
77
80
|
// TODO Fetch selenium grid capabilities
|
78
81
|
// TODO Validate browsers, versions, and platform
|
79
82
|
// TODO Use `customizeBuilder`
|
80
|
-
let
|
83
|
+
let webdriver;
|
81
84
|
try {
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
85
|
+
const maxRetries = 5;
|
86
|
+
let retries = 0;
|
87
|
+
do {
|
88
|
+
webdriver = await Promise.race([
|
89
|
+
new Promise((resolve) => {
|
90
|
+
setTimeout(() => {
|
91
|
+
retries += 1;
|
92
|
+
resolve(null);
|
93
|
+
}, 120_000);
|
94
|
+
}),
|
95
|
+
(async () => {
|
96
|
+
if (retries > 0) {
|
97
|
+
(0, logger_js_1.logger)().debug(`Trying to initialize session to Selenium Grid: retried ${retries} of ${maxRetries}`);
|
98
|
+
}
|
99
|
+
const retry = retries;
|
100
|
+
// const ie = new IeOptions();
|
101
|
+
// const edge = new EdgeOptions();
|
102
|
+
// const chrome = new ChromeOptions();
|
103
|
+
// const safari = new SafariOptions();
|
104
|
+
// const firefox = new FirefoxOptions();
|
105
|
+
// edge.enableBidi();
|
106
|
+
// chrome.enableBidi();
|
107
|
+
// firefox.enableBidi();
|
108
|
+
const driver = await new selenium_webdriver_1.Builder()
|
109
|
+
// .setIeOptions(ie)
|
110
|
+
// .setEdgeOptions(edge)
|
111
|
+
// .setChromeOptions(chrome)
|
112
|
+
// .setSafariOptions(safari)
|
113
|
+
// .setFirefoxOptions(firefox)
|
114
|
+
.usingServer(gridUrl)
|
115
|
+
.withCapabilities(capabilities)
|
116
|
+
.setLoggingPrefs(prefs) // NOTE: Should go last
|
117
|
+
.build();
|
118
|
+
// const id = await driver.getWindowHandle();
|
119
|
+
// context = await BrowsingContext(driver, { browsingContextId: id });
|
120
|
+
if (retry != retries) {
|
121
|
+
void driver.quit();
|
122
|
+
return null;
|
123
|
+
}
|
124
|
+
return driver;
|
125
|
+
})(),
|
126
|
+
]);
|
127
|
+
if (webdriver)
|
128
|
+
break;
|
129
|
+
} while (retries < maxRetries);
|
130
|
+
if (!webdriver)
|
131
|
+
throw new Error('Failed to initialize session to Selenium Grid due to many retries');
|
102
132
|
}
|
103
133
|
catch (error) {
|
104
|
-
logger_js_1.logger.error(`
|
134
|
+
(0, logger_js_1.logger)().error(`Failed to start browser:`, error);
|
105
135
|
return null;
|
106
136
|
}
|
107
|
-
return
|
137
|
+
return webdriver;
|
108
138
|
}
|
109
139
|
class InternalBrowser {
|
110
140
|
#isShuttingDown = false;
|
111
141
|
#browser;
|
112
142
|
#serverHost = null;
|
113
143
|
#serverPort;
|
114
|
-
#
|
144
|
+
#storybookGlobals;
|
115
145
|
#unsubscribe = types_js_1.noop;
|
116
146
|
#keepAliveInterval = null;
|
117
|
-
constructor(browser, port,
|
147
|
+
constructor(browser, port, storybookGlobals) {
|
118
148
|
this.#browser = browser;
|
119
149
|
this.#serverPort = port;
|
120
|
-
this.#
|
150
|
+
this.#storybookGlobals = storybookGlobals;
|
121
151
|
this.#unsubscribe = (0, messages_js_1.subscribeOn)('shutdown', () => {
|
122
152
|
void this.closeBrowser();
|
123
153
|
});
|
@@ -142,23 +172,23 @@ class InternalBrowser {
|
|
142
172
|
async takeScreenshot(captureElement, ignoreElements) {
|
143
173
|
let screenshot;
|
144
174
|
const ignoreStyles = await this.insertIgnoreStyles(ignoreElements);
|
145
|
-
if (
|
175
|
+
if ((0, logger_js_1.logger)().getLevel() <= loglevel_1.default.levels.DEBUG) {
|
146
176
|
const { innerWidth, innerHeight } = await this.#browser.executeScript(function () {
|
147
177
|
return {
|
148
178
|
innerWidth: window.innerWidth,
|
149
179
|
innerHeight: window.innerHeight,
|
150
180
|
};
|
151
181
|
});
|
152
|
-
|
182
|
+
(0, logger_js_1.logger)().debug(`Viewport size is: ${innerWidth}x${innerHeight}`);
|
153
183
|
}
|
154
184
|
try {
|
155
185
|
if (!captureElement) {
|
156
|
-
|
186
|
+
(0, logger_js_1.logger)().debug('Capturing viewport screenshot');
|
157
187
|
screenshot = await this.#browser.takeScreenshot();
|
158
|
-
|
188
|
+
(0, logger_js_1.logger)().debug('Viewport screenshot is captured');
|
159
189
|
}
|
160
190
|
else {
|
161
|
-
|
191
|
+
(0, logger_js_1.logger)().debug(`Checking is element ${chalk_1.default.cyan(captureElement)} fit into viewport`);
|
162
192
|
const rects = await this.#browser.executeScript(function (selector) {
|
163
193
|
window.scrollTo(0, 0); // TODO Maybe we should remove same code from `resetMousePosition`
|
164
194
|
// eslint-disable-next-line no-var
|
@@ -191,10 +221,10 @@ class InternalBrowser {
|
|
191
221
|
const isFitIntoViewport = elementRect.width + elementRect.left <= windowRect.width &&
|
192
222
|
elementRect.height + elementRect.top <= windowRect.height;
|
193
223
|
if (isFitIntoViewport) {
|
194
|
-
|
224
|
+
(0, logger_js_1.logger)().debug(`Capturing ${chalk_1.default.cyan(captureElement)} with size: ${elementRect.width}x${elementRect.height}`);
|
195
225
|
}
|
196
226
|
else
|
197
|
-
|
227
|
+
(0, logger_js_1.logger)().debug(`Capturing composite screenshot image of ${chalk_1.default.cyan(captureElement)} with size: ${elementRect.width}x${elementRect.height}`);
|
198
228
|
// const element = await browser.findElement(By.css(captureElement));
|
199
229
|
// screenshot = isFitIntoViewport
|
200
230
|
// ? context
|
@@ -206,7 +236,7 @@ class InternalBrowser {
|
|
206
236
|
? await this.#browser.findElement(selenium_webdriver_1.By.css(captureElement)).takeScreenshot()
|
207
237
|
: // TODO pointer-events: none, need to research
|
208
238
|
await this.takeCompositeScreenshot(windowRect, elementRect);
|
209
|
-
|
239
|
+
(0, logger_js_1.logger)().debug(`${chalk_1.default.cyan(captureElement)} is captured`);
|
210
240
|
}
|
211
241
|
}
|
212
242
|
finally {
|
@@ -223,9 +253,10 @@ class InternalBrowser {
|
|
223
253
|
}
|
224
254
|
async selectStory(id, waitForReady = false) {
|
225
255
|
// NOTE: Global variables might be reset after hot reload. I think it's workaround, maybe we need better solution
|
256
|
+
await this.updateStorybookGlobals();
|
226
257
|
await this.updateBrowserGlobalVariables();
|
227
258
|
await this.resetMousePosition();
|
228
|
-
|
259
|
+
(0, logger_js_1.logger)().debug(`Triggering 'SetCurrentStory' event with storyId ${chalk_1.default.magenta(id)}`);
|
229
260
|
const result = await this.#browser.executeAsyncScript(function (storyId, shouldWaitForReady, callback) {
|
230
261
|
if (typeof window.__CREEVEY_SELECT_STORY__ == 'undefined') {
|
231
262
|
callback([
|
@@ -247,7 +278,7 @@ class InternalBrowser {
|
|
247
278
|
storyId,
|
248
279
|
updatedArgs,
|
249
280
|
});
|
250
|
-
}, story.id, updatedArgs,
|
281
|
+
}, story.id, updatedArgs, types_js_1.StorybookEvents.UPDATE_STORY_ARGS, types_js_1.StorybookEvents.STORY_RENDERED);
|
251
282
|
}
|
252
283
|
async loadStoriesFromBrowser() {
|
253
284
|
const stories = await this.#browser.executeAsyncScript(function (callback) {
|
@@ -258,14 +289,14 @@ class InternalBrowser {
|
|
258
289
|
return stories;
|
259
290
|
}
|
260
291
|
async afterTest(test) {
|
261
|
-
if (
|
292
|
+
if ((0, logger_js_1.logger)().getLevel() === loglevel_1.default.levels.TRACE) {
|
262
293
|
const output = [];
|
263
294
|
const types = await this.#browser.manage().logs().getAvailableLogTypes();
|
264
295
|
for (const type of types) {
|
265
296
|
const logs = await this.#browser.manage().logs().get(type);
|
266
297
|
output.push(logs.map((log) => JSON.stringify(log.toJSON(), null, 2)).join('\n'));
|
267
298
|
}
|
268
|
-
|
299
|
+
(0, logger_js_1.logger)().debug('----------', (0, utils_js_1.getTestPath)(test).join('/'), '----------\n', output.join('\n'), '\n----------------------------------------------------------------------------------------------------');
|
269
300
|
}
|
270
301
|
}
|
271
302
|
static async getBrowser(browserName, gridUrl, config, options) {
|
@@ -275,7 +306,7 @@ class InternalBrowser {
|
|
275
306
|
const browser = await buildWebdriver(browserName, gridUrl, config, options);
|
276
307
|
if (!browser)
|
277
308
|
return null;
|
278
|
-
const internalBrowser = new InternalBrowser(browser, options.port,
|
309
|
+
const internalBrowser = new InternalBrowser(browser, options.port, _storybookGlobals);
|
279
310
|
try {
|
280
311
|
if (utils_js_1.isShuttingDown.current)
|
281
312
|
return null;
|
@@ -284,22 +315,21 @@ class InternalBrowser {
|
|
284
315
|
gridUrl,
|
285
316
|
viewport,
|
286
317
|
storybookUrl: address,
|
287
|
-
storybookGlobals: _storybookGlobals,
|
288
318
|
resolveStorybookUrl: config.resolveStorybookUrl,
|
289
319
|
});
|
290
320
|
return done ? internalBrowser : null;
|
291
321
|
}
|
292
322
|
catch (originalError) {
|
293
323
|
void internalBrowser.closeBrowser();
|
294
|
-
const message = originalError instanceof Error ? originalError.message : originalError;
|
295
|
-
const error = new Error(`Can't load storybook root page
|
324
|
+
const message = originalError instanceof Error ? originalError.message : (originalError ?? 'Unknown error');
|
325
|
+
const error = new Error(`Can't load storybook root page: ${message}`);
|
296
326
|
if (originalError instanceof Error)
|
297
327
|
error.stack = originalError.stack;
|
298
|
-
logger_js_1.logger.error(error);
|
328
|
+
(0, logger_js_1.logger)().error(error);
|
299
329
|
return null;
|
300
330
|
}
|
301
331
|
}
|
302
|
-
async init({ browserName, gridUrl, viewport, storybookUrl,
|
332
|
+
async init({ browserName, gridUrl, viewport, storybookUrl, resolveStorybookUrl, }) {
|
303
333
|
const sessionId = (await this.#browser.getSession()).getId();
|
304
334
|
let browserHost = '';
|
305
335
|
try {
|
@@ -310,19 +340,18 @@ class InternalBrowser {
|
|
310
340
|
catch {
|
311
341
|
/* noop */
|
312
342
|
}
|
313
|
-
|
314
|
-
loglevel_plugin_prefix_1.default.apply(this.#logger, {
|
343
|
+
loglevel_plugin_prefix_1.default.apply((0, logger_js_1.logger)(), {
|
315
344
|
format(level) {
|
316
345
|
const levelColor = logger_js_1.colors[level.toUpperCase()];
|
317
|
-
return `[${browserName}:${chalk_1.default.gray(
|
346
|
+
return `[${browserName}:${chalk_1.default.gray(process.pid)}] ${levelColor(level)} => ${chalk_1.default.gray(sessionId)}`;
|
318
347
|
},
|
319
348
|
});
|
320
|
-
|
349
|
+
(0, logger_js_1.logger)().debug(`Connected successful with ${chalk_1.default.green(browserHost)}`);
|
321
350
|
return await (0, utils_js_1.runSequence)([
|
322
|
-
() => this.#browser.manage().setTimeouts({ pageLoad:
|
351
|
+
() => this.#browser.manage().setTimeouts({ pageLoad: 60000, script: 60000 }),
|
323
352
|
() => this.openStorybookPage(storybookUrl, resolveStorybookUrl),
|
324
353
|
() => this.waitForStorybook(),
|
325
|
-
() => this.updateStorybookGlobals(
|
354
|
+
() => this.updateStorybookGlobals(),
|
326
355
|
() => this.resolveCreeveyHost(),
|
327
356
|
() => this.updateBrowserGlobalVariables(),
|
328
357
|
// NOTE: Selenium draws automation toolbar with some delay after webdriver initialization
|
@@ -340,27 +369,28 @@ class InternalBrowser {
|
|
340
369
|
}
|
341
370
|
try {
|
342
371
|
if (resolver) {
|
343
|
-
|
372
|
+
(0, logger_js_1.logger)().debug('Resolving storybook url with custom resolver');
|
344
373
|
const resolvedUrl = await resolver();
|
345
|
-
|
374
|
+
(0, logger_js_1.logger)().debug(`Resolver storybook url ${resolvedUrl}`);
|
346
375
|
await this.#browser.get((0, webdriver_js_1.appendIframePath)(resolvedUrl));
|
347
376
|
}
|
348
377
|
else {
|
378
|
+
// TODO Pageload timeout 10s
|
349
379
|
// NOTE: getUrlChecker already calls `browser.get` so we don't need another one
|
350
|
-
await (0, webdriver_js_1.resolveStorybookUrl)((0, webdriver_js_1.appendIframePath)(storybookUrl), (url) => this.checkUrl(url)
|
380
|
+
await (0, webdriver_js_1.resolveStorybookUrl)((0, webdriver_js_1.appendIframePath)(storybookUrl), (url) => this.checkUrl(url));
|
351
381
|
}
|
352
382
|
}
|
353
383
|
catch (error) {
|
354
|
-
|
384
|
+
(0, logger_js_1.logger)().error('Failed to resolve storybook URL', error instanceof Error ? error.message : '');
|
355
385
|
throw error;
|
356
386
|
}
|
357
387
|
}
|
358
388
|
async checkUrl(url) {
|
359
389
|
try {
|
360
390
|
// NOTE: Before trying a new url, reset the current one
|
361
|
-
|
391
|
+
(0, logger_js_1.logger)().debug(`Opening ${chalk_1.default.magenta('about:blank')} page`);
|
362
392
|
await openUrlAndWaitForPageSource(this.#browser, 'about:blank', (source) => !source.includes('<body></body>'));
|
363
|
-
|
393
|
+
(0, logger_js_1.logger)().debug(`Opening ${chalk_1.default.magenta(url)} and checking the page source`);
|
364
394
|
const source = await openUrlAndWaitForPageSource(this.#browser, url,
|
365
395
|
// NOTE: IE11 can return only `head` without body
|
366
396
|
(source) => source.length == 0 || !/<body([^>]*>).+<\/body>/s.test(source));
|
@@ -369,7 +399,7 @@ class InternalBrowser {
|
|
369
399
|
// because other add significant delay and some of them don't work in earlier chrome versions
|
370
400
|
// Browsers always load page successful even it's failed
|
371
401
|
// So we just check `root` element
|
372
|
-
|
402
|
+
(0, logger_js_1.logger)().debug(`Checking ${chalk_1.default.cyan(`#${webdriver_js_1.storybookRootID}`)} existence on ${chalk_1.default.magenta(url)}`);
|
373
403
|
return source.includes(`id="${webdriver_js_1.storybookRootID}"`);
|
374
404
|
}
|
375
405
|
catch {
|
@@ -377,7 +407,7 @@ class InternalBrowser {
|
|
377
407
|
}
|
378
408
|
}
|
379
409
|
async waitForStorybook() {
|
380
|
-
|
410
|
+
(0, logger_js_1.logger)().debug('Waiting for `setStories` event to make sure that storybook is initiated');
|
381
411
|
const isTimeout = await Promise.race([
|
382
412
|
new Promise((resolve) => {
|
383
413
|
setTimeout(() => {
|
@@ -387,22 +417,17 @@ class InternalBrowser {
|
|
387
417
|
(async () => {
|
388
418
|
let wait = true;
|
389
419
|
do {
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
}, core_events_1.SET_GLOBALS);
|
402
|
-
}
|
403
|
-
catch (e) {
|
404
|
-
this.#logger.debug('An error has been caught during the script:', e);
|
405
|
-
}
|
420
|
+
// TODO Research a different way to ensure storybook is initiated
|
421
|
+
wait = await this.#browser.executeScript(function (SET_GLOBALS) {
|
422
|
+
// TODO Maybe use
|
423
|
+
// import { global } from '@storybook/global';
|
424
|
+
// global.IS_STORYBOOK
|
425
|
+
if (typeof window.__STORYBOOK_ADDONS_CHANNEL__ == 'undefined')
|
426
|
+
return true;
|
427
|
+
if (window.__STORYBOOK_ADDONS_CHANNEL__.last(SET_GLOBALS) == undefined)
|
428
|
+
return true;
|
429
|
+
return false;
|
430
|
+
}, types_js_1.StorybookEvents.SET_GLOBALS);
|
406
431
|
} while (wait);
|
407
432
|
return false;
|
408
433
|
})(),
|
@@ -411,13 +436,13 @@ class InternalBrowser {
|
|
411
436
|
if (isTimeout)
|
412
437
|
throw new Error('Failed to wait `setStories` event');
|
413
438
|
}
|
414
|
-
async updateStorybookGlobals(
|
415
|
-
if (!
|
439
|
+
async updateStorybookGlobals() {
|
440
|
+
if (!this.#storybookGlobals)
|
416
441
|
return;
|
417
|
-
|
442
|
+
(0, logger_js_1.logger)().debug('Applying storybook globals');
|
418
443
|
await this.#browser.executeScript(function (globals) {
|
419
444
|
window.__CREEVEY_UPDATE_GLOBALS__(globals);
|
420
|
-
},
|
445
|
+
}, this.#storybookGlobals);
|
421
446
|
}
|
422
447
|
async resolveCreeveyHost() {
|
423
448
|
const addresses = (0, webdriver_js_1.getAddresses)();
|
@@ -464,7 +489,7 @@ class InternalBrowser {
|
|
464
489
|
innerHeight: window.innerHeight,
|
465
490
|
};
|
466
491
|
});
|
467
|
-
|
492
|
+
(0, logger_js_1.logger)().debug(`Resizing viewport from ${innerWidth}x${innerHeight} to ${viewport.width}x${viewport.height}`);
|
468
493
|
const dWidth = windowRect.width - innerWidth;
|
469
494
|
const dHeight = windowRect.height - innerHeight;
|
470
495
|
await this.#browser
|
@@ -476,7 +501,7 @@ class InternalBrowser {
|
|
476
501
|
});
|
477
502
|
}
|
478
503
|
async resetMousePosition() {
|
479
|
-
|
504
|
+
(0, logger_js_1.logger)().debug('Resetting mouse position to the top-left corner');
|
480
505
|
const browserName = (await this.#browser.getCapabilities()).getBrowserName();
|
481
506
|
const [browserVersion] = (await this.#browser.getCapabilities()).getBrowserVersion()?.split('.') ??
|
482
507
|
(await this.#browser.getCapabilities()).get('version')?.split('.') ??
|
@@ -502,8 +527,9 @@ class InternalBrowser {
|
|
502
527
|
})
|
503
528
|
.perform();
|
504
529
|
}
|
505
|
-
else if (browserName == 'firefox'
|
530
|
+
else if (browserName == 'firefox') {
|
506
531
|
// NOTE Firefox for some reason moving by 0 x 0 move cursor in bottom left corner :sad:
|
532
|
+
// NOTE In recent versions (eg 128.0) moving by 0 x 0 doesn't work at all
|
507
533
|
await this.#browser.actions().move({ origin: selenium_webdriver_1.Origin.VIEWPORT, x: 0, y: 1 }).perform();
|
508
534
|
}
|
509
535
|
else {
|
@@ -515,7 +541,7 @@ class InternalBrowser {
|
|
515
541
|
const ignoreSelectors = Array.prototype.concat(ignoreElements).filter(Boolean);
|
516
542
|
if (!ignoreSelectors.length)
|
517
543
|
return null;
|
518
|
-
|
544
|
+
(0, logger_js_1.logger)().debug('Hiding ignored elements before capturing');
|
519
545
|
return await this.#browser.executeScript(function (ignoreSelectors) {
|
520
546
|
return window.__CREEVEY_INSERT_IGNORE_STYLES__(ignoreSelectors);
|
521
547
|
}, ignoreSelectors);
|
@@ -576,7 +602,7 @@ class InternalBrowser {
|
|
576
602
|
}
|
577
603
|
async removeIgnoreStyles(ignoreStyles) {
|
578
604
|
if (ignoreStyles) {
|
579
|
-
|
605
|
+
(0, logger_js_1.logger)().debug('Revert hiding ignored elements');
|
580
606
|
await this.#browser.executeScript(function (ignoreStyles) {
|
581
607
|
window.__CREEVEY_REMOVE_IGNORE_STYLES__(ignoreStyles);
|
582
608
|
}, ignoreStyles);
|
@@ -608,7 +634,7 @@ class InternalBrowser {
|
|
608
634
|
this.#keepAliveInterval = setInterval(() => {
|
609
635
|
// NOTE Simple way to keep session alive
|
610
636
|
void this.#browser.getCurrentUrl().then((url) => {
|
611
|
-
logger_js_1.logger.debug('current url', chalk_1.default.magenta(url));
|
637
|
+
(0, logger_js_1.logger)().debug('current url', chalk_1.default.magenta(url));
|
612
638
|
});
|
613
639
|
}, 10 * 1000);
|
614
640
|
}
|