@qavajs/playwright-runner-adapter 1.5.2 → 1.7.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 +21 -0
- package/README.md +11 -2
- package/adapter/PlaywrightWorld.js +16 -10
- package/adapter/PlaywrightWorld.js.map +1 -1
- package/adapter/Template.d.ts +10 -0
- package/adapter/Template.js +27 -0
- package/adapter/Template.js.map +1 -0
- package/adapter/cucumber.spec.js +6 -8
- package/adapter/cucumber.spec.js.map +1 -1
- package/adapter/defineCucumber.js +2 -3
- package/adapter/defineCucumber.js.map +1 -1
- package/adapter/filter.d.ts +19 -0
- package/adapter/{tags.js → filter.js} +27 -2
- package/adapter/filter.js.map +1 -0
- package/adapter/index.d.ts +5 -0
- package/adapter/index.js +22 -0
- package/adapter/index.js.map +1 -0
- package/adapter/loader.js +6 -8
- package/adapter/loader.js.map +1 -1
- package/package.json +33 -6
- package/src/Template.ts +23 -0
- package/src/cucumber.spec.ts +2 -1
- package/src/{tags.ts → filter.ts} +25 -2
- package/src/index.ts +5 -0
- package/tsconfig.json +1 -1
- package/adapter/tags.d.ts +0 -10
- package/adapter/tags.js.map +0 -1
- package/index.d.ts +0 -4
- package/index.js +0 -10
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,27 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
|
|
|
14
14
|
|
|
15
15
|
:microscope: - experimental
|
|
16
16
|
|
|
17
|
+
## [1.7.0]
|
|
18
|
+
- :rocket: added `filter` grep utility function
|
|
19
|
+
```typescript
|
|
20
|
+
import { filter } from '@qavajs/playwright-runner-adapter';
|
|
21
|
+
export default defineConfig({
|
|
22
|
+
grep: filter(name => name.includes('login test'))
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
- :rocket: expose `uri` test annotation
|
|
26
|
+
|
|
27
|
+
## [1.6.0]
|
|
28
|
+
- :rocket: added `Template` utility function
|
|
29
|
+
```typescript
|
|
30
|
+
import { When, Template } from '@qavajs/playwright-runner-adapter';
|
|
31
|
+
|
|
32
|
+
When('I click {string} and verify {string}', Template((locator, expected) => `
|
|
33
|
+
I click '${locator}'
|
|
34
|
+
I expect '${locator} > Value' to equal '${expected}'
|
|
35
|
+
`));
|
|
36
|
+
```
|
|
37
|
+
|
|
17
38
|
## [1.5.2]
|
|
18
39
|
- :beetle: fixed issue with `this.attach`, made `details` parameter as optional
|
|
19
40
|
|
package/README.md
CHANGED
|
@@ -75,14 +75,23 @@ class ExtendedPlaywrightWorld extends PlaywrightWorld {
|
|
|
75
75
|
}
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
### Tag expression
|
|
78
|
+
### Tag expression and filter
|
|
79
79
|
It is possible to use regular tag expressions via `tags` util function
|
|
80
80
|
|
|
81
81
|
```typescript
|
|
82
82
|
import { tags } from '@qavajs/playwright-runner-adapter';
|
|
83
83
|
export default defineConfig({
|
|
84
84
|
grep: tags('@oneTag and @anotherTag')
|
|
85
|
-
})
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
or filter tests by predicate
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
import { filter } from '@qavajs/playwright-runner-adapter';
|
|
92
|
+
export default defineConfig({
|
|
93
|
+
grep: filter(name => name.includes('login test'))
|
|
94
|
+
});
|
|
86
95
|
```
|
|
87
96
|
|
|
88
97
|
## Limitation
|
|
@@ -6,9 +6,13 @@ const test_1 = require("@playwright/test");
|
|
|
6
6
|
* Cucumber world for playwright adapter
|
|
7
7
|
*/
|
|
8
8
|
class TestWorld {
|
|
9
|
+
log;
|
|
10
|
+
attach;
|
|
11
|
+
parameters;
|
|
12
|
+
supportCodeLibrary;
|
|
13
|
+
test = test_1.test;
|
|
14
|
+
expect = test_1.expect;
|
|
9
15
|
constructor(options) {
|
|
10
|
-
this.test = test_1.test;
|
|
11
|
-
this.expect = test_1.expect;
|
|
12
16
|
this.log = options.log;
|
|
13
17
|
this.attach = options.attach;
|
|
14
18
|
this.parameters = options.parameters;
|
|
@@ -35,14 +39,16 @@ exports.TestWorld = TestWorld;
|
|
|
35
39
|
* Cucumber Playwright world for playwright adapter
|
|
36
40
|
*/
|
|
37
41
|
class PlaywrightWorld extends TestWorld {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
page;
|
|
43
|
+
context;
|
|
44
|
+
browser;
|
|
45
|
+
browserName;
|
|
46
|
+
request;
|
|
47
|
+
init = ({ browser, context, page }) => {
|
|
48
|
+
this.browser = browser;
|
|
49
|
+
this.context = context;
|
|
50
|
+
this.page = page;
|
|
51
|
+
};
|
|
46
52
|
}
|
|
47
53
|
exports.PlaywrightWorld = PlaywrightWorld;
|
|
48
54
|
//# sourceMappingURL=PlaywrightWorld.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightWorld.js","sourceRoot":"","sources":["../src/PlaywrightWorld.ts"],"names":[],"mappings":";;;AAAA,2CAAkG;AAElG;;GAEG;AACH,MAAa,SAAS;
|
|
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,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;AA3BD,8BA2BC;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"}
|
|
@@ -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,27 @@
|
|
|
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
|
+
}
|
|
27
|
+
//# sourceMappingURL=Template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Template.js","sourceRoot":"","sources":["../src/Template.ts"],"names":[],"mappings":";;AASA,4BAaC;AAtBD;;;;;;;;GAQG;AACH,SAAgB,QAAQ,CAAC,QAAoC;IACzD,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;QACvB,KAAK,EAAE,KAAK,WAAW,QAAuC,EAAE,KAAuD,EAAE,IAAW;YAChI,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAE;YACpC,MAAM,KAAK,GAAG,QAAQ;iBACjB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBACxB,MAAM,CAAC,OAAO,CAAC,CAAC;YACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACL,CAAC;KACJ,CAAC,CAAA;AACN,CAAC"}
|
package/adapter/cucumber.spec.js
CHANGED
|
@@ -6,9 +6,8 @@ function log(data) {
|
|
|
6
6
|
console.log(data);
|
|
7
7
|
}
|
|
8
8
|
function attach(body, details) {
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const contentType = (_b = details === null || details === void 0 ? void 0 : details.mediaType) !== null && _b !== void 0 ? _b : 'text/plain';
|
|
9
|
+
const fileName = details?.fileName ?? 'attachment';
|
|
10
|
+
const contentType = details?.mediaType ?? 'text/plain';
|
|
12
11
|
this.test.info().attach(fileName, { body, contentType });
|
|
13
12
|
}
|
|
14
13
|
const fixture = new supportCodeLibrary.World({});
|
|
@@ -29,7 +28,6 @@ for (const feature of features) {
|
|
|
29
28
|
});
|
|
30
29
|
test.beforeEach('Fixtures', world.init);
|
|
31
30
|
test.beforeEach('Before Hooks', async () => {
|
|
32
|
-
var _a;
|
|
33
31
|
const testId = test
|
|
34
32
|
.info()
|
|
35
33
|
.annotations
|
|
@@ -38,7 +36,7 @@ for (const feature of features) {
|
|
|
38
36
|
const testCase = tests.find(test => test.id === testId);
|
|
39
37
|
for (const beforeHook of supportCodeLibrary.beforeTestCaseHookDefinitions) {
|
|
40
38
|
if (beforeHook.appliesToTestCase(testCase)) {
|
|
41
|
-
const hookName =
|
|
39
|
+
const hookName = beforeHook.name ?? 'Before';
|
|
42
40
|
const location = { location: { column: 1, file: beforeHook.uri, line: beforeHook.line } };
|
|
43
41
|
await test.step(hookName, () => beforeHook.code.apply(world, [{
|
|
44
42
|
pickle: testCase
|
|
@@ -50,10 +48,11 @@ for (const feature of features) {
|
|
|
50
48
|
const tag = [...new Set(testCase.tags.map((tag) => tag.name))];
|
|
51
49
|
const annotation = [
|
|
52
50
|
{ type: 'name', description: testCase.name },
|
|
51
|
+
{ type: 'uri', description: testCase.uri },
|
|
53
52
|
{ type: 'testId', description: testCase.id },
|
|
54
53
|
{ type: 'tags', description: JSON.stringify(tag) }
|
|
55
54
|
];
|
|
56
|
-
test(testCase.name, { tag, annotation
|
|
55
|
+
test(testCase.name, { tag, annotation }, async () => {
|
|
57
56
|
const testInfo = test.info();
|
|
58
57
|
testInfo.result = { status: 'passed' };
|
|
59
58
|
for (const pickleStep of testCase.steps) {
|
|
@@ -109,7 +108,6 @@ for (const feature of features) {
|
|
|
109
108
|
});
|
|
110
109
|
}
|
|
111
110
|
test.afterEach('After Hooks', async () => {
|
|
112
|
-
var _a;
|
|
113
111
|
const testInfo = test.info();
|
|
114
112
|
const testId = testInfo
|
|
115
113
|
.annotations
|
|
@@ -118,7 +116,7 @@ for (const feature of features) {
|
|
|
118
116
|
const testCase = tests.find(test => test.id === testId);
|
|
119
117
|
for (const afterHook of supportCodeLibrary.afterTestCaseHookDefinitions) {
|
|
120
118
|
if (afterHook.appliesToTestCase(testCase)) {
|
|
121
|
-
const hookName =
|
|
119
|
+
const hookName = afterHook.name ?? 'After';
|
|
122
120
|
const location = { location: { column: 1, file: afterHook.uri, line: afterHook.line } };
|
|
123
121
|
await test.step(hookName, () => afterHook.code.apply(world, [{
|
|
124
122
|
pickle: testCase,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cucumber.spec.js","sourceRoot":"","sources":["../src/cucumber.spec.ts"],"names":[],"mappings":";;AAAA,qCAAgC;AAEhC,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,IAAA,aAAI,GAAE,CAAC;AAEhD,SAAS,GAAG,CAAC,IAAS;IAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,MAAM,CAAsB,IAAS,EAAE,OAAY
|
|
1
|
+
{"version":3,"file":"cucumber.spec.js","sourceRoot":"","sources":["../src/cucumber.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,9 +15,8 @@ const node_path_1 = require("node:path");
|
|
|
15
15
|
* })
|
|
16
16
|
*/
|
|
17
17
|
function defineCucumber(config) {
|
|
18
|
-
var _a, _b;
|
|
19
18
|
process.env.CONFIG = config.config;
|
|
20
|
-
process.env.PROFILE =
|
|
21
|
-
return
|
|
19
|
+
process.env.PROFILE = config.profile ?? 'default';
|
|
20
|
+
return config.adapter ?? (0, node_path_1.resolve)('./node_modules/@qavajs/playwright-runner-adapter/adapter');
|
|
22
21
|
}
|
|
23
22
|
//# sourceMappingURL=defineCucumber.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineCucumber.js","sourceRoot":"","sources":["../src/defineCucumber.ts"],"names":[],"mappings":";;AAoBA,wCAIC;AAxBD,yCAAoC;AAQpC;;;;;;;;;;;GAWG;AACH,SAAgB,cAAc,CAAC,MAAsB
|
|
1
|
+
{"version":3,"file":"defineCucumber.js","sourceRoot":"","sources":["../src/defineCucumber.ts"],"names":[],"mappings":";;AAoBA,wCAIC;AAxBD,yCAAoC;AAQpC;;;;;;;;;;;GAWG;AACH,SAAgB,cAAc,CAAC,MAAsB;IACjD,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;IAClD,OAAO,MAAM,CAAC,OAAO,IAAI,IAAA,mBAAO,EAAC,0DAA0D,CAAC,CAAC;AACjG,CAAC"}
|
|
@@ -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;
|
|
@@ -4,8 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.tags = tags;
|
|
7
|
+
exports.filter = filter;
|
|
7
8
|
const tag_expressions_1 = __importDefault(require("@cucumber/tag-expressions"));
|
|
8
9
|
class TagExpression extends RegExp {
|
|
10
|
+
tagExpression;
|
|
11
|
+
expressionNode;
|
|
9
12
|
constructor(tagExpression) {
|
|
10
13
|
super('');
|
|
11
14
|
this.tagExpression = tagExpression;
|
|
@@ -23,9 +26,31 @@ class TagExpression extends RegExp {
|
|
|
23
26
|
* import { tags } from '@qavajs/playwright-runner-adapter';
|
|
24
27
|
* export default defineConfig({
|
|
25
28
|
* grep: tags('@oneTag and @anotherTag')
|
|
26
|
-
* })
|
|
29
|
+
* });
|
|
27
30
|
*/
|
|
28
31
|
function tags(tagExpression) {
|
|
29
32
|
return new TagExpression(tagExpression);
|
|
30
33
|
}
|
|
31
|
-
|
|
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
|
+
}
|
|
56
|
+
//# sourceMappingURL=filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":";;;;;AA2BA,oBAEC;AAqBD,wBAEC;AApDD,gFAA8C;AAE9C,MAAM,aAAc,SAAQ,MAAM;IAKV;IAJZ,cAAc,CAEpB;IAEF,YAAoB,aAAqB;QACrC,KAAK,CAAC,EAAE,CAAC,CAAC;QADM,kBAAa,GAAb,aAAa,CAAQ;QAErC,IAAI,CAAC,cAAc,GAAG,IAAA,yBAAK,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,QAAgB;QACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;CACJ;AAED;;;;;;;;GAQG;AACH,SAAgB,IAAI,CAAC,aAAqB;IACtC,OAAO,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,MAAO,SAAQ,MAAM;IACH;IAApB,YAAoB,SAAwC;QACxD,KAAK,CAAC,EAAE,CAAC,CAAC;QADM,cAAS,GAAT,SAAS,CAA+B;QAExD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,QAAgB;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,SAAgB,MAAM,CAAC,SAAwC;IAC3D,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
|
package/adapter/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
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("./defineCucumber"), exports);
|
|
19
|
+
__exportStar(require("./filter"), exports);
|
|
20
|
+
__exportStar(require("./Template"), exports);
|
|
21
|
+
__exportStar(require("@cucumber/cucumber"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,mDAAiC;AACjC,2CAAyB;AACzB,6CAA2B;AAC3B,qDAAmC"}
|
package/adapter/loader.js
CHANGED
|
@@ -31,11 +31,10 @@ function duplicates(tests) {
|
|
|
31
31
|
function loadFeatures(globPattern) {
|
|
32
32
|
const files = (0, glob_1.globSync)(globPattern);
|
|
33
33
|
return files.map(file => {
|
|
34
|
-
var _a;
|
|
35
34
|
const filePath = (0, node_path_1.resolve)(file);
|
|
36
35
|
const gherkinDocument = parser.parse((0, node_fs_1.readFileSync)(filePath, 'utf-8'));
|
|
37
36
|
return {
|
|
38
|
-
feature:
|
|
37
|
+
feature: gherkinDocument.feature?.name,
|
|
39
38
|
tests: duplicates((0, gherkin_1.compile)(gherkinDocument, file, uuidFn))
|
|
40
39
|
};
|
|
41
40
|
});
|
|
@@ -51,15 +50,14 @@ function loadStepDefinitions(globPattern) {
|
|
|
51
50
|
return cucumber_1.supportCodeLibraryBuilder.finalize();
|
|
52
51
|
}
|
|
53
52
|
function load() {
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
const profile = (_b = process.env.PROFILE) !== null && _b !== void 0 ? _b : 'default';
|
|
53
|
+
const config = require((0, node_path_1.join)(process.cwd(), process.env.CONFIG ?? 'config.js'));
|
|
54
|
+
const profile = process.env.PROFILE ?? 'default';
|
|
57
55
|
const resolvedConfig = config[profile];
|
|
58
56
|
const features = loadFeatures(resolvedConfig.paths);
|
|
59
57
|
const supportCodeLibrary = loadStepDefinitions([
|
|
60
|
-
...(
|
|
61
|
-
...(
|
|
62
|
-
...(
|
|
58
|
+
...(resolvedConfig.requireModules ?? []),
|
|
59
|
+
...(resolvedConfig.require ?? []),
|
|
60
|
+
...(resolvedConfig.import ?? [])
|
|
63
61
|
]);
|
|
64
62
|
return { features, supportCodeLibrary };
|
|
65
63
|
}
|
package/adapter/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";;AA4BA,oCAUC;AAED,kDASC;AAED,oBAYC;AA/DD,qCAAuC;AACvC,yCAA0C;AAC1C,6CAAyC;AACzC,+CAA4F;AAC5F,iDAA+D;AAC/D,+BAAgC;AAChC,uDAAoD;AAEpD,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAA,wBAAU,GAAE,CAAC;AAClC,MAAM,OAAO,GAAG,IAAI,oBAAU,CAAC,MAAM,CAAC,CAAC;AACvC,MAAM,OAAO,GAAG,IAAI,oCAA0B,EAAE,CAAC;AACjD,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AAE3C,SAAS,UAAU,CAAC,KAAY;IAC5B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAgB,YAAY,CAAC,WAAqB;IAC9C,MAAM,KAAK,GAAG,IAAA,eAAQ,EAAC,WAAW,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qavajs/playwright-runner-adapter",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "adapter for playwright test runner",
|
|
5
|
+
"main": "adapter/index.js",
|
|
6
|
+
"types": "adapter/index.d.ts",
|
|
5
7
|
"scripts": {
|
|
6
8
|
"build": "tsc",
|
|
7
9
|
"test:ui": "playwright test --config test/playwright.config.ts --ui",
|
|
@@ -17,14 +19,39 @@
|
|
|
17
19
|
"url": "https://github.com/qavajs/playwright-runner-adapter/issues"
|
|
18
20
|
},
|
|
19
21
|
"dependencies": {
|
|
20
|
-
"@cucumber/gherkin": "^
|
|
21
|
-
"@cucumber/tag-expressions": "^
|
|
22
|
+
"@cucumber/gherkin": "^36.0.0",
|
|
23
|
+
"@cucumber/tag-expressions": "^8.0.0",
|
|
22
24
|
"glob": "^11.0.3",
|
|
23
25
|
"@cucumber/cucumber": "^12.2.0"
|
|
24
26
|
},
|
|
25
27
|
"devDependencies": {
|
|
26
|
-
"@playwright/test": "^1.
|
|
27
|
-
"@types/node": "^24.
|
|
28
|
+
"@playwright/test": "^1.56.1",
|
|
29
|
+
"@types/node": "^24.9.1",
|
|
28
30
|
"typescript": "^5.9.3"
|
|
29
|
-
}
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"test",
|
|
34
|
+
"automation",
|
|
35
|
+
"testing",
|
|
36
|
+
"qa",
|
|
37
|
+
"quality-assurance",
|
|
38
|
+
"test-framework",
|
|
39
|
+
"test-runner",
|
|
40
|
+
"test-automation",
|
|
41
|
+
"e2e",
|
|
42
|
+
"end-to-end",
|
|
43
|
+
"ui-testing",
|
|
44
|
+
"integration-testing",
|
|
45
|
+
"acceptance-testing",
|
|
46
|
+
"functional-testing",
|
|
47
|
+
"browser-testing",
|
|
48
|
+
"mobile-testing",
|
|
49
|
+
"cross-browser",
|
|
50
|
+
"bdd",
|
|
51
|
+
"gherkin",
|
|
52
|
+
"assertions",
|
|
53
|
+
"continuous-delivery",
|
|
54
|
+
"automation-framework",
|
|
55
|
+
"playwright"
|
|
56
|
+
]
|
|
30
57
|
}
|
package/src/Template.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
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 function Template(scenario: (...args: any[]) => string) {
|
|
11
|
+
return new Proxy(scenario, {
|
|
12
|
+
apply: async function (template: (...args: string[]) => string, world: { executeStep: (step: string) => Promise<void> }, args: any[]) {
|
|
13
|
+
const scenario = template(...args) ;
|
|
14
|
+
const steps = scenario
|
|
15
|
+
.split('\n')
|
|
16
|
+
.map(step => step.trim())
|
|
17
|
+
.filter(Boolean);
|
|
18
|
+
for (const step of steps) {
|
|
19
|
+
await world.executeStep(step);
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
})
|
|
23
|
+
}
|
package/src/cucumber.spec.ts
CHANGED
|
@@ -63,10 +63,11 @@ for (const feature of features) {
|
|
|
63
63
|
const tag = [...new Set(testCase.tags.map((tag: { name: string }) => tag.name))];
|
|
64
64
|
const annotation = [
|
|
65
65
|
{ type: 'name', description: testCase.name },
|
|
66
|
+
{ type: 'uri', description: testCase.uri },
|
|
66
67
|
{ type: 'testId', description: testCase.id },
|
|
67
68
|
{ type: 'tags', description: JSON.stringify(tag) }
|
|
68
69
|
];
|
|
69
|
-
test(testCase.name, { tag, annotation
|
|
70
|
+
test(testCase.name, { tag, annotation }, async () => {
|
|
70
71
|
const testInfo = test.info();
|
|
71
72
|
testInfo.result = { status: 'passed' };
|
|
72
73
|
for (const pickleStep of testCase.steps) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import parse from '@cucumber/tag-expressions'
|
|
1
|
+
import parse from '@cucumber/tag-expressions';
|
|
2
2
|
|
|
3
3
|
class TagExpression extends RegExp {
|
|
4
4
|
private expressionNode: {
|
|
@@ -23,8 +23,31 @@ class TagExpression extends RegExp {
|
|
|
23
23
|
* import { tags } from '@qavajs/playwright-runner-adapter';
|
|
24
24
|
* export default defineConfig({
|
|
25
25
|
* grep: tags('@oneTag and @anotherTag')
|
|
26
|
-
* })
|
|
26
|
+
* });
|
|
27
27
|
*/
|
|
28
28
|
export function tags(tagExpression: string): RegExp {
|
|
29
29
|
return new TagExpression(tagExpression);
|
|
30
30
|
}
|
|
31
|
+
|
|
32
|
+
class Filter extends RegExp {
|
|
33
|
+
constructor(private predicate: (testName: string) => boolean) {
|
|
34
|
+
super('');
|
|
35
|
+
this.predicate = predicate;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
test(testName: string) {
|
|
39
|
+
return this.predicate(testName);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Filter test cases by name
|
|
45
|
+
* @param {(testName: string) => boolean} predicate
|
|
46
|
+
* import { filter } from '@qavajs/playwright-runner-adapter';
|
|
47
|
+
* export default defineConfig({
|
|
48
|
+
* grep: filter(name => name.includes('login test'))
|
|
49
|
+
* });
|
|
50
|
+
*/
|
|
51
|
+
export function filter(predicate: (testName: string) => boolean): RegExp {
|
|
52
|
+
return new Filter(predicate);
|
|
53
|
+
}
|
package/src/index.ts
ADDED
package/tsconfig.json
CHANGED
package/adapter/tags.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
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;
|
package/adapter/tags.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":";;;;;AA2BA,oBAEC;AA7BD,gFAA6C;AAE7C,MAAM,aAAc,SAAQ,MAAM;IAK9B,YAAoB,aAAqB;QACrC,KAAK,CAAC,EAAE,CAAC,CAAC;QADM,kBAAa,GAAb,aAAa,CAAQ;QAErC,IAAI,CAAC,cAAc,GAAG,IAAA,yBAAK,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,QAAgB;QACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;CACJ;AAED;;;;;;;;GAQG;AACH,SAAgB,IAAI,CAAC,aAAqB;IACtC,OAAO,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;AAC5C,CAAC"}
|
package/index.d.ts
DELETED
package/index.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
const worlds = require('./adapter/PlaywrightWorld');
|
|
2
|
-
const { defineCucumber } = require('./adapter/defineCucumber');
|
|
3
|
-
const { tags } = require('./adapter/tags');
|
|
4
|
-
const cucumber = require('@cucumber/cucumber');
|
|
5
|
-
module.exports = {
|
|
6
|
-
...worlds,
|
|
7
|
-
defineCucumber,
|
|
8
|
-
tags,
|
|
9
|
-
...cucumber
|
|
10
|
-
}
|