@serenity-js/playwright-test 3.2.1 → 3.3.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 +20 -0
- package/lib/api/PerformActivitiesAsPlaywrightSteps.d.ts +13 -0
- package/lib/api/PerformActivitiesAsPlaywrightSteps.d.ts.map +1 -0
- package/lib/api/PerformActivitiesAsPlaywrightSteps.js +43 -0
- package/lib/api/PerformActivitiesAsPlaywrightSteps.js.map +1 -0
- package/lib/api/test-api.d.ts.map +1 -1
- package/lib/api/test-api.js +6 -3
- package/lib/api/test-api.js.map +1 -1
- package/lib/reporter/PlaywrightStepReporter.d.ts +2 -4
- package/lib/reporter/PlaywrightStepReporter.d.ts.map +1 -1
- package/lib/reporter/PlaywrightStepReporter.js +12 -61
- package/lib/reporter/PlaywrightStepReporter.js.map +1 -1
- package/package.json +6 -6
- package/src/api/PerformActivitiesAsPlaywrightSteps.ts +63 -0
- package/src/api/test-api.ts +9 -5
- package/src/reporter/PlaywrightStepReporter.ts +15 -88
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [3.3.0](https://github.com/serenity-js/serenity-js/compare/v3.2.1...v3.3.0) (2023-06-01)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **playwright-test:** corrected synchronisation of the `platform` fixture ([7156f84](https://github.com/serenity-js/serenity-js/commit/7156f840dc8fe5688d25aca5ba87d925158e9c7d)), closes [#1717](https://github.com/serenity-js/serenity-js/issues/1717)
|
|
12
|
+
* **playwright:** support for Playwright 1.34.0 ([5d591c7](https://github.com/serenity-js/serenity-js/commit/5d591c71e89ac4cfd41b8f7e3a1c9017f962d9e3))
|
|
13
|
+
* **playwright:** updated Playwright to 1.34.2 ([c944031](https://github.com/serenity-js/serenity-js/commit/c94403199a349d59bb777b981897039c102f243f))
|
|
14
|
+
* **playwright:** upgraded to Playwright 1.34.3 ([0ded19e](https://github.com/serenity-js/serenity-js/commit/0ded19e8ef3aea74307ab3bbd69ff5f7b3c9f78b))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* **playwright-test:** improved integration with Playwright Test ([45b324f](https://github.com/serenity-js/serenity-js/commit/45b324f4b2e2992dc2df78c18013f2f235ff91b9)), closes [#1717](https://github.com/serenity-js/serenity-js/issues/1717)
|
|
20
|
+
* **playwright-test:** much more detailed Playwright Test reports ([5980a1e](https://github.com/serenity-js/serenity-js/commit/5980a1e37047d71199cc169271fa11869e98355b)), closes [#1717](https://github.com/serenity-js/serenity-js/issues/1717)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
6
26
|
## [3.2.1](https://github.com/serenity-js/serenity-js/compare/v3.2.0...v3.2.1) (2023-05-15)
|
|
7
27
|
|
|
8
28
|
**Note:** Version bump only for package @serenity-js/playwright-test
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { test as base } from '@playwright/test';
|
|
2
|
+
import { Activity, PerformActivities, PerformsActivities } from '@serenity-js/core';
|
|
3
|
+
import { EmitsDomainEvents } from '@serenity-js/core/lib/events';
|
|
4
|
+
export declare class PerformActivitiesAsPlaywrightSteps extends PerformActivities {
|
|
5
|
+
private readonly test;
|
|
6
|
+
constructor(actor: PerformsActivities & {
|
|
7
|
+
name: string;
|
|
8
|
+
}, stage: EmitsDomainEvents, test: typeof base);
|
|
9
|
+
perform(activity: Activity): Promise<void>;
|
|
10
|
+
private parametersOf;
|
|
11
|
+
private locationOf;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=PerformActivitiesAsPlaywrightSteps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformActivitiesAsPlaywrightSteps.d.ts","sourceRoot":"","sources":["../../src/api/PerformActivitiesAsPlaywrightSteps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAkB,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGjE,qBAAa,kCAAmC,SAAQ,iBAAiB;IAKjE,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFrB,KAAK,EAAE,kBAAkB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAC5C,KAAK,EAAE,iBAAiB,EACP,IAAI,EAAE,OAAO,IAAI;IAKvB,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzD,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,UAAU;CAQrB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PerformActivitiesAsPlaywrightSteps = void 0;
|
|
4
|
+
const core_1 = require("@serenity-js/core");
|
|
5
|
+
const objects_1 = require("tiny-types/lib/objects");
|
|
6
|
+
class PerformActivitiesAsPlaywrightSteps extends core_1.PerformActivities {
|
|
7
|
+
constructor(actor, stage, test) {
|
|
8
|
+
super(actor, stage);
|
|
9
|
+
this.test = test;
|
|
10
|
+
}
|
|
11
|
+
async perform(activity) {
|
|
12
|
+
const testInfo = this.test.info();
|
|
13
|
+
// see https://github.com/microsoft/playwright/issues/23157
|
|
14
|
+
const runAsStep = (testInfo['_runAsStep']).bind(testInfo);
|
|
15
|
+
return runAsStep({
|
|
16
|
+
category: 'test.step',
|
|
17
|
+
title: this.nameOf(activity),
|
|
18
|
+
location: this.locationOf(activity),
|
|
19
|
+
params: this.parametersOf(activity),
|
|
20
|
+
}, async (step_) => {
|
|
21
|
+
await super.perform(activity);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
parametersOf(activity) {
|
|
25
|
+
if (activity instanceof core_1.Interaction) {
|
|
26
|
+
return (0, objects_1.significantFieldsOf)(activity).reduce((acc, field) => {
|
|
27
|
+
acc[field] = (0, core_1.d) `${activity[field]}`;
|
|
28
|
+
return acc;
|
|
29
|
+
}, {});
|
|
30
|
+
}
|
|
31
|
+
return {};
|
|
32
|
+
}
|
|
33
|
+
locationOf(activity) {
|
|
34
|
+
const instantiationLocation = activity.instantiationLocation();
|
|
35
|
+
return {
|
|
36
|
+
file: instantiationLocation.path.value,
|
|
37
|
+
line: instantiationLocation.line,
|
|
38
|
+
column: instantiationLocation.column
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.PerformActivitiesAsPlaywrightSteps = PerformActivitiesAsPlaywrightSteps;
|
|
43
|
+
//# sourceMappingURL=PerformActivitiesAsPlaywrightSteps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformActivitiesAsPlaywrightSteps.js","sourceRoot":"","sources":["../../src/api/PerformActivitiesAsPlaywrightSteps.ts"],"names":[],"mappings":";;;AACA,4CAAoG;AAEpG,oDAA6D;AAE7D,MAAa,kCAAmC,SAAQ,wBAAiB;IAErE,YACI,KAA4C,EAC5C,KAAwB,EACP,IAAiB;QAElC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAFH,SAAI,GAAJ,IAAI,CAAa;IAGtC,CAAC;IAEQ,KAAK,CAAC,OAAO,CAAC,QAAkB;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAElC,2DAA2D;QAC3D,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAoG,CAAC;QAE7J,OAAO,SAAS,CAAC;YACb,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC5B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;SACtC,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;YACb,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,YAAY,CAAC,QAAkB;QACnC,IAAI,QAAQ,YAAY,kBAAW,EAAE;YACjC,OAAO,IAAA,6BAAmB,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBACvD,GAAG,CAAC,KAAK,CAAC,GAAG,IAAA,QAAC,EAAA,GAAI,QAAQ,CAAC,KAAK,CAAE,EAAE,CAAC;gBACrC,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAAE,CAAC,CAAC;SACV;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,QAAkB;QACjC,MAAM,qBAAqB,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QAC/D,OAAO;YACH,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK;YACtC,IAAI,EAAE,qBAAqB,CAAC,IAAI;YAChC,MAAM,EAAE,qBAAqB,CAAC,MAAM;SACvC,CAAC;IACN,CAAC;CACJ;AA5CD,gFA4CC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-api.d.ts","sourceRoot":"","sources":["../../src/api/test-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test-api.d.ts","sourceRoot":"","sources":["../../src/api/test-api.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,eAAO,MAAM,EAAE,EAAE,gBA2Hf,CAAC;AAYH,eAAO,MAAM,IAAI,EAAE,gBAAqB,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAe,CAAC;AAClE,eAAO,MAAM,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAgB,CAAC;AACrE,eAAO,MAAM,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAiB,CAAC;AACxE,eAAO,MAAM,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAgB,CAAC;AACrE,eAAO,MAAM,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAe,CAAC;AAClE,eAAO,MAAM,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAa,CAAC"}
|
package/lib/api/test-api.js
CHANGED
|
@@ -33,6 +33,7 @@ const web_1 = require("@serenity-js/web");
|
|
|
33
33
|
const os = __importStar(require("os"));
|
|
34
34
|
const tiny_types_1 = require("tiny-types");
|
|
35
35
|
const reporter_1 = require("../reporter");
|
|
36
|
+
const PerformActivitiesAsPlaywrightSteps_1 = require("./PerformActivitiesAsPlaywrightSteps");
|
|
36
37
|
/**
|
|
37
38
|
* Declares a single test scenario.
|
|
38
39
|
*
|
|
@@ -92,7 +93,9 @@ const reporter_1 = require("../reporter");
|
|
|
92
93
|
*/
|
|
93
94
|
exports.it = test_1.test.extend({
|
|
94
95
|
actors: [
|
|
95
|
-
({ browser, contextOptions }, use) =>
|
|
96
|
+
async ({ browser, contextOptions, serenity }, use) => {
|
|
97
|
+
await use(core_1.Cast.where(actor => actor.whoCan(new PerformActivitiesAsPlaywrightSteps_1.PerformActivitiesAsPlaywrightSteps(actor, serenity, exports.it), playwright_1.BrowseTheWebWithPlaywright.using(browser, contextOptions), core_1.TakeNotes.usingAnEmptyNotepad())));
|
|
98
|
+
},
|
|
96
99
|
{ option: true },
|
|
97
100
|
],
|
|
98
101
|
defaultActorName: [
|
|
@@ -114,13 +117,13 @@ exports.it = test_1.test.extend({
|
|
|
114
117
|
{ option: true },
|
|
115
118
|
],
|
|
116
119
|
// eslint-disable-next-line no-empty-pattern
|
|
117
|
-
platform: ({}, use) => {
|
|
120
|
+
platform: async ({}, use) => {
|
|
118
121
|
const platform = os.platform();
|
|
119
122
|
// https://nodejs.org/api/process.html#process_process_platform
|
|
120
123
|
const name = platform === 'win32'
|
|
121
124
|
? 'Windows'
|
|
122
125
|
: (platform === 'darwin' ? 'macOS' : 'Linux');
|
|
123
|
-
use({ name, version: os.release() });
|
|
126
|
+
await use({ name, version: os.release() });
|
|
124
127
|
},
|
|
125
128
|
serenity: async ({ crew, cueTimeout, interactionTimeout, platform }, use, info) => {
|
|
126
129
|
const domainEventBuffer = new reporter_1.DomainEventBuffer();
|
package/lib/api/test-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-api.js","sourceRoot":"","sources":["../../src/api/test-api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA0D;AAC1D,4CAA+G;AAC/G,yDAA0E;AAC1E,uDAAsE;AACtE,wDAAqF;AACrF,0CAAsE;AACtE,uCAAyB;AACzB,2CAAqE;AAErE,0CAA2H;
|
|
1
|
+
{"version":3,"file":"test-api.js","sourceRoot":"","sources":["../../src/api/test-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,11 @@ import { DomainEvent } from '@serenity-js/core/lib/events';
|
|
|
4
4
|
export declare class PlaywrightStepReporter implements StageCrewMember {
|
|
5
5
|
private readonly testInfo;
|
|
6
6
|
private stage?;
|
|
7
|
-
private readonly steps;
|
|
8
7
|
constructor(testInfo: TestInfo, stage?: Stage);
|
|
9
8
|
assignedTo(stage: Stage): StageCrewMember;
|
|
10
9
|
notifyOf(event: DomainEvent): void;
|
|
11
|
-
private isAPhotoAttempt;
|
|
12
|
-
private indicatesCompletionOfAnAsyncOperation;
|
|
13
10
|
private attachPhotoFrom;
|
|
14
|
-
private
|
|
11
|
+
private shouldAddTag;
|
|
12
|
+
private addTag;
|
|
15
13
|
}
|
|
16
14
|
//# sourceMappingURL=PlaywrightStepReporter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightStepReporter.d.ts","sourceRoot":"","sources":["../../src/reporter/PlaywrightStepReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"PlaywrightStepReporter.d.ts","sourceRoot":"","sources":["../../src/reporter/PlaywrightStepReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAIH,WAAW,EAEd,MAAM,8BAA8B,CAAC;AAItC,qBAAa,sBAAuB,YAAW,eAAe;IAGtD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,KAAK,CAAC;gBADG,QAAQ,EAAE,QAAQ,EAC3B,KAAK,CAAC,EAAE,KAAK;IAIzB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe;IAMzC,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAWlC,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,MAAM;CAGjB"}
|
|
@@ -2,67 +2,23 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PlaywrightStepReporter = void 0;
|
|
4
4
|
const events_1 = require("@serenity-js/core/lib/events");
|
|
5
|
-
const io_1 = require("@serenity-js/core/lib/io");
|
|
6
5
|
const model_1 = require("@serenity-js/core/lib/model");
|
|
7
|
-
const web_1 = require("@serenity-js/web");
|
|
8
|
-
const tiny_types_1 = require("tiny-types");
|
|
9
|
-
const genericPathToPhotographer = io_1.Path.from(require.resolve('@serenity-js/web'));
|
|
10
6
|
class PlaywrightStepReporter {
|
|
11
7
|
constructor(testInfo, stage) {
|
|
12
8
|
this.testInfo = testInfo;
|
|
13
9
|
this.stage = stage;
|
|
14
|
-
this.steps = new Map();
|
|
15
10
|
}
|
|
16
11
|
assignedTo(stage) {
|
|
17
12
|
this.stage = stage;
|
|
18
13
|
return this;
|
|
19
14
|
}
|
|
20
15
|
notifyOf(event) {
|
|
21
|
-
(
|
|
22
|
-
.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
.
|
|
26
|
-
|
|
27
|
-
})
|
|
28
|
-
.when(events_1.AsyncOperationAttempted, (e) => {
|
|
29
|
-
if (this.isAPhotoAttempt(e)) {
|
|
30
|
-
this.steps.set(e.correlationId.value, this.createStep(new model_1.ActivityDetails(new model_1.Name(`${web_1.Photographer.name}: ${e.description.value}`), new io_1.FileSystemLocation(genericPathToPhotographer)), 'crew'));
|
|
31
|
-
}
|
|
32
|
-
})
|
|
33
|
-
.when(events_1.ActivityFinished, (e) => {
|
|
34
|
-
const error = e.outcome instanceof model_1.ProblemIndication
|
|
35
|
-
? e.outcome.error
|
|
36
|
-
: undefined;
|
|
37
|
-
this.steps.get(e.activityId.value).complete({ error });
|
|
38
|
-
})
|
|
39
|
-
.when(events_1.ActivityRelatedArtifactGenerated, (e) => {
|
|
40
|
-
if (e.artifact instanceof model_1.Photo) {
|
|
41
|
-
this.attachPhotoFrom(e);
|
|
42
|
-
}
|
|
43
|
-
})
|
|
44
|
-
.when(events_1.SceneTagged, (e) => {
|
|
45
|
-
// don't include platform and browser tags as Playwright already includes them
|
|
46
|
-
if (!(e.tag instanceof model_1.PlatformTag || e.tag instanceof model_1.BrowserTag)) {
|
|
47
|
-
this.testInfo.annotations.push({ type: e.tag.type, description: e.tag.name });
|
|
48
|
-
}
|
|
49
|
-
})
|
|
50
|
-
.else(e => {
|
|
51
|
-
if (this.indicatesCompletionOfAnAsyncOperation(e) && this.steps.has(e.correlationId.value)) {
|
|
52
|
-
const error = event instanceof events_1.AsyncOperationFailed
|
|
53
|
-
? event.error
|
|
54
|
-
: undefined;
|
|
55
|
-
this.steps.get(e.correlationId.value).complete({ error });
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
isAPhotoAttempt(event) {
|
|
60
|
-
return event.name.value.startsWith(web_1.Photographer.name);
|
|
61
|
-
}
|
|
62
|
-
indicatesCompletionOfAnAsyncOperation(event) {
|
|
63
|
-
return event instanceof events_1.AsyncOperationCompleted
|
|
64
|
-
|| event instanceof events_1.AsyncOperationAborted
|
|
65
|
-
|| event instanceof events_1.AsyncOperationFailed;
|
|
16
|
+
if (event instanceof events_1.ActivityRelatedArtifactGenerated && event.artifact instanceof model_1.Photo) {
|
|
17
|
+
this.attachPhotoFrom(event);
|
|
18
|
+
}
|
|
19
|
+
if (event instanceof events_1.SceneTagged && this.shouldAddTag(event.tag)) {
|
|
20
|
+
this.addTag(event.tag);
|
|
21
|
+
}
|
|
66
22
|
}
|
|
67
23
|
attachPhotoFrom(event) {
|
|
68
24
|
const id = model_1.CorrelationId.create();
|
|
@@ -72,17 +28,12 @@ class PlaywrightStepReporter {
|
|
|
72
28
|
this.stage.announce(new events_1.AsyncOperationCompleted(id, this.stage.currentTime()));
|
|
73
29
|
});
|
|
74
30
|
}
|
|
75
|
-
|
|
76
|
-
//
|
|
77
|
-
return
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
category: `serenity-js:${type}`,
|
|
82
|
-
title: activityDetails.name.value,
|
|
83
|
-
canHaveChildren: true,
|
|
84
|
-
forceNoParent: false,
|
|
85
|
-
});
|
|
31
|
+
shouldAddTag(tag) {
|
|
32
|
+
// don't include platform and browser tags as Playwright already includes them
|
|
33
|
+
return !(tag instanceof model_1.PlatformTag || tag instanceof model_1.BrowserTag);
|
|
34
|
+
}
|
|
35
|
+
addTag(tag) {
|
|
36
|
+
this.testInfo.annotations.push({ type: tag.type, description: tag.name });
|
|
86
37
|
}
|
|
87
38
|
}
|
|
88
39
|
exports.PlaywrightStepReporter = PlaywrightStepReporter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightStepReporter.js","sourceRoot":"","sources":["../../src/reporter/PlaywrightStepReporter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"PlaywrightStepReporter.js","sourceRoot":"","sources":["../../src/reporter/PlaywrightStepReporter.ts"],"names":[],"mappings":";;;AAEA,yDAMsC;AACtC,uDAA+G;AAG/G,MAAa,sBAAsB;IAE/B,YACqB,QAAkB,EAC3B,KAAa;QADJ,aAAQ,GAAR,QAAQ,CAAU;QAC3B,UAAK,GAAL,KAAK,CAAQ;IAEzB,CAAC;IAED,UAAU,CAAC,KAAY;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,KAAkB;QAEvB,IAAI,KAAK,YAAY,yCAAgC,IAAI,KAAK,CAAC,QAAQ,YAAY,aAAK,EAAE;YACtF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,IAAI,KAAK,YAAY,oBAAW,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAC1B;IACL,CAAC;IAEO,eAAe,CAAC,KAAuC;QAC3D,MAAM,EAAE,GAAG,qBAAa,CAAC,MAAM,EAAE,CAAC;QAElC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gCAAuB,CAC3C,IAAI,YAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAC/B,IAAI,mBAAW,CAAC,4BAA6B,KAAK,CAAC,IAAI,CAAC,KAAM,MAAM,CAAC,EACrE,EAAE,EACF,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;aAC/H,IAAI,CAAC,GAAG,EAAE;YACP,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gCAAuB,CAC3C,EAAE,EACF,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAC3B,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACX,CAAC;IAEO,YAAY,CAAC,GAAQ;QACzB,8EAA8E;QAC9E,OAAO,CAAE,CAAC,GAAG,YAAY,mBAAW,IAAI,GAAG,YAAY,kBAAU,CAAC,CAAA;IACtE,CAAC;IAEO,MAAM,CAAC,GAAQ;QACnB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;CACJ;AApDD,wDAoDC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serenity-js/playwright-test",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "Serenity/JS reporter and test APIs for Playwright Test",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Jan Molak",
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
"node": "^16.13 || ^18.12 || ^20"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@playwright/test": "^1.
|
|
48
|
-
"@serenity-js/core": "3.
|
|
49
|
-
"@serenity-js/playwright": "3.
|
|
50
|
-
"@serenity-js/web": "3.
|
|
47
|
+
"@playwright/test": "^1.34.3",
|
|
48
|
+
"@serenity-js/core": "3.3.0",
|
|
49
|
+
"@serenity-js/playwright": "3.3.0",
|
|
50
|
+
"@serenity-js/web": "3.3.0",
|
|
51
51
|
"deepmerge": "^4.3.1",
|
|
52
52
|
"tiny-types": "^1.19.1"
|
|
53
53
|
},
|
|
@@ -61,5 +61,5 @@
|
|
|
61
61
|
"ts-node": "^10.9.1",
|
|
62
62
|
"typescript": "^5.0.4"
|
|
63
63
|
},
|
|
64
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "c4a2bb6aef7b087dc9bc37269fd999d1cdc15088"
|
|
65
65
|
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { test as base } from '@playwright/test';
|
|
2
|
+
import { Activity, d, Interaction, PerformActivities, PerformsActivities } from '@serenity-js/core';
|
|
3
|
+
import { EmitsDomainEvents } from '@serenity-js/core/lib/events';
|
|
4
|
+
import { significantFieldsOf } from 'tiny-types/lib/objects';
|
|
5
|
+
|
|
6
|
+
export class PerformActivitiesAsPlaywrightSteps extends PerformActivities {
|
|
7
|
+
|
|
8
|
+
constructor(
|
|
9
|
+
actor: PerformsActivities & { name: string },
|
|
10
|
+
stage: EmitsDomainEvents,
|
|
11
|
+
private readonly test: typeof base,
|
|
12
|
+
) {
|
|
13
|
+
super(actor, stage);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
override async perform(activity: Activity): Promise<void> {
|
|
17
|
+
const testInfo = this.test.info();
|
|
18
|
+
|
|
19
|
+
// see https://github.com/microsoft/playwright/issues/23157
|
|
20
|
+
const runAsStep = (testInfo['_runAsStep']).bind(testInfo) as <T>(stepInfo: TestStepInternal, callback: (step: TestStepInternal) => Promise<T>) => Promise<T>;
|
|
21
|
+
|
|
22
|
+
return runAsStep({
|
|
23
|
+
category: 'test.step',
|
|
24
|
+
title: this.nameOf(activity),
|
|
25
|
+
location: this.locationOf(activity),
|
|
26
|
+
params: this.parametersOf(activity),
|
|
27
|
+
}, async step_ => {
|
|
28
|
+
await super.perform(activity)
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
private parametersOf(activity: Activity): Record<string, any> {
|
|
33
|
+
if (activity instanceof Interaction) {
|
|
34
|
+
return significantFieldsOf(activity).reduce((acc, field) => {
|
|
35
|
+
acc[field] = d`${ activity[field] }`;
|
|
36
|
+
return acc;
|
|
37
|
+
}, {});
|
|
38
|
+
}
|
|
39
|
+
return {};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
private locationOf(activity: Activity): { column: number, file: string, line: number } {
|
|
43
|
+
const instantiationLocation = activity.instantiationLocation();
|
|
44
|
+
return {
|
|
45
|
+
file: instantiationLocation.path.value,
|
|
46
|
+
line: instantiationLocation.line,
|
|
47
|
+
column: instantiationLocation.column
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
interface TestStepInternal {
|
|
53
|
+
title: string;
|
|
54
|
+
category: string;
|
|
55
|
+
location?: {
|
|
56
|
+
column: number;
|
|
57
|
+
file: string;
|
|
58
|
+
line: number;
|
|
59
|
+
};
|
|
60
|
+
laxParent?: boolean;
|
|
61
|
+
apiName?: string;
|
|
62
|
+
params?: Record<string, any>;
|
|
63
|
+
}
|
package/src/api/test-api.ts
CHANGED
|
@@ -8,6 +8,7 @@ import * as os from 'os';
|
|
|
8
8
|
import { ensure, isFunction, JSONValue, property } from 'tiny-types';
|
|
9
9
|
|
|
10
10
|
import { DomainEventBuffer, PlaywrightStepReporter, SERENITY_JS_DOMAIN_EVENTS_ATTACHMENT_CONTENT_TYPE } from '../reporter';
|
|
11
|
+
import { PerformActivitiesAsPlaywrightSteps } from './PerformActivitiesAsPlaywrightSteps';
|
|
11
12
|
import { SerenityFixtures } from './SerenityFixtures';
|
|
12
13
|
import { SerenityOptions } from './SerenityOptions';
|
|
13
14
|
import { SerenityTestType } from './SerenityTestType';
|
|
@@ -72,11 +73,14 @@ import { SerenityTestType } from './SerenityTestType';
|
|
|
72
73
|
export const it: SerenityTestType = base.extend<Omit<SerenityOptions, 'actors'> & SerenityFixtures>({
|
|
73
74
|
|
|
74
75
|
actors: [
|
|
75
|
-
({ browser, contextOptions }, use) =>
|
|
76
|
-
|
|
76
|
+
async ({ browser, contextOptions, serenity }, use) => {
|
|
77
|
+
|
|
78
|
+
await use(Cast.where(actor => actor.whoCan(
|
|
79
|
+
new PerformActivitiesAsPlaywrightSteps(actor, serenity, it),
|
|
77
80
|
BrowseTheWebWithPlaywright.using(browser, contextOptions),
|
|
78
81
|
TakeNotes.usingAnEmptyNotepad(),
|
|
79
|
-
)))
|
|
82
|
+
)))
|
|
83
|
+
},
|
|
80
84
|
{ option: true },
|
|
81
85
|
],
|
|
82
86
|
|
|
@@ -103,7 +107,7 @@ export const it: SerenityTestType = base.extend<Omit<SerenityOptions, 'actors'>
|
|
|
103
107
|
],
|
|
104
108
|
|
|
105
109
|
// eslint-disable-next-line no-empty-pattern
|
|
106
|
-
platform: ({}, use) => {
|
|
110
|
+
platform: async ({}, use) => {
|
|
107
111
|
const platform = os.platform();
|
|
108
112
|
|
|
109
113
|
// https://nodejs.org/api/process.html#process_process_platform
|
|
@@ -111,7 +115,7 @@ export const it: SerenityTestType = base.extend<Omit<SerenityOptions, 'actors'>
|
|
|
111
115
|
? 'Windows'
|
|
112
116
|
: (platform === 'darwin' ? 'macOS' : 'Linux');
|
|
113
117
|
|
|
114
|
-
use({ name, version: os.release() });
|
|
118
|
+
await use({ name, version: os.release() });
|
|
115
119
|
},
|
|
116
120
|
|
|
117
121
|
serenity: async ({ crew, cueTimeout, interactionTimeout, platform }, use, info: TestInfo) => {
|
|
@@ -1,41 +1,17 @@
|
|
|
1
1
|
import { TestInfo } from '@playwright/test';
|
|
2
|
-
import { Location, TestError } from '@playwright/test/reporter';
|
|
3
2
|
import { Stage, StageCrewMember } from '@serenity-js/core';
|
|
4
3
|
import {
|
|
5
|
-
ActivityFinished,
|
|
6
4
|
ActivityRelatedArtifactGenerated,
|
|
7
|
-
AsyncOperationAborted,
|
|
8
5
|
AsyncOperationAttempted,
|
|
9
6
|
AsyncOperationCompleted,
|
|
10
|
-
AsyncOperationFailed,
|
|
11
7
|
DomainEvent,
|
|
12
|
-
InteractionStarts,
|
|
13
8
|
SceneTagged,
|
|
14
|
-
TaskStarts,
|
|
15
9
|
} from '@serenity-js/core/lib/events';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { Photographer } from '@serenity-js/web';
|
|
19
|
-
import { match } from 'tiny-types';
|
|
20
|
-
|
|
21
|
-
const genericPathToPhotographer = Path.from(require.resolve('@serenity-js/web'))
|
|
22
|
-
|
|
23
|
-
// https://github.com/microsoft/playwright/blob/04f77f231981780704a3a5e2cea93e3c420809a0/packages/playwright-test/src/types.ts#L30
|
|
24
|
-
interface TestStepInternal {
|
|
25
|
-
complete(result: { error?: Error | TestError }): void;
|
|
26
|
-
|
|
27
|
-
title: string;
|
|
28
|
-
category: string;
|
|
29
|
-
canHaveChildren: boolean;
|
|
30
|
-
forceNoParent: boolean;
|
|
31
|
-
location?: Location;
|
|
32
|
-
refinedTitle?: string;
|
|
33
|
-
}
|
|
10
|
+
import { BrowserTag, CorrelationId, Description, Name, Photo, PlatformTag } from '@serenity-js/core/lib/model';
|
|
11
|
+
import { Tag } from '@serenity-js/core/src/model';
|
|
34
12
|
|
|
35
13
|
export class PlaywrightStepReporter implements StageCrewMember {
|
|
36
14
|
|
|
37
|
-
private readonly steps: Map<string, TestStepInternal> = new Map();
|
|
38
|
-
|
|
39
15
|
constructor(
|
|
40
16
|
private readonly testInfo: TestInfo,
|
|
41
17
|
private stage?: Stage,
|
|
@@ -50,58 +26,13 @@ export class PlaywrightStepReporter implements StageCrewMember {
|
|
|
50
26
|
|
|
51
27
|
notifyOf(event: DomainEvent): void {
|
|
52
28
|
|
|
53
|
-
|
|
54
|
-
.
|
|
55
|
-
|
|
56
|
-
})
|
|
57
|
-
.when(InteractionStarts, (e: InteractionStarts) => {
|
|
58
|
-
this.steps.set(e.activityId.value, this.createStep(e.details, 'interaction'));
|
|
59
|
-
})
|
|
60
|
-
.when(AsyncOperationAttempted, (e: AsyncOperationAttempted) => {
|
|
61
|
-
if (this.isAPhotoAttempt(e)) {
|
|
62
|
-
this.steps.set(e.correlationId.value, this.createStep(new ActivityDetails(
|
|
63
|
-
new Name(`${ Photographer.name }: ${ e.description.value }`),
|
|
64
|
-
new FileSystemLocation(genericPathToPhotographer)
|
|
65
|
-
), 'crew'));
|
|
66
|
-
}
|
|
67
|
-
})
|
|
68
|
-
.when(ActivityFinished, (e: ActivityFinished) => {
|
|
69
|
-
const error = e.outcome instanceof ProblemIndication
|
|
70
|
-
? e.outcome.error
|
|
71
|
-
: undefined;
|
|
72
|
-
|
|
73
|
-
this.steps.get(e.activityId.value).complete({ error });
|
|
74
|
-
})
|
|
75
|
-
.when(ActivityRelatedArtifactGenerated, (e: ActivityRelatedArtifactGenerated) => {
|
|
76
|
-
if (e.artifact instanceof Photo) {
|
|
77
|
-
this.attachPhotoFrom(e);
|
|
78
|
-
}
|
|
79
|
-
})
|
|
80
|
-
.when(SceneTagged, (e: SceneTagged) => {
|
|
81
|
-
// don't include platform and browser tags as Playwright already includes them
|
|
82
|
-
if (! (e.tag instanceof PlatformTag || e.tag instanceof BrowserTag)) {
|
|
83
|
-
this.testInfo.annotations.push({ type: e.tag.type, description: e.tag.name });
|
|
84
|
-
}
|
|
85
|
-
})
|
|
86
|
-
.else(e => {
|
|
87
|
-
if (this.indicatesCompletionOfAnAsyncOperation(e) && this.steps.has(e.correlationId.value)) {
|
|
88
|
-
const error = event instanceof AsyncOperationFailed
|
|
89
|
-
? event.error
|
|
90
|
-
: undefined;
|
|
29
|
+
if (event instanceof ActivityRelatedArtifactGenerated && event.artifact instanceof Photo) {
|
|
30
|
+
this.attachPhotoFrom(event);
|
|
31
|
+
}
|
|
91
32
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
private isAPhotoAttempt(event: AsyncOperationAttempted): event is AsyncOperationAttempted {
|
|
98
|
-
return event.name.value.startsWith(Photographer.name);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
private indicatesCompletionOfAnAsyncOperation(event: DomainEvent): event is AsyncOperationCompleted | AsyncOperationAborted | AsyncOperationFailed {
|
|
102
|
-
return event instanceof AsyncOperationCompleted
|
|
103
|
-
|| event instanceof AsyncOperationAborted
|
|
104
|
-
|| event instanceof AsyncOperationFailed
|
|
33
|
+
if (event instanceof SceneTagged && this.shouldAddTag(event.tag)) {
|
|
34
|
+
this.addTag(event.tag);
|
|
35
|
+
}
|
|
105
36
|
}
|
|
106
37
|
|
|
107
38
|
private attachPhotoFrom(event: ActivityRelatedArtifactGenerated) {
|
|
@@ -123,16 +54,12 @@ export class PlaywrightStepReporter implements StageCrewMember {
|
|
|
123
54
|
});
|
|
124
55
|
}
|
|
125
56
|
|
|
126
|
-
private
|
|
127
|
-
//
|
|
128
|
-
return (
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
title: activityDetails.name.value,
|
|
134
|
-
canHaveChildren: true,
|
|
135
|
-
forceNoParent: false,
|
|
136
|
-
}) as TestStepInternal;
|
|
57
|
+
private shouldAddTag(tag: Tag): boolean {
|
|
58
|
+
// don't include platform and browser tags as Playwright already includes them
|
|
59
|
+
return ! (tag instanceof PlatformTag || tag instanceof BrowserTag)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private addTag(tag: Tag): void {
|
|
63
|
+
this.testInfo.annotations.push({ type: tag.type, description: tag.name });
|
|
137
64
|
}
|
|
138
65
|
}
|