@syngrisi/playwright-sdk 1.0.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.
Files changed (41) hide show
  1. package/.eslintrc.cjs +45 -0
  2. package/README.md +129 -0
  3. package/dist/PlaywrightDriver.d.ts +83 -0
  4. package/dist/PlaywrightDriver.d.ts.map +1 -0
  5. package/dist/PlaywrightDriver.js +166 -0
  6. package/dist/PlaywrightDriver.js.map +1 -0
  7. package/dist/PlaywrightEntities.d.ts +14 -0
  8. package/dist/PlaywrightEntities.d.ts.map +1 -0
  9. package/dist/PlaywrightEntities.js +16 -0
  10. package/dist/PlaywrightEntities.js.map +1 -0
  11. package/dist/lib/getDomDump.js +76 -0
  12. package/dist/lib/pwHelpers.d.ts +9 -0
  13. package/dist/lib/pwHelpers.d.ts.map +1 -0
  14. package/dist/lib/pwHelpers.js +30 -0
  15. package/dist/lib/pwHelpers.js.map +1 -0
  16. package/dist/lib/utils.d.ts +14 -0
  17. package/dist/lib/utils.d.ts.map +1 -0
  18. package/dist/lib/utils.js +50 -0
  19. package/dist/lib/utils.js.map +1 -0
  20. package/dist/schemas/Baseline.schema.d.ts +51 -0
  21. package/dist/schemas/Baseline.schema.d.ts.map +1 -0
  22. package/dist/schemas/Baseline.schema.js +23 -0
  23. package/dist/schemas/Baseline.schema.js.map +1 -0
  24. package/dist/schemas/Check.schema.d.ts +43 -0
  25. package/dist/schemas/Check.schema.d.ts.map +1 -0
  26. package/dist/schemas/Check.schema.js +20 -0
  27. package/dist/schemas/Check.schema.js.map +1 -0
  28. package/dist/schemas/SessionParams.schema.d.ts +43 -0
  29. package/dist/schemas/SessionParams.schema.d.ts.map +1 -0
  30. package/dist/schemas/SessionParams.schema.js +19 -0
  31. package/dist/schemas/SessionParams.schema.js.map +1 -0
  32. package/dist/schemas/paramsGuard.d.ts +3 -0
  33. package/dist/schemas/paramsGuard.d.ts.map +1 -0
  34. package/dist/schemas/paramsGuard.js +19 -0
  35. package/dist/schemas/paramsGuard.js.map +1 -0
  36. package/dist/types.js +2 -0
  37. package/package.json +59 -0
  38. package/tsconfig.json +95 -0
  39. package/tsconfig.tsbuildinfo +1 -0
  40. package/typedoc.config.cjs +6 -0
  41. package/types/index.d.ts +121 -0
