@qavajs/playwright-runner-adapter 2.0.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -14,6 +14,13 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
14
14
 
15
15
  :microscope: - experimental
16
16
 
17
+ ## [2.2.0]
18
+ - :rocket: added `request` into default fixture import
19
+ - :beetle: fixed `attach` method type
20
+
21
+ ## [2.1.0]
22
+ - :rocket: made declaration of beforeAll/afterAll hooks optional to enable pure parallelism
23
+
17
24
  ## [2.0.1]
18
25
  - :beetle: removed stacktrace override to proper location calculation
19
26
 
@@ -7,7 +7,7 @@ export declare class TestWorld {
7
7
  attach: (data: any, details?: {
8
8
  fileName?: string;
9
9
  mediaType: string;
10
- }) => void;
10
+ }) => Promise<void>;
11
11
  parameters: string;
12
12
  config: any;
13
13
  supportCodeLibrary: any;
@@ -45,10 +45,11 @@ class PlaywrightWorld extends TestWorld {
45
45
  browser;
46
46
  browserName;
47
47
  request;
48
- init = ({ browser, context, page }) => {
48
+ init = ({ browser, context, page, request }) => {
49
49
  this.browser = browser;
50
50
  this.context = context;
51
51
  this.page = page;
52
+ this.request = request;
52
53
  };
53
54
  }
54
55
  exports.PlaywrightWorld = PlaywrightWorld;
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightWorld.js","sourceRoot":"","sources":["../src/PlaywrightWorld.ts"],"names":[],"mappings":";;;AAAA,2CAAkG;AAElG;;GAEG;AACH,MAAa,SAAS;IAClB,GAAG,CAAuB;IAC1B,MAAM,CAA2E;IACjF,UAAU,CAAU;IACpB,MAAM,CAAM;IACZ,kBAAkB,CAAO;IACzB,IAAI,GAAG,WAAI,CAAC;IACZ,MAAM,GAAG,aAAM,CAAC;IAEhB,YAAY,OAAY;QACpB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,WAAW,CAAY,IAAY,EAAE,UAAgB;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAClG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,qCAAqC,CAAC,CAAC;QAC1F,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAS,CAAC;QAChC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAS,CAAC,CAAC;QAClG,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;CACJ;AA5BD,8BA4BC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,SAAS;IAC1C,IAAI,CAAQ;IACZ,OAAO,CAAkB;IACzB,OAAO,CAAW;IAClB,WAAW,CAAU;IACrB,OAAO,CAAqB;IAE5B,IAAI,GAAiC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAA6D,EAAE,EAAE;QAC3H,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC,CAAA;CACJ;AAZD,0CAYC"}
1
+ {"version":3,"file":"PlaywrightWorld.js","sourceRoot":"","sources":["../src/PlaywrightWorld.ts"],"names":[],"mappings":";;;AAAA,2CAAkG;AAElG;;GAEG;AACH,MAAa,SAAS;IAClB,GAAG,CAAuB;IAC1B,MAAM,CAAoF;IAC1F,UAAU,CAAU;IACpB,MAAM,CAAM;IACZ,kBAAkB,CAAO;IACzB,IAAI,GAAG,WAAI,CAAC;IACZ,MAAM,GAAG,aAAM,CAAC;IAEhB,YAAY,OAAY;QACpB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,WAAW,CAAY,IAAY,EAAE,UAAgB;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAClG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,qCAAqC,CAAC,CAAC;QAC1F,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAS,CAAC;QAChC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAS,CAAC,CAAC;QAClG,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;CACJ;AA5BD,8BA4BC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,SAAS;IAC1C,IAAI,CAAQ;IACZ,OAAO,CAAkB;IACzB,OAAO,CAAW;IAClB,WAAW,CAAU;IACrB,OAAO,CAAqB;IAE5B,IAAI,GAAiC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAyF,EAAE,EAAE;QAChK,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC,CAAA;CACJ;AAbD,0CAaC"}
@@ -4,7 +4,7 @@ exports.defineConfig = defineConfig;
4
4
  const loader_1 = require("./loader");
5
5
  // Constants
6
6
  const ANNOTATION_TYPES = {
7
- TEST_ID: 'testId',
7
+ TEST_ID: '_testId',
8
8
  NAME: 'name',
9
9
  URI: 'uri',
10
10
  TAGS: 'tags'
@@ -80,7 +80,7 @@ function log(data) {
80
80
  function attach(body, details) {
81
81
  const fileName = details?.fileName ?? DEFAULT_VALUES.ATTACHMENT_FILENAME;
82
82
  const contentType = details?.mediaType ?? DEFAULT_VALUES.CONTENT_TYPE;
83
- this.test.info().attach(fileName, { body, contentType });
83
+ return this.test.info().attach(fileName, { body, contentType });
84
84
  }
85
85
  /**
86
86
  * Generates a human-readable step name with argument type indicator
@@ -97,20 +97,28 @@ function stepName(pickleStep) {
97
97
  /**
98
98
  * Executes before all hooks
99
99
  */
100
- async function executeBeforeAllHooks(test, hooks) {
101
- for (const hook of hooks) {
102
- const location = getLine(hook);
103
- await test.step(HOOK_NAMES.BEFORE_ALL, () => hook.code.apply({}), location);
104
- }
100
+ function executeBeforeAllHooks(test, hooks) {
101
+ if (hooks.length === 0)
102
+ return;
103
+ test.beforeAll(async () => {
104
+ for (const hook of hooks) {
105
+ const location = getLine(hook);
106
+ await test.step(HOOK_NAMES.BEFORE_ALL, () => hook.code.apply({}), location);
107
+ }
108
+ });
105
109
  }
106
110
  /**
107
111
  * Executes after all hooks
108
112
  */
109
- async function executeAfterAllHooks(test, hooks) {
110
- for (const hook of hooks) {
111
- const location = getLine(hook);
112
- await test.step(HOOK_NAMES.AFTER_ALL, () => hook.code.apply({}), location);
113
- }
113
+ function executeAfterAllHooks(test, hooks) {
114
+ if (hooks.length === 0)
115
+ return;
116
+ test.afterAll(async () => {
117
+ for (const hook of hooks) {
118
+ const location = getLine(hook);
119
+ await test.step(HOOK_NAMES.AFTER_ALL, () => hook.code.apply({}), location);
120
+ }
121
+ });
114
122
  }
115
123
  /**
116
124
  * Creates test annotations from test case data
@@ -120,8 +128,8 @@ function createTestAnnotations(testCase) {
120
128
  return [
121
129
  { type: ANNOTATION_TYPES.NAME, description: testCase.name },
122
130
  { type: ANNOTATION_TYPES.URI, description: testCase.uri },
123
- { type: ANNOTATION_TYPES.TEST_ID, description: testCase.id },
124
- { type: ANNOTATION_TYPES.TAGS, description: JSON.stringify(tags) }
131
+ { type: ANNOTATION_TYPES.TAGS, description: JSON.stringify(tags) },
132
+ { type: ANNOTATION_TYPES.TEST_ID, description: testCase.id }
125
133
  ];
126
134
  }
127
135
  /**
@@ -131,9 +139,7 @@ function defineConfig(config) {
131
139
  const { features, supportCodeLibrary } = (0, loader_1.load)(config);
132
140
  const fixture = new supportCodeLibrary.World({ config });
133
141
  const test = fixture.test;
134
- test.beforeAll(async () => {
135
- await executeBeforeAllHooks(test, supportCodeLibrary.beforeTestRunHookDefinitions);
136
- });
142
+ executeBeforeAllHooks(test, supportCodeLibrary.beforeTestRunHookDefinitions);
137
143
  const worlds = new Map();
138
144
  for (const feature of features) {
139
145
  const tests = feature.tests;
@@ -268,8 +274,6 @@ function defineConfig(config) {
268
274
  });
269
275
  });
270
276
  }
271
- test.afterAll(async () => {
272
- await executeAfterAllHooks(test, supportCodeLibrary.afterTestRunHookDefinitions);
273
- });
277
+ executeAfterAllHooks(test, supportCodeLibrary.afterTestRunHookDefinitions);
274
278
  }
275
279
  //# sourceMappingURL=cucumberAdapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cucumberAdapter.js","sourceRoot":"","sources":["../src/cucumberAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cucumberAdapter.js","sourceRoot":"","sources":["../src/cucumberAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { APIRequestContext, Browser, BrowserContext, Page } from '@playwright/test';
2
+ /**
3
+ * Cucumber world for playwright adapter
4
+ */
5
+ export declare class TestWorld {
6
+ log: (data: any) => void;
7
+ attach: (data: any, details?: {
8
+ fileName?: string;
9
+ mediaType: string;
10
+ }) => Promise<void>;
11
+ parameters: string;
12
+ config: any;
13
+ supportCodeLibrary: any;
14
+ test: import("@playwright/test").TestType<import("@playwright/test").PlaywrightTestArgs & import("@playwright/test").PlaywrightTestOptions, import("@playwright/test").PlaywrightWorkerArgs & import("@playwright/test").PlaywrightWorkerOptions>;
15
+ expect: import("@playwright/test").Expect<{}>;
16
+ constructor(options: any);
17
+ executeStep(this: any, text: string, extraParam?: any): Promise<void>;
18
+ }
19
+ /**
20
+ * Cucumber Playwright world for playwright adapter
21
+ */
22
+ export declare class PlaywrightWorld extends TestWorld {
23
+ page: Page;
24
+ context: BrowserContext;
25
+ browser: Browser;
26
+ browserName: string;
27
+ request: APIRequestContext;
28
+ init: ({
29
+ [fixture: string]: any;
30
+ });
31
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaywrightWorld = exports.TestWorld = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ /**
6
+ * Cucumber world for playwright adapter
7
+ */
8
+ class TestWorld {
9
+ log;
10
+ attach;
11
+ parameters;
12
+ config;
13
+ supportCodeLibrary;
14
+ test = test_1.test;
15
+ expect = test_1.expect;
16
+ constructor(options) {
17
+ this.log = options.log;
18
+ this.attach = options.attach;
19
+ this.parameters = options.parameters;
20
+ this.supportCodeLibrary = options.supportCodeLibrary;
21
+ }
22
+ async executeStep(text, extraParam) {
23
+ const steps = this.supportCodeLibrary.stepDefinitions.filter((s) => s.matchesStepName(text));
24
+ if (steps.length === 0)
25
+ throw new Error(`Step "${text}" is not defined`);
26
+ if (steps.length > 1)
27
+ throw new Error(`Step "${text}" matches multiple step definitions`);
28
+ const step = steps.pop();
29
+ const { parameters } = await step.getInvocationParameters({ step: { text }, world: this });
30
+ try {
31
+ await step.code.apply(this, [...parameters, extraParam]);
32
+ }
33
+ catch (err) {
34
+ throw new Error(`${text}\n${err}`);
35
+ }
36
+ }
37
+ }
38
+ exports.TestWorld = TestWorld;
39
+ /**
40
+ * Cucumber Playwright world for playwright adapter
41
+ */
42
+ class PlaywrightWorld extends TestWorld {
43
+ page;
44
+ context;
45
+ browser;
46
+ browserName;
47
+ request;
48
+ init = ({ browser, context, page, request }) => {
49
+ this.browser = browser;
50
+ this.context = context;
51
+ this.page = page;
52
+ this.request = request;
53
+ };
54
+ }
55
+ exports.PlaywrightWorld = PlaywrightWorld;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Define template step
3
+ * @param {string} scenario - multiline string with steps
4
+ * @example
5
+ * When('I click {string} and verify {string}', Template((locator, expected) => `
6
+ * I click '${locator}'
7
+ * I expect '${locator} > Value' to equal '${expected}'
8
+ * `));
9
+ */
10
+ export declare function Template(scenario: (...args: any[]) => string): (...args: string[]) => string;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Template = Template;
4
+ /**
5
+ * Define template step
6
+ * @param {string} scenario - multiline string with steps
7
+ * @example
8
+ * When('I click {string} and verify {string}', Template((locator, expected) => `
9
+ * I click '${locator}'
10
+ * I expect '${locator} > Value' to equal '${expected}'
11
+ * `));
12
+ */
13
+ function Template(scenario) {
14
+ return new Proxy(scenario, {
15
+ apply: async function (template, world, args) {
16
+ const scenario = template(...args);
17
+ const steps = scenario
18
+ .split('\n')
19
+ .map(step => step.trim())
20
+ .filter(Boolean);
21
+ for (const step of steps) {
22
+ await world.executeStep(step);
23
+ }
24
+ },
25
+ });
26
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Main configuration function that sets up Cucumber adapter for Playwright
3
+ */
4
+ export declare function defineConfig(config: any): any;
@@ -0,0 +1,278 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defineConfig = defineConfig;
4
+ const loader_1 = require("./loader");
5
+ // Constants
6
+ const ANNOTATION_TYPES = {
7
+ TEST_ID: '_testId',
8
+ NAME: 'name',
9
+ URI: 'uri',
10
+ TAGS: 'tags'
11
+ };
12
+ const HOOK_NAMES = {
13
+ BEFORE_ALL: 'Before All',
14
+ AFTER_ALL: 'After All',
15
+ BEFORE: 'Before',
16
+ AFTER: 'After',
17
+ BEFORE_STEP: 'Before Step',
18
+ AFTER_STEP: 'After Step',
19
+ WORLD: 'World',
20
+ BEFORE_HOOKS: 'Before Hooks',
21
+ AFTER_HOOKS: 'After Hooks'
22
+ };
23
+ const DEFAULT_VALUES = {
24
+ ATTACHMENT_FILENAME: 'attachment',
25
+ CONTENT_TYPE: 'text/plain',
26
+ COLUMN: 1,
27
+ TEST_CASE_ID: '0',
28
+ TEST_STEP_ID: '0'
29
+ };
30
+ const STEP_ARGUMENT_LABELS = {
31
+ DOC_STRING: ' [MultiLine]',
32
+ DATA_TABLE: ' [DataTable]'
33
+ };
34
+ /**
35
+ * Extracts the test ID from TestInfo annotations
36
+ */
37
+ function getTestId(testInfo) {
38
+ const annotation = testInfo.annotations
39
+ .find((annotation) => annotation.type === ANNOTATION_TYPES.TEST_ID);
40
+ if (!annotation?.description) {
41
+ throw new Error('Test ID annotation not found');
42
+ }
43
+ return annotation.description;
44
+ }
45
+ /**
46
+ * Converts TestInfo to HookResult format
47
+ */
48
+ function getResult(testInfo) {
49
+ const message = testInfo.errors.length > 0
50
+ ? testInfo.errors.map((err) => err.message).join('\n')
51
+ : undefined;
52
+ return {
53
+ duration: testInfo.duration,
54
+ message,
55
+ status: testInfo.status?.toUpperCase() ?? 'UNKNOWN',
56
+ exception: testInfo.error
57
+ };
58
+ }
59
+ /**
60
+ * Creates a location object from step definition
61
+ */
62
+ function getLine(step) {
63
+ return {
64
+ location: {
65
+ column: DEFAULT_VALUES.COLUMN,
66
+ file: step.uri,
67
+ line: step.line
68
+ }
69
+ };
70
+ }
71
+ /**
72
+ * Logs data to console
73
+ */
74
+ function log(data) {
75
+ console.log(data);
76
+ }
77
+ /**
78
+ * Attaches content to test report
79
+ */
80
+ function attach(body, details) {
81
+ const fileName = details?.fileName ?? DEFAULT_VALUES.ATTACHMENT_FILENAME;
82
+ const contentType = details?.mediaType ?? DEFAULT_VALUES.CONTENT_TYPE;
83
+ return this.test.info().attach(fileName, { body, contentType });
84
+ }
85
+ /**
86
+ * Generates a human-readable step name with argument type indicator
87
+ */
88
+ function stepName(pickleStep) {
89
+ let step = pickleStep.text;
90
+ if (pickleStep.argument) {
91
+ step += pickleStep.argument.docString
92
+ ? STEP_ARGUMENT_LABELS.DOC_STRING
93
+ : STEP_ARGUMENT_LABELS.DATA_TABLE;
94
+ }
95
+ return step;
96
+ }
97
+ /**
98
+ * Executes before all hooks
99
+ */
100
+ function executeBeforeAllHooks(test, hooks) {
101
+ if (hooks.length === 0)
102
+ return;
103
+ test.beforeAll(async () => {
104
+ for (const hook of hooks) {
105
+ const location = getLine(hook);
106
+ await test.step(HOOK_NAMES.BEFORE_ALL, () => hook.code.apply({}), location);
107
+ }
108
+ });
109
+ }
110
+ /**
111
+ * Executes after all hooks
112
+ */
113
+ function executeAfterAllHooks(test, hooks) {
114
+ if (hooks.length === 0)
115
+ return;
116
+ test.afterAll(async () => {
117
+ for (const hook of hooks) {
118
+ const location = getLine(hook);
119
+ await test.step(HOOK_NAMES.AFTER_ALL, () => hook.code.apply({}), location);
120
+ }
121
+ });
122
+ }
123
+ /**
124
+ * Creates test annotations from test case data
125
+ */
126
+ function createTestAnnotations(testCase) {
127
+ const tags = [...new Set(testCase.tags.map((tag) => tag.name))];
128
+ return [
129
+ { type: ANNOTATION_TYPES.NAME, description: testCase.name },
130
+ { type: ANNOTATION_TYPES.URI, description: testCase.uri },
131
+ { type: ANNOTATION_TYPES.TAGS, description: JSON.stringify(tags) },
132
+ { type: ANNOTATION_TYPES.TEST_ID, description: testCase.id }
133
+ ];
134
+ }
135
+ /**
136
+ * Main configuration function that sets up Cucumber adapter for Playwright
137
+ */
138
+ function defineConfig(config) {
139
+ const { features, supportCodeLibrary } = (0, loader_1.load)(config);
140
+ const fixture = new supportCodeLibrary.World({ config });
141
+ const test = fixture.test;
142
+ executeBeforeAllHooks(test, supportCodeLibrary.beforeTestRunHookDefinitions);
143
+ const worlds = new Map();
144
+ for (const feature of features) {
145
+ const tests = feature.tests;
146
+ test.describe(feature.feature, async () => {
147
+ /**
148
+ * Factory function to create and register world instances
149
+ */
150
+ const worldFactory = (fixtures) => {
151
+ const world = new supportCodeLibrary.World({
152
+ log,
153
+ attach,
154
+ supportCodeLibrary,
155
+ config
156
+ });
157
+ world.init(fixtures);
158
+ worlds.set(getTestId(test.info()), world);
159
+ };
160
+ worldFactory.toString = () => fixture.init.toString();
161
+ test.beforeEach(HOOK_NAMES.WORLD, worldFactory);
162
+ test.beforeEach(HOOK_NAMES.BEFORE_HOOKS, async () => {
163
+ const testId = getTestId(test.info());
164
+ const world = worlds.get(testId);
165
+ const testCase = tests.find((t) => t.id === testId);
166
+ if (!testCase) {
167
+ throw new Error(`Test case with ID ${testId} not found`);
168
+ }
169
+ for (const beforeHook of supportCodeLibrary.beforeTestCaseHookDefinitions) {
170
+ if (beforeHook.appliesToTestCase(testCase)) {
171
+ const hookName = beforeHook.name ?? HOOK_NAMES.BEFORE;
172
+ const location = getLine(beforeHook);
173
+ await test.step(hookName, () => beforeHook.code.apply(world, [{
174
+ gherkinDocument: feature.gherkinDocument,
175
+ pickle: testCase
176
+ }]), location);
177
+ }
178
+ }
179
+ });
180
+ for (const testCase of tests) {
181
+ const tag = [...new Set(testCase.tags.map((tag) => tag.name))];
182
+ const annotation = createTestAnnotations(testCase);
183
+ test(testCase.name, { tag, annotation }, async () => {
184
+ const world = worlds.get(testCase.id);
185
+ const result = { status: 'passed' };
186
+ for (const pickleStep of testCase.steps) {
187
+ if (result.status !== 'passed') {
188
+ break;
189
+ }
190
+ const matchingSteps = supportCodeLibrary.stepDefinitions
191
+ .filter((stepDef) => stepDef.matchesStepName(pickleStep.text));
192
+ if (matchingSteps.length === 0) {
193
+ throw new Error(`Step definition not found for: "${pickleStep.text}"`);
194
+ }
195
+ if (matchingSteps.length > 1) {
196
+ throw new Error(`Ambiguous step "${pickleStep.text}" matches ${matchingSteps.length} definitions`);
197
+ }
198
+ const [step] = matchingSteps;
199
+ const location = getLine(step);
200
+ await test.step(stepName(pickleStep), async () => {
201
+ for (const beforeStep of supportCodeLibrary.beforeTestStepHookDefinitions) {
202
+ if (beforeStep.appliesToTestCase(testCase)) {
203
+ const location = getLine(beforeStep);
204
+ await test.step(HOOK_NAMES.BEFORE_STEP, () => beforeStep.code.apply(world, [{
205
+ gherkinDocument: feature.gherkinDocument,
206
+ pickle: testCase,
207
+ pickleStep
208
+ }]), location);
209
+ }
210
+ }
211
+ const { parameters } = await step.getInvocationParameters({
212
+ step: {
213
+ text: pickleStep.text,
214
+ argument: pickleStep.argument
215
+ },
216
+ world
217
+ });
218
+ try {
219
+ await step.code.apply(world, parameters);
220
+ }
221
+ catch (err) {
222
+ result.status = 'failed';
223
+ result.error = err;
224
+ throw err;
225
+ }
226
+ finally {
227
+ for (const afterStep of supportCodeLibrary.afterTestStepHookDefinitions) {
228
+ if (afterStep.appliesToTestCase(testCase)) {
229
+ const location = getLine(afterStep);
230
+ await test.step(HOOK_NAMES.AFTER_STEP, () => afterStep.code.apply(world, [{
231
+ gherkinDocument: feature.gherkinDocument,
232
+ testCaseStartedId: DEFAULT_VALUES.TEST_CASE_ID,
233
+ testStepId: DEFAULT_VALUES.TEST_STEP_ID,
234
+ pickle: testCase,
235
+ pickleStep,
236
+ result: {
237
+ duration: 0,
238
+ message: result.error?.message,
239
+ status: result.status.toUpperCase(),
240
+ exception: result.error
241
+ }
242
+ }]), location);
243
+ }
244
+ }
245
+ }
246
+ }, location);
247
+ }
248
+ });
249
+ }
250
+ test.afterEach(HOOK_NAMES.AFTER_HOOKS, async () => {
251
+ const testInfo = test.info();
252
+ const testId = getTestId(testInfo);
253
+ const world = worlds.get(testId);
254
+ const testCase = tests.find((t) => t.id === testId);
255
+ if (!testCase) {
256
+ throw new Error(`Test case with ID ${testId} not found`);
257
+ }
258
+ for (const afterHook of supportCodeLibrary.afterTestCaseHookDefinitions) {
259
+ if (afterHook.appliesToTestCase(testCase)) {
260
+ const hookName = afterHook.name ?? HOOK_NAMES.AFTER;
261
+ const location = getLine(afterHook);
262
+ await test.step(hookName, () => afterHook.code.apply(world, [{
263
+ gherkinDocument: feature.gherkinDocument,
264
+ testCaseStartedId: DEFAULT_VALUES.TEST_CASE_ID,
265
+ pickle: testCase,
266
+ result: getResult(testInfo)
267
+ }]), location);
268
+ }
269
+ }
270
+ });
271
+ test.afterEach(HOOK_NAMES.WORLD, async () => {
272
+ const testId = getTestId(test.info());
273
+ worlds.delete(testId);
274
+ });
275
+ });
276
+ }
277
+ executeAfterAllHooks(test, supportCodeLibrary.afterTestRunHookDefinitions);
278
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Translate cucumber tag expression to playwright grep
3
+ * @param {string} tagExpression
4
+ * @example
5
+ * import { tags } from '@qavajs/playwright-runner-adapter';
6
+ * export default defineConfig({
7
+ * grep: tags('@oneTag and @anotherTag')
8
+ * });
9
+ */
10
+ export declare function tags(tagExpression: string): RegExp;
11
+ /**
12
+ * Filter test cases by name
13
+ * @param {(testName: string) => boolean} predicate
14
+ * import { filter } from '@qavajs/playwright-runner-adapter';
15
+ * export default defineConfig({
16
+ * grep: filter(name => name.includes('login test'))
17
+ * });
18
+ */
19
+ export declare function filter(predicate: (testName: string) => boolean): RegExp;
@@ -0,0 +1,55 @@
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.tags = tags;
7
+ exports.filter = filter;
8
+ const tag_expressions_1 = __importDefault(require("@cucumber/tag-expressions"));
9
+ class TagExpression extends RegExp {
10
+ tagExpression;
11
+ expressionNode;
12
+ constructor(tagExpression) {
13
+ super('');
14
+ this.tagExpression = tagExpression;
15
+ this.expressionNode = (0, tag_expressions_1.default)(this.tagExpression);
16
+ }
17
+ test(testName) {
18
+ const tokens = testName.split(/\s+/);
19
+ return this.expressionNode.evaluate(tokens);
20
+ }
21
+ }
22
+ /**
23
+ * Translate cucumber tag expression to playwright grep
24
+ * @param {string} tagExpression
25
+ * @example
26
+ * import { tags } from '@qavajs/playwright-runner-adapter';
27
+ * export default defineConfig({
28
+ * grep: tags('@oneTag and @anotherTag')
29
+ * });
30
+ */
31
+ function tags(tagExpression) {
32
+ return new TagExpression(tagExpression);
33
+ }
34
+ class Filter extends RegExp {
35
+ predicate;
36
+ constructor(predicate) {
37
+ super('');
38
+ this.predicate = predicate;
39
+ this.predicate = predicate;
40
+ }
41
+ test(testName) {
42
+ return this.predicate(testName);
43
+ }
44
+ }
45
+ /**
46
+ * Filter test cases by name
47
+ * @param {(testName: string) => boolean} predicate
48
+ * import { filter } from '@qavajs/playwright-runner-adapter';
49
+ * export default defineConfig({
50
+ * grep: filter(name => name.includes('login test'))
51
+ * });
52
+ */
53
+ function filter(predicate) {
54
+ return new Filter(predicate);
55
+ }
@@ -0,0 +1,5 @@
1
+ export * from './PlaywrightWorld';
2
+ export * from './filter';
3
+ export * from './Template';
4
+ export * from '@cucumber/cucumber';
5
+ export * from './cucumberAdapter';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./PlaywrightWorld"), exports);
18
+ __exportStar(require("./filter"), exports);
19
+ __exportStar(require("./Template"), exports);
20
+ __exportStar(require("@cucumber/cucumber"), exports);
21
+ __exportStar(require("./cucumberAdapter"), exports);
@@ -0,0 +1,14 @@
1
+ import type { Pickle, GherkinDocument } from '@cucumber/messages';
2
+ type Feature = {
3
+ feature?: string;
4
+ gherkinDocument: GherkinDocument;
5
+ tests: readonly Pickle[];
6
+ uri: string;
7
+ };
8
+ export declare function loadFeatures(globPattern: string[]): Feature[];
9
+ export declare function loadStepDefinitions(globPattern: string[]): import("@cucumber/cucumber/lib/support_code_library_builder/types").SupportCodeLibrary;
10
+ export declare function load(config: any): {
11
+ features: Feature[];
12
+ supportCodeLibrary: import("@cucumber/cucumber/lib/support_code_library_builder/types").SupportCodeLibrary;
13
+ };
14
+ export {};
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadFeatures = loadFeatures;
4
+ exports.loadStepDefinitions = loadStepDefinitions;
5
+ exports.load = load;
6
+ const node_fs_1 = require("node:fs");
7
+ const node_path_1 = require("node:path");
8
+ const node_crypto_1 = require("node:crypto");
9
+ const gherkin_1 = require("@cucumber/gherkin");
10
+ const cucumber_1 = require("@cucumber/cucumber");
11
+ const glob_1 = require("glob");
12
+ const PlaywrightWorld_1 = require("./PlaywrightWorld");
13
+ const uuidFn = () => (0, node_crypto_1.randomUUID)();
14
+ const builder = new gherkin_1.AstBuilder(uuidFn);
15
+ const matcher = new gherkin_1.GherkinClassicTokenMatcher();
16
+ const parser = new gherkin_1.Parser(builder, matcher);
17
+ function duplicates(tests) {
18
+ const counts = {};
19
+ return tests.map(item => {
20
+ const name = item.name;
21
+ if (!(name in counts)) {
22
+ counts[name] = 1;
23
+ }
24
+ if (counts[name] > 1) {
25
+ item.name = `${item.name} ${counts[name]}`;
26
+ }
27
+ counts[name] = counts[name] + 1;
28
+ return item;
29
+ });
30
+ }
31
+ function loadFeatures(globPattern) {
32
+ const files = (0, glob_1.globSync)(globPattern);
33
+ return files.map(file => {
34
+ const filePath = (0, node_path_1.resolve)(file);
35
+ const gherkinDocument = parser.parse((0, node_fs_1.readFileSync)(filePath, 'utf-8'));
36
+ return {
37
+ feature: gherkinDocument.feature?.name,
38
+ uri: filePath,
39
+ gherkinDocument,
40
+ tests: duplicates((0, gherkin_1.compile)(gherkinDocument, file, uuidFn))
41
+ };
42
+ });
43
+ }
44
+ function loadStepDefinitions(globPattern) {
45
+ cucumber_1.supportCodeLibraryBuilder.reset(process.cwd(), uuidFn);
46
+ cucumber_1.supportCodeLibraryBuilder.methods.setWorldConstructor(PlaywrightWorld_1.PlaywrightWorld);
47
+ const files = (0, glob_1.globSync)(globPattern);
48
+ for (const file of files) {
49
+ const filePath = (0, node_path_1.resolve)(file);
50
+ require(filePath);
51
+ }
52
+ return cucumber_1.supportCodeLibraryBuilder.finalize();
53
+ }
54
+ function load(config) {
55
+ const features = loadFeatures(config.paths);
56
+ const supportCodeLibrary = loadStepDefinitions([
57
+ ...(config.requireModules ?? []),
58
+ ...(config.require ?? []),
59
+ ...(config.import ?? [])
60
+ ]);
61
+ return { features, supportCodeLibrary };
62
+ }
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@qavajs/playwright-runner-adapter",
3
- "version": "2.0.1",
3
+ "version": "2.2.0",
4
4
  "description": "adapter for playwright test runner",
5
5
  "main": "adapter/index.js",
6
6
  "types": "adapter/index.d.ts",
7
7
  "scripts": {
8
- "build": "tsc",
8
+ "build": "tsc && tsc --project tsconfig.js.json",
9
9
  "test:ui": "playwright test --config test/playwright.config.ts --ui",
10
- "test:e2e": "playwright test --config test/playwright-e2e.config.ts"
10
+ "test:e2e": "playwright test --config test/playwright.config.ts --project parallel --project serial"
11
11
  },
12
12
  "author": "Alexandr Galichenko",
13
13
  "license": "MIT",
@@ -21,12 +21,12 @@
21
21
  "dependencies": {
22
22
  "@cucumber/gherkin": "^38.0.0",
23
23
  "@cucumber/tag-expressions": "^9.0.0",
24
- "glob": "^13.0.1",
24
+ "glob": "^13.0.3",
25
25
  "@cucumber/cucumber": "^12.6.0"
26
26
  },
27
27
  "devDependencies": {
28
- "@playwright/test": "^1.58.1",
29
- "@types/node": "^25.2.1",
28
+ "@playwright/test": "^1.58.2",
29
+ "@types/node": "^25.2.3",
30
30
  "typescript": "^5.9.3"
31
31
  },
32
32
  "keywords": [
@@ -5,7 +5,7 @@ import { APIRequestContext, Browser, BrowserContext, Page, test, expect } from '
5
5
  */
6
6
  export class TestWorld {
7
7
  log!: (data: any) => void;
8
- attach!: (data: any, details?: { fileName?: string, mediaType: string }) => void;
8
+ attach!: (data: any, details?: { fileName?: string, mediaType: string }) => Promise<void>;
9
9
  parameters!: string;
10
10
  config: any;
11
11
  supportCodeLibrary!: any;
@@ -43,9 +43,10 @@ export class PlaywrightWorld extends TestWorld {
43
43
  browserName!: string;
44
44
  request!: APIRequestContext;
45
45
 
46
- init: ({ [fixture: string]: any }) = ({ browser, context, page }: { browser: Browser, context: BrowserContext, page: Page }) => {
46
+ init: ({ [fixture: string]: any }) = ({ browser, context, page, request }: { browser: Browser, context: BrowserContext, page: Page, request: APIRequestContext }) => {
47
47
  this.browser = browser;
48
48
  this.context = context;
49
49
  this.page = page;
50
+ this.request = request;
50
51
  }
51
52
  }
@@ -4,7 +4,7 @@ import type {ITestCaseHookParameter} from '@cucumber/cucumber';
4
4
 
5
5
  // Constants
6
6
  const ANNOTATION_TYPES = {
7
- TEST_ID: 'testId',
7
+ TEST_ID: '_testId',
8
8
  NAME: 'name',
9
9
  URI: 'uri',
10
10
  TAGS: 'tags'
@@ -116,10 +116,10 @@ function attach(
116
116
  this: { test: { info: () => TestInfo } },
117
117
  body: string | Buffer,
118
118
  details?: { fileName?: string; mediaType?: string }
119
- ): void {
119
+ ): Promise<void> {
120
120
  const fileName = details?.fileName ?? DEFAULT_VALUES.ATTACHMENT_FILENAME;
121
121
  const contentType = details?.mediaType ?? DEFAULT_VALUES.CONTENT_TYPE;
122
- this.test.info().attach(fileName, { body, contentType });
122
+ return this.test.info().attach(fileName, { body, contentType });
123
123
  }
124
124
 
125
125
  /**
@@ -143,35 +143,41 @@ function stepName(pickleStep: {
143
143
  /**
144
144
  * Executes before all hooks
145
145
  */
146
- async function executeBeforeAllHooks(
146
+ function executeBeforeAllHooks(
147
147
  test: TestType<any, any>,
148
148
  hooks: any[]
149
- ): Promise<void> {
150
- for (const hook of hooks) {
151
- const location = getLine(hook);
152
- await test.step(
153
- HOOK_NAMES.BEFORE_ALL,
154
- () => hook.code.apply({}),
155
- location
156
- );
157
- }
149
+ ): void {
150
+ if (hooks.length === 0) return;
151
+ test.beforeAll(async () => {
152
+ for (const hook of hooks) {
153
+ const location = getLine(hook);
154
+ await test.step(
155
+ HOOK_NAMES.BEFORE_ALL,
156
+ () => hook.code.apply({}),
157
+ location
158
+ );
159
+ }
160
+ })
158
161
  }
159
162
 
160
163
  /**
161
164
  * Executes after all hooks
162
165
  */
163
- async function executeAfterAllHooks(
166
+ function executeAfterAllHooks(
164
167
  test: TestType<any, any>,
165
168
  hooks: any[]
166
- ): Promise<void> {
167
- for (const hook of hooks) {
168
- const location = getLine(hook);
169
- await test.step(
170
- HOOK_NAMES.AFTER_ALL,
171
- () => hook.code.apply({}),
172
- location
173
- );
174
- }
169
+ ): void {
170
+ if (hooks.length === 0) return;
171
+ test.afterAll(async () => {
172
+ for (const hook of hooks) {
173
+ const location = getLine(hook);
174
+ await test.step(
175
+ HOOK_NAMES.AFTER_ALL,
176
+ () => hook.code.apply({}),
177
+ location
178
+ );
179
+ }
180
+ });
175
181
  }
176
182
 
177
183
  /**
@@ -183,8 +189,8 @@ function createTestAnnotations(testCase: any): any[] {
183
189
  return [
184
190
  { type: ANNOTATION_TYPES.NAME, description: testCase.name },
185
191
  { type: ANNOTATION_TYPES.URI, description: testCase.uri },
186
- { type: ANNOTATION_TYPES.TEST_ID, description: testCase.id },
187
- { type: ANNOTATION_TYPES.TAGS, description: JSON.stringify(tags) }
192
+ { type: ANNOTATION_TYPES.TAGS, description: JSON.stringify(tags) },
193
+ { type: ANNOTATION_TYPES.TEST_ID, description: testCase.id }
188
194
  ];
189
195
  }
190
196
 
@@ -196,10 +202,7 @@ export function defineConfig(config: any): any {
196
202
 
197
203
  const fixture = new supportCodeLibrary.World({config});
198
204
  const test: TestType<any, any> = fixture.test;
199
-
200
- test.beforeAll(async () => {
201
- await executeBeforeAllHooks(test, supportCodeLibrary.beforeTestRunHookDefinitions);
202
- });
205
+ executeBeforeAllHooks(test, supportCodeLibrary.beforeTestRunHookDefinitions);
203
206
 
204
207
  const worlds = new Map<string, any>();
205
208
 
@@ -374,7 +377,5 @@ export function defineConfig(config: any): any {
374
377
  });
375
378
  }
376
379
 
377
- test.afterAll(async () => {
378
- await executeAfterAllHooks(test, supportCodeLibrary.afterTestRunHookDefinitions);
379
- });
380
+ executeAfterAllHooks(test, supportCodeLibrary.afterTestRunHookDefinitions);
380
381
  }
@@ -0,0 +1,23 @@
1
+ {
2
+ "include": [
3
+ "src/**/*.ts"
4
+ ],
5
+ "exclude": [
6
+ "test/**/*.spec.ts"
7
+ ],
8
+ "compilerOptions": {
9
+ "target": "es2023",
10
+ "module": "node16",
11
+ "moduleResolution": "node16",
12
+ "outDir": "./adapter/js",
13
+ "esModuleInterop": true,
14
+ "sourceMap": false,
15
+ "forceConsistentCasingInFileNames": true,
16
+ "strict": true,
17
+ "skipLibCheck": true,
18
+ "declaration": true,
19
+ "types": [
20
+ "node"
21
+ ]
22
+ }
23
+ }