package/.eslintrc.cjs ADDED
@@ -0,0 +1,45 @@
1
+ module.exports = {
2
+ root: true,
3
+ parser: '@typescript-eslint/parser',
4
+ plugins: ['@typescript-eslint', 'unicorn'],
5
+ extends: [
6
+ 'eslint:recommended',
7
+ 'plugin:import/errors',
8
+ 'plugin:import/warnings'
9
+ ],
10
+ env: {
11
+ node: true,
12
+ es6: true,
13
+ jest: true
14
+ },
15
+ parserOptions: {
16
+ ecmaVersion: 2019,
17
+ sourceType: 'module'
18
+ },
19
+ rules: {
20
+ semi: ['error', 'never'],
21
+ quotes: ['error', 'single'],
22
+ indent: [2, 4],
23
+
24
+ 'no-constant-condition': 0,
25
+ // see https://stackoverflow.com/questions/55280555/typescript-eslint-eslint-plugin-error-route-is-defined-but-never-used-no-un
26
+ 'no-unused-vars': 'off',
27
+ '@typescript-eslint/no-unused-vars': 'error',
28
+
29
+ 'import/no-unresolved': 0,
30
+ 'import/named': 2,
31
+ 'import/namespace': 2,
32
+ 'import/default': 2,
33
+ 'import/export': 2,
34
+
35
+ 'unicorn/prefer-node-protocol': ['error']
36
+ },
37
+ overrides: [
38
+ {
39
+ files: ['*.ts'],
40
+ rules: {
41
+ 'no-undef': 'off'
42
+ }
43
+ }
44
+ ]
45
+ }
package/README.md ADDED
@@ -0,0 +1,129 @@
1
+
2
+ # Syngrisi Playwright SDK
3
+
4
+ Syngrisi Playwright SDK, `@syngrisi/playwright-sdk` provides a simple and powerful way to integrate visual regression
5
+ testing into your Playwright tests. By using this SDK, you can send snapshots from your browser tests to the Syngrisi
6
+ server for comparison against baseline images, and easily manage visual testing sessions.
7
+
8
+ ## Features
9
+
10
+ - Start and stop test sessions seamlessly within your test flows.
11
+ - Perform visual checks with automatic baseline comparison.
12
+ - Fetch baseline and snapshot data programmatically.
13
+ - Easily extendable to fit any Playwright-based testing framework.
14
+
15
+ ## Installation
16
+
17
+ To install the Syngrisi Playwright SDK, run:
18
+
19
+ ```bash
20
+ npm install @syngrisi/playwright-sdk
21
+ ```
22
+
23
+ ## Base Workflow Overview
24
+
25
+ There is 3 basic step for particular test:
26
+
27
+ <p align="center">
28
+ <img src="./docs/flow.png" alt="workflow" width="40%">
29
+ </p>
30
+
31
+ ## Usage
32
+
33
+ The following is a standard workflow to use the SDK in your tests:
34
+
35
+ ### 1. Initialize the Driver
36
+
37
+ Before starting your test session, initialize the driver with the necessary configuration.
38
+
39
+ ```js
40
+ import { PlaywrightDriver } from '@syngrisi/playwright-sdk';
41
+
42
+ const config = {
43
+ apiKey: 'your-api-key',
44
+ serverUrl: 'your-singrisi-url'
45
+ };
46
+
47
+ const driver = new PlaywrightDriver(config);
48
+ ```
49
+
50
+ ### 2. Start a Test Session
51
+
52
+ Start a test session with the desired parameters.
53
+
54
+ ```js
55
+ const sessionParams = {
56
+ os: 'Windows',
57
+ viewport: '1920x1080',
58
+ browserName: 'chrome',
59
+ browserVersion: '89.0',
60
+ test: 'Homepage Test',
61
+ app: 'Your App',
62
+ run: 'Run 1',
63
+ branch: 'main',
64
+ runident: 'unique-run-identifier',
65
+ suite: 'My Test Suite',
66
+ tags: ['tag1', 'tag2']
67
+ };
68
+
69
+ await driver.startTestSession({ params: sessionParams });
70
+ ```
71
+
72
+ ### 3. Perform a visual Check
73
+
74
+ Perform a visual check by providing the check name, image buffer, and any additional parameters.
75
+
76
+ ```js
77
+ const fullPageSreenshot = await page.screenshot({fullPage: true});
78
+ const headerScreenshot = page.locator('#header').screenshot();
79
+ // first check
80
+ driver.check({
81
+ checkName: 'Main Page',
82
+ imageBuffer: fullPageSreenshot,
83
+ params: {
84
+ viewport: '1200x800',
85
+ browserName: 'chrome',
86
+ os: 'Windows',
87
+ app: 'MyProject',
88
+ branch: 'develop'
89
+ }
90
+ });
91
+
92
+ // second check
93
+ driver.check({
94
+ checkName: 'Header',
95
+ imageBuffer: headerScreenshot,
96
+ params: {/* other parameters */ }
97
+ });
98
+
99
+ await driver.check({ 'About Page', imageBuffer_02, params: {/* other parameters */ } });
100
+ ```
101
+
102
+ ### 4. Stop the Test Session
103
+
104
+ Once all checks are completed, stop the test session.
105
+
106
+ ```js
107
+ await driver.stopTestSession();
108
+ ```
109
+
110
+ ## Environment variables
111
+
112
+ Environment variables are used to modify the behavior of the Syngrisi Playwright SDK without code changes.
113
+
114
+ Example: To set the log level to debug, use the following command:
115
+
116
+ Windows: `set SYNGRISI_LOG_LEVEL=debug`
117
+ macOS/Linux: `export SYNGRISI_LOG_LEVEL=debug`
118
+
119
+ `SYNGRISI_LOG_LEVEL` - logging level (`"trace" | "debug" | "info" | "warn" | "error"`)
120
+
121
+ ## Documentation
122
+
123
+ For detailed information about all available methods, parameters, and configurations, please refer to
124
+ the [Syngrisi packages documentation](TODO ADD LINK TO ROOT docs folder published on github.io).
125
+
126
+ ## License
127
+
128
+ This project is licensed under the [MIT License](LICENSE.md).
129
+
@@ -0,0 +1,83 @@
1
+ /// <reference types="node" />
2
+ import { SyngrisiApi, SessionResponse, ErrorObject, SnapshotResponse, Snapshot } from '@syngrisi/core-api';
3
+ import { Browser, Page } from '@playwright/test';
4
+ import { ViewportSize } from 'playwright-core';
5
+ import { BaselineParams } from './schemas/Baseline.schema';
6
+ import { BrowserName, CheckParams, Config, Params } from '../types';
7
+ import { SessionParams } from './schemas/SessionParams.schema';
8
+ export declare class PlaywrightDriver {
9
+ api: SyngrisiApi;
10
+ page: Page;
11
+ browser: Browser;
12
+ browserName: BrowserName;
13
+ viewport: ViewportSize;
14
+ params: Params;
15
+ constructor({ page, url, apiKey }: Config);
16
+ startTestSession({ params, suppressErrors }: {
17
+ params: SessionParams;
18
+ suppressErrors?: boolean;
19
+ }): Promise<SessionResponse | ErrorObject>;
20
+ stopTestSession({ suppressErrors }?: {
21
+ suppressErrors?: boolean;
22
+ }): Promise<Test>;
23
+ getBaselines({ params }: {
24
+ params: BaselineParams;
25
+ }): Promise<ErrorObject | {
26
+ results: {
27
+ [x: string]: any;
28
+ }[];
29
+ page: number;
30
+ limit: number;
31
+ totalPages: number;
32
+ totalResults: number;
33
+ timestamp: bigint;
34
+ }>;
35
+ getSnapshots({ params }: {
36
+ params: Snapshot;
37
+ }): Promise<SnapshotResponse | ErrorObject>;
38
+ check({ checkName, imageBuffer, params, domDump, suppressErrors }: {
39
+ checkName: string;
40
+ imageBuffer: Buffer;
41
+ params: CheckParams;
42
+ domDump?: any;
43
+ suppressErrors?: boolean;
44
+ }): Promise<ErrorObject | {
45
+ _id: string;
46
+ name: string;
47
+ createdDate: string;
48
+ status: (string | string[]) & (string | string[] | undefined);
49
+ viewport: string;
50
+ browserName: string;
51
+ os: string;
52
+ app: string;
53
+ branch: string;
54
+ test: string;
55
+ suite: string;
56
+ baselineId: string;
57
+ actualSnapshotId: string;
58
+ updatedDate: string;
59
+ browserVersion: string | number;
60
+ browserFullVersion: string;
61
+ result: string;
62
+ run: string;
63
+ creatorId: string;
64
+ creatorUsername: string;
65
+ failReasons: any[];
66
+ currentSnapshot: {
67
+ _id?: string | undefined;
68
+ name?: string | undefined;
69
+ filename?: string | undefined;
70
+ imghash?: string | undefined;
71
+ createdDate?: Date | undefined;
72
+ };
73
+ expectedSnapshot: {
74
+ _id?: string | undefined;
75
+ name?: string | undefined;
76
+ filename?: string | undefined;
77
+ imghash?: string | undefined;
78
+ createdDate?: Date | undefined;
79
+ };
80
+ lastSuccess: string;
81
+ }>;
82
+ }
83
+ //# sourceMappingURL=PlaywrightDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightDriver.d.ts","sourceRoot":"","sources":["../src/PlaywrightDriver.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC1G,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,OAAO,EACH,cAAc,EAEjB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACnE,OAAO,EAAE,aAAa,EAAuB,MAAM,gCAAgC,CAAA;AAanF,qBAAa,gBAAgB;IACzB,GAAG,EAAE,WAAW,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,QAAQ,EAAE,YAAY,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;gBAEF,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM;IAanC,gBAAgB,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE;QAC/C,MAAM,EAAE,aAAa,CAAC;QACtB,cAAc,CAAC,EAAE,OAAO,CAAA;KAC3B,GAAG,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC;IA4CpC,eAAe,CAAC,EAAE,cAAsB,EAAE,GAAE;QAC9C,cAAc,CAAC,EAAE,OAAO,CAAA;KACtB;IAkBA,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE;QAC3B,MAAM,EAAE,cAAc,CAAA;KACzB;;;;;;;;;;IAmBK,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE;QAC3B,MAAM,EAAE,QAAQ,CAAA;KACnB,GAAG,OAAO,CAAC,gBAAgB,GAAG,WAAW,CAAC;IAUrC,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAsB,EAAE,EAAE;QAC7E,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,WAAW,CAAC;QACpB,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,cAAc,CAAC,EAAE,OAAO,CAAA;KAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDJ"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PlaywrightDriver = void 0;
7
+ const hasha_1 = __importDefault(require("hasha"));
8
+ const core_api_1 = require("@syngrisi/core-api");
9
+ const Baseline_schema_1 = require("./schemas/Baseline.schema");
10
+ const Check_schema_1 = require("./schemas/Check.schema");
11
+ const SessionParams_schema_1 = require("./schemas/SessionParams.schema");
12
+ const pwHelpers_1 = require("./lib/pwHelpers");
13
+ const paramsGuard_1 = require("./schemas/paramsGuard");
14
+ const logger_1 = __importDefault(require("@wdio/logger"));
15
+ const PlaywrightEntities_1 = require("./PlaywrightEntities");
16
+ const log = (0, logger_1.default)('syngrisi-playwright-sdk');
17
+ // 0 | 4 | 2 | 1 | 3 | 5 | "trace" | "debug" | "info" | "warn" | "error" |
18
+ if (process.env.SYNGRISI_LOG_LEVEL) {
19
+ log.setLevel(process.env.SYNGRISI_LOG_LEVEL);
20
+ }
21
+ // noinspection JSUnusedGlobalSymbols
22
+ class PlaywrightDriver {
23
+ constructor({ page, url, apiKey }) {
24
+ const pw = new PlaywrightEntities_1.PlaywrightEntities(page);
25
+ this.page = pw.page;
26
+ this.browser = pw.browser;
27
+ this.browserName = pw.browserName;
28
+ this.viewport = pw.viewport;
29
+ this.api = new core_api_1.SyngrisiApi({ url, apiKey });
30
+ this.params = {
31
+ test: {}
32
+ };
33
+ }
34
+ async startTestSession({ params, suppressErrors }) {
35
+ try {
36
+ (0, paramsGuard_1.paramsGuard)(params, 'startTestSession, params', SessionParams_schema_1.SessionParamsSchema);
37
+ if (params.suite) {
38
+ this.params.suite = params.suite || 'Unknown';
39
+ }
40
+ this.params.test = {
41
+ os: params.os || await (0, pwHelpers_1.getOS)(this.page),
42
+ viewport: params.viewport || await (0, pwHelpers_1.getViewport)(this.viewport),
43
+ browser: params.browserName || await (0, pwHelpers_1.getBrowserName)(this.browserName),
44
+ browserVersion: params.browserVersion || (0, pwHelpers_1.getBrowserVersion)(this.browser.version()),
45
+ name: params.test,
46
+ app: params.app,
47
+ run: params.run,
48
+ branch: params.branch,
49
+ runident: params.runident,
50
+ suite: params.suite,
51
+ tags: params.tags,
52
+ browserFullVersion: params.browserFullVersion || (0, pwHelpers_1.getBrowserFullVersion)(this.browser.version())
53
+ };
54
+ // console.log('💥', this.params.test)
55
+ // @ts-ignore
56
+ const result = await this.api.startSession(this.params.test);
57
+ if (result.error && !suppressErrors) {
58
+ throw `❌ Start Test Session Error: ${JSON.stringify(result, null, ' ')}`;
59
+ }
60
+ if (!result) {
61
+ throw new Error(`response is empty, params: ${JSON.stringify(params, null, '\t')}`);
62
+ }
63
+ this.params.test.testId = result._id;
64
+ return result;
65
+ }
66
+ catch (e) {
67
+ const eMsg = `Cannot start session, error: '${e}' \n '${e.stack}'`;
68
+ log.error(eMsg);
69
+ throw new Error(eMsg);
70
+ }
71
+ }
72
+ async stopTestSession({ suppressErrors = false } = {}) {
73
+ try {
74
+ const testId = this.params.test.testId;
75
+ this.params.test.testId = undefined;
76
+ // @ts-ignore
77
+ const result = await this.api.stopSession(testId);
78
+ if (result.error && !suppressErrors) {
79
+ throw `❌ Start Test Session Error: ${JSON.stringify(result, null, ' ')}`;
80
+ }
81
+ log.debug(`Session with testId: '${result._id}' was stopped`);
82
+ return result;
83
+ }
84
+ catch (e) {
85
+ const eMsg = `Cannot stop session, error: '${e}' \n '${e.stack}'`;
86
+ log.error(eMsg);
87
+ throw e;
88
+ }
89
+ }
90
+ async getBaselines({ params }) {
91
+ let opts = {
92
+ name: params.name,
93
+ viewport: params.viewport || await (0, pwHelpers_1.getViewport)(this.viewport),
94
+ browserName: params.browserName || this.params.test.browser || (0, pwHelpers_1.getBrowserVersion)(this.browser.version()),
95
+ os: params.os || this.params.test.os || await (0, pwHelpers_1.getOS)(this.page),
96
+ app: params.app || this.params.test.app,
97
+ branch: params.branch || this.params.test.branch,
98
+ };
99
+ (0, paramsGuard_1.paramsGuard)(opts, 'getBaseline, opts', Baseline_schema_1.BaselineParamsSchema);
100
+ const result = await this.api.getBaselines(opts);
101
+ if (result.error) {
102
+ throw `❌ Get baselines error: ${JSON.stringify(result, null, ' ')}`;
103
+ }
104
+ return result;
105
+ }
106
+ async getSnapshots({ params }) {
107
+ const result = await this.api.getSnapshots(params);
108
+ if (result.error) {
109
+ throw `❌ Get snapshots error: ${JSON.stringify(result, null, ' ')}`;
110
+ }
111
+ return result;
112
+ }
113
+ async check({ checkName, imageBuffer, params, domDump, suppressErrors = false }) {
114
+ // console.log(params)
115
+ if (this.params.test.testId === undefined) {
116
+ throw new Error('The test id is empty, the session may not have started yet:'
117
+ + `check name: '${checkName}', driver: '${JSON.stringify(this, null, '\t')}'`);
118
+ }
119
+ if (!Buffer.isBuffer(imageBuffer))
120
+ throw new Error('check - wrong imageBuffer');
121
+ let opts = null;
122
+ const hash = (0, hasha_1.default)(imageBuffer);
123
+ try {
124
+ opts = {
125
+ // ident: ['name', 'viewport', 'browserName', 'os', 'app', 'branch'];
126
+ name: checkName,
127
+ // viewport: params?.viewport || await getViewport(this.viewport),
128
+ viewport: await (0, pwHelpers_1.getViewport)(this.viewport),
129
+ // @ts-ignore
130
+ browserName: this.params.test.browser,
131
+ // @ts-ignore
132
+ os: this.params.test.os,
133
+ // @ts-ignore
134
+ app: this.params.test.app,
135
+ // @ts-ignore
136
+ branch: this.params.test.branch,
137
+ // ['name', 'viewport', 'browserName', 'os', 'app', 'branch', 'testId', 'suite', 'browserVersion', 'browserFullVersion' ];
138
+ testId: this.params.test.testId,
139
+ // @ts-ignore
140
+ suite: this.params.test.suite,
141
+ // @ts-ignore
142
+ browserVersion: this.params.test.browserVersion,
143
+ // @ts-ignore
144
+ browserFullVersion: this.params.test.browserFullVersion,
145
+ hashCode: hash || '',
146
+ domDump: domDump,
147
+ };
148
+ (0, paramsGuard_1.paramsGuard)(opts, 'check, opts', Check_schema_1.CheckOptionsSchema);
149
+ Object.assign(
150
+ // @ts-ignore
151
+ opts, params);
152
+ // @ts-ignore
153
+ const result = await this.api.coreCheck(imageBuffer, opts);
154
+ if (result.error && !suppressErrors) {
155
+ throw `❌ Create Check error: ${JSON.stringify(result, null, ' ')}`;
156
+ }
157
+ return result;
158
+ }
159
+ catch (e) {
160
+ log.error(`cannot create check, params: '${JSON.stringify(params)}' opts: '${JSON.stringify(opts)}, error: '${e.stack || e.toString()}'`);
161
+ throw e;
162
+ }
163
+ }
164
+ }
165
+ exports.PlaywrightDriver = PlaywrightDriver;
166
+ //# sourceMappingURL=PlaywrightDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightDriver.js","sourceRoot":"","sources":["../src/PlaywrightDriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Browser, Page } from '@playwright/test';
2
+ import { BrowserName } from '../types';
3
+ import { ViewportSize } from 'playwright-core';
4
+ /**
5
+ * instances of the class contains playwright entities which need to perform checks
6
+ */
7
+ export declare class PlaywrightEntities {
8
+ page: Page;
9
+ browser: Browser;
10
+ browserName: BrowserName;
11
+ viewport: ViewportSize;
12
+ constructor(page: Page);
13
+ }
14
+ //# sourceMappingURL=PlaywrightEntities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightEntities.d.ts","sourceRoot":"","sources":["../src/PlaywrightEntities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C;;GAEG;AACH,qBAAa,kBAAkB;IAC3B,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,QAAQ,EAAE,YAAY,CAAA;gBAEV,IAAI,EAAE,IAAI;CAMzB"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaywrightEntities = void 0;
4
+ /**
5
+ * instances of the class contains playwright entities which need to perform checks
6
+ */
7
+ class PlaywrightEntities {
8
+ constructor(page) {
9
+ this.page = page;
10
+ this.browser = page.context().browser();
11
+ this.browserName = page.context()?.browser()?.browserType()?.name();
12
+ this.viewport = page.viewportSize();
13
+ }
14
+ }
15
+ exports.PlaywrightEntities = PlaywrightEntities;
16
+ //# sourceMappingURL=PlaywrightEntities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightEntities.js","sourceRoot":"","sources":["../src/PlaywrightEntities.ts"],"names":[],"mappings":";;;AAIA;;GAEG;AACH,MAAa,kBAAkB;IAM3B,YAAY,IAAU;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAG,CAAA;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAiB,CAAA;QAClF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAG,CAAA;IACxC,CAAC;CACJ;AAZD,gDAYC"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDomDump = void 0;
4
+ function isVisible(el) {
5
+ while (el) {
6
+ // @ts-ignore
7
+ if (el === document) {
8
+ return true;
9
+ }
10
+ const style = window.getComputedStyle(el, null);
11
+ if (!el || !style) {
12
+ return false;
13
+ }
14
+ if (style.display === 'none' || style.visibility === 'hidden' || +style.opacity === 0) {
15
+ return false;
16
+ }
17
+ if ((style.display === 'block' || style.display === 'inline-block') &&
18
+ style.height === '0px' && style.overflow === 'hidden') {
19
+ return false;
20
+ }
21
+ return style.position === 'fixed' || isVisible(el.parentNode);
22
+ }
23
+ return false;
24
+ }
25
+ function getDomPath(el) {
26
+ const stack = [];
27
+ while (el.parentNode !== null) {
28
+ let sibCount = 0;
29
+ let sibIndex = 0;
30
+ for (let i = 0; i < el.parentNode.childNodes.length; i++) {
31
+ const sib = el.parentNode.childNodes[i];
32
+ if (sib.nodeName === el.nodeName) {
33
+ if (sib === el) {
34
+ sibIndex = sibCount;
35
+ }
36
+ sibCount++;
37
+ }
38
+ }
39
+ if (el.hasAttribute('id') && el.id !== '') {
40
+ stack.unshift(`${el.nodeName.toLowerCase()}#${el.id}`);
41
+ }
42
+ else if (sibCount > 1) {
43
+ stack.unshift(`${el.nodeName.toLowerCase()}:eq(${sibIndex})`);
44
+ }
45
+ else {
46
+ stack.unshift(el.nodeName.toLowerCase());
47
+ }
48
+ el = el.parentNode;
49
+ }
50
+ return stack.slice(1);
51
+ }
52
+ function dumpElement(el) {
53
+ const rect = el.getBoundingClientRect();
54
+ return {
55
+ tag: el.tagName,
56
+ id: el.id,
57
+ top: rect.top,
58
+ right: rect.right,
59
+ bottom: rect.bottom,
60
+ left: rect.left,
61
+ width: rect.width,
62
+ height: rect.height,
63
+ domPath: getDomPath(el),
64
+ };
65
+ }
66
+ function getDomDump(done) {
67
+ const elements = Array.from(document.body.getElementsByTagName('*')).filter((x) => isVisible(x));
68
+ const dumpElements = [];
69
+ for (const el of elements) {
70
+ dumpElements.push(dumpElement(el));
71
+ }
72
+ const result = JSON.stringify(dumpElements, null, '\t');
73
+ done(result);
74
+ return result;
75
+ }
76
+ exports.getDomDump = getDomDump;
@@ -0,0 +1,9 @@
1
+ import { Page } from '@playwright/test';
2
+ import { BrowserName } from '../../types';
3
+ import { ViewportSize } from 'playwright-core';
4
+ export declare const getViewport: (viewport: ViewportSize) => Promise<string>;
5
+ export declare const getBrowserName: (browserName: BrowserName) => Promise<string>;
6
+ export declare const getOS: (page: Page) => Promise<string>;
7
+ export declare const getBrowserFullVersion: (fullVersion: string) => string;
8
+ export declare const getBrowserVersion: (fullVersion: string) => string;
9
+ //# sourceMappingURL=pwHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pwHelpers.d.ts","sourceRoot":"","sources":["../../src/lib/pwHelpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAI9C,eAAO,MAAM,WAAW,aAAoB,YAAY,KAAG,QAAQ,MAAM,CAExE,CAAA;AAED,eAAO,MAAM,cAAc,gBAAuB,WAAW,KAAG,QAAQ,MAAM,CAE7E,CAAA;AAED,eAAO,MAAM,KAAK,SAAgB,IAAI,KAAG,QAAQ,MAAM,CAQtD,CAAA;AAED,eAAO,MAAM,qBAAqB,gBAAiB,MAAM,WAAgB,CAAA;AAEzE,eAAO,MAAM,iBAAiB,gBAAiB,MAAM,WAEpD,CAAA"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBrowserVersion = exports.getBrowserFullVersion = exports.getOS = exports.getBrowserName = exports.getViewport = void 0;
4
+ const ua_parser_js_1 = require("ua-parser-js");
5
+ const utils_1 = require("./utils");
6
+ const core_api_1 = require("@syngrisi/core-api");
7
+ const getViewport = async (viewport) => {
8
+ return viewport ? `${viewport.width}x${viewport.height}` : '0x0';
9
+ };
10
+ exports.getViewport = getViewport;
11
+ const getBrowserName = async (browserName) => {
12
+ return browserName;
13
+ };
14
+ exports.getBrowserName = getBrowserName;
15
+ const getOS = async (page) => {
16
+ const osName = await (0, utils_1.waitUntil)(async () => {
17
+ const ua = await page.evaluate(() => navigator.userAgent);
18
+ const userAgentInfo = (0, ua_parser_js_1.UAParser)(ua);
19
+ return userAgentInfo.os.name || null;
20
+ });
21
+ return (0, core_api_1.transformOs)(osName || 'UNKNOWN');
22
+ };
23
+ exports.getOS = getOS;
24
+ const getBrowserFullVersion = (fullVersion) => fullVersion;
25
+ exports.getBrowserFullVersion = getBrowserFullVersion;
26
+ const getBrowserVersion = (fullVersion) => {
27
+ return fullVersion.split('.')[0];
28
+ };
29
+ exports.getBrowserVersion = getBrowserVersion;
30
+ //# sourceMappingURL=pwHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pwHelpers.js","sourceRoot":"","sources":["../../src/lib/pwHelpers.ts"],"names":[],"mappings":";;;AAAA,+CAAuC;AAEvC,mCAAmC;AAInC,iDAAgD;AAEzC,MAAM,WAAW,GAAG,KAAK,EAAE,QAAsB,EAAmB,EAAE;IACzE,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;AACpE,CAAC,CAAA;AAFY,QAAA,WAAW,eAEvB;AAEM,MAAM,cAAc,GAAG,KAAK,EAAE,WAAwB,EAAmB,EAAE;IAC9E,OAAO,WAAW,CAAA;AACtB,CAAC,CAAA;AAFY,QAAA,cAAc,kBAE1B;AAEM,MAAM,KAAK,GAAG,KAAK,EAAE,IAAU,EAAmB,EAAE;IACvD,MAAM,MAAM,GAAG,MAAM,IAAA,iBAAS,EAAC,KAAK,IAAI,EAAE;QACtC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACzD,MAAM,aAAa,GAAG,IAAA,uBAAQ,EAAC,EAAE,CAAC,CAAA;QAClC,OAAO,aAAa,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,OAAO,IAAA,sBAAW,EAAC,MAAM,IAAI,SAAS,CAAC,CAAA;AAC3C,CAAC,CAAA;AARY,QAAA,KAAK,SAQjB;AAEM,MAAM,qBAAqB,GAAG,CAAC,WAAmB,EAAE,EAAE,CAAC,WAAW,CAAA;AAA5D,QAAA,qBAAqB,yBAAuC;AAElE,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAE,EAAE;IACrD,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AACpC,CAAC,CAAA;AAFY,QAAA,iBAAiB,qBAE7B"}
@@ -0,0 +1,14 @@
1
+ import { TestInfo } from '@playwright/test';
2
+ export declare const log: import("loglevel").Logger;
3
+ interface WaitOptions {
4
+ attempts?: number;
5
+ interval?: number;
6
+ timeout?: number;
7
+ }
8
+ export declare const waitUntil: <T>(callback: (attempt?: number) => Promise<T>, options?: WaitOptions) => Promise<T | null>;
9
+ export declare const generateRunName: () => string;
10
+ export declare const generateRunIdent: () => string;
11
+ export declare const getSuiteTitle: (testInfo: TestInfo) => string | null;
12
+ export declare const getTestTitle: (testInfo: TestInfo) => string;
13
+ export {};
14
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,eAAO,MAAM,GAAG,2BAAoC,CAAA;AAEpD,UAAU,WAAW;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,2BACG,MAAM,2BAClB,WAAW,sBA8BvB,CAAA;AAED,eAAO,MAAM,eAAe,cACP,CAAA;AAErB,eAAO,MAAM,gBAAgB,cAA4B,CAAA;AAEzD,eAAO,MAAM,aAAa,aAAc,QAAQ,kBAM/C,CAAA;AAED,eAAO,MAAM,YAAY,aAAc,QAAQ,WAE9C,CAAA"}