@serenity-js/playwright 3.34.1 → 3.35.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
@@ -3,6 +3,25 @@
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.35.0](https://github.com/serenity-js/serenity-js/compare/v3.34.2...v3.35.0) (2025-09-07)
7
+
8
+
9
+ ### Features
10
+
11
+ * **web:** support for identifying page elements by their ARIA role ([cf3672a](https://github.com/serenity-js/serenity-js/commit/cf3672a6fe3051eab9c195f2f342ebf55c19e2d6))
12
+
13
+
14
+
15
+
16
+
17
+ ## [3.34.2](https://github.com/serenity-js/serenity-js/compare/v3.34.1...v3.34.2) (2025-09-07)
18
+
19
+ **Note:** Version bump only for package @serenity-js/playwright
20
+
21
+
22
+
23
+
24
+
6
25
  ## [3.34.1](https://github.com/serenity-js/serenity-js/compare/v3.34.0...v3.34.1) (2025-08-20)
7
26
 
8
27
 
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightLocator.d.ts","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/PlaywrightLocator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAmE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAKnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;gBAGlE,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,EACvC,QAAQ,EAAE,QAAQ;IAMtB,SAAS,CAAC,cAAc,IAAI,MAAM;IA4B5B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAsB7B,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;IAM5C,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAU7D,EAAE,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IAItE,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IAIxE,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IAIrE,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;IAIpC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;CAavE;AAED;;GAEG;AACH,qBAAa,gCAAiC,SAAQ,iBAAiB;IAI/D,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBAFtC,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,EACvC,QAAQ,EAAE,QAAQ,EACD,qBAAqB,EAAE,UAAU,CAAC,OAAO;IAKxD,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;IAI5C,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;CAGhE"}
1
+ {"version":3,"file":"PlaywrightLocator.d.ts","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/PlaywrightLocator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyB,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAClG,OAAO,EAA2E,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACpH,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAKnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;gBAGlE,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,EACvC,QAAQ,EAAE,QAAQ;IAMtB,SAAS,CAAC,cAAc,IAAI,MAAM;IAgC5B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAsB7B,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;IAM5C,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAU7D,EAAE,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IAItE,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IAIxE,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IAIrE,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;IAIpC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;CAavE;AAED;;GAEG;AACH,qBAAa,gCAAiC,SAAQ,iBAAiB;IAI/D,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBAFtC,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,EACvC,QAAQ,EAAE,QAAQ,EACD,qBAAqB,EAAE,UAAU,CAAC,OAAO;IAKxD,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;IAI5C,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;CAGhE"}
@@ -29,6 +29,9 @@ class PlaywrightLocator extends web_1.Locator {
29
29
  if (this.selector instanceof web_1.ById) {
30
30
  return `id=${this.selector.value}`;
31
31
  }
32
+ if (this.selector instanceof web_1.ByRole) {
33
+ return getByRoleSelector(this.selector.value, this.selector.options);
34
+ }
32
35
  if (this.selector instanceof web_1.ByTagName) {
33
36
  return `:light(${this.selector.value})`;
34
37
  }
@@ -115,4 +118,54 @@ class PlaywrightParentElementLocator extends PlaywrightLocator {
115
118
  return [await this.nativeElement()];
116
119
  }
117
120
  }
121
+ // Playwright doesn't expose the internal locator utilities, so unfortunately we need to re-implement them here.
122
+ // https://github.com/microsoft/playwright/blob/release-1.55/packages/playwright-core/src/utils/isomorphic/locatorUtils.ts#L59
123
+ function getByRoleSelector(role, options = {}) {
124
+ const props = [];
125
+ if (options.checked !== undefined) {
126
+ props.push(['checked', String(options.checked)]);
127
+ }
128
+ if (options.disabled !== undefined) {
129
+ props.push(['disabled', String(options.disabled)]);
130
+ }
131
+ if (options.selected !== undefined) {
132
+ props.push(['selected', String(options.selected)]);
133
+ }
134
+ if (options.expanded !== undefined) {
135
+ props.push(['expanded', String(options.expanded)]);
136
+ }
137
+ if (options.includeHidden !== undefined) {
138
+ props.push(['include-hidden', String(options.includeHidden)]);
139
+ }
140
+ if (options.level !== undefined) {
141
+ props.push(['level', String(options.level)]);
142
+ }
143
+ if (options.name !== undefined) {
144
+ props.push(['name', escapeForAttributeSelector(options.name, !!options.exact)]);
145
+ }
146
+ if (options.pressed !== undefined) {
147
+ props.push(['pressed', String(options.pressed)]);
148
+ }
149
+ return `role=${role}${props.map(([n, v]) => `[${n}=${v}]`).join('')}`;
150
+ }
151
+ // https://github.com/microsoft/playwright/blob/release-1.55/packages/playwright-core/src/utils/isomorphic/stringUtils.ts#L92
152
+ function escapeForAttributeSelector(value, exact) {
153
+ if (typeof value !== 'string') {
154
+ return escapeRegexForSelector(value);
155
+ }
156
+ // However, Playwright attribute selectors do not conform to CSS parsing spec,
157
+ // so we escape them differently.
158
+ return `"${value.replaceAll('\\', '\\\\').replaceAll('"', '\\"')}"${exact ? 's' : 'i'}`;
159
+ }
160
+ // https://github.com/microsoft/playwright/blob/release-1.55/packages/playwright-core/src/utils/isomorphic/stringUtils.ts#L75
161
+ function escapeRegexForSelector(re) {
162
+ // Unicode mode does not allow "identity character escapes", so Playwright does not escape and
163
+ // hopes that it does not contain quotes and/or >> signs.
164
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Character_escape
165
+ if (re['unicode'] || re['unicodeSets']) {
166
+ return String(re);
167
+ }
168
+ // Even number of backslashes followed by the quote -> insert a backslash.
169
+ return String(re).replaceAll(/(^|[^\\])(\\\\)*(["'`])/g, '$1$2\\$3').replaceAll('>>', '\\>\\>');
170
+ }
118
171
  //# sourceMappingURL=PlaywrightLocator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightLocator.js","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/PlaywrightLocator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlaywrightLocator.js","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/PlaywrightLocator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serenity-js/playwright",
3
- "version": "3.34.1",
3
+ "version": "3.35.0",
4
4
  "description": "Adapter that integrates @serenity-js/web with Playwright, enabling Serenity/JS reporting and using the Screenplay Pattern to write component and end-to-end test scenarios",
5
5
  "author": {
6
6
  "name": "Jan Molak",
@@ -57,8 +57,8 @@
57
57
  "node": "^18.12 || ^20 || ^22"
58
58
  },
59
59
  "dependencies": {
60
- "@serenity-js/core": "3.34.1",
61
- "@serenity-js/web": "3.34.1",
60
+ "@serenity-js/core": "3.35.0",
61
+ "@serenity-js/web": "3.35.0",
62
62
  "tiny-types": "1.24.1"
63
63
  },
64
64
  "peerDependencies": {
@@ -69,11 +69,11 @@
69
69
  "@types/chai": "4.3.20",
70
70
  "@types/mocha": "10.0.10",
71
71
  "c8": "10.1.3",
72
- "mocha": "11.7.1",
72
+ "mocha": "11.7.2",
73
73
  "mocha-multi": "1.1.7",
74
74
  "playwright-core": "1.55.0",
75
75
  "ts-node": "10.9.2",
76
76
  "typescript": "5.9.2"
77
77
  },
78
- "gitHead": "8591e154237ca715a067ff5f58351c418416e75a"
78
+ "gitHead": "b87c48f8c67c0a51173cd5c29eb6e8599ca131ca"
79
79
  }
@@ -1,6 +1,6 @@
1
1
  import { f, LogicError } from '@serenity-js/core';
2
- import type { PageElement, RootLocator, Selector } from '@serenity-js/web';
3
- import { ByCss, ByCssContainingText, ByDeepCss, ById, ByTagName, ByXPath, Locator } from '@serenity-js/web';
2
+ import type { ByRoleSelectorOptions, PageElement, RootLocator, Selector } from '@serenity-js/web';
3
+ import { ByCss, ByCssContainingText, ByDeepCss, ById, ByRole, ByTagName, ByXPath, Locator } from '@serenity-js/web';
4
4
  import type * as playwright from 'playwright-core';
5
5
 
6
6
  import { SerenitySelectorEngines } from '../../../selector-engines';
@@ -40,6 +40,10 @@ export class PlaywrightLocator extends Locator<playwright.Locator, string> {
40
40
  return `id=${ this.selector.value }`;
41
41
  }
42
42
 
43
+ if (this.selector instanceof ByRole) {
44
+ return getByRoleSelector(this.selector.value, this.selector.options)
45
+ }
46
+
43
47
  if (this.selector instanceof ByTagName) {
44
48
  return `:light(${ this.selector.value })`;
45
49
  }
@@ -161,3 +165,58 @@ class PlaywrightParentElementLocator extends PlaywrightLocator {
161
165
  return [ await this.nativeElement() ];
162
166
  }
163
167
  }
168
+
169
+ // Playwright doesn't expose the internal locator utilities, so unfortunately we need to re-implement them here.
170
+
171
+ // https://github.com/microsoft/playwright/blob/release-1.55/packages/playwright-core/src/utils/isomorphic/locatorUtils.ts#L59
172
+ function getByRoleSelector(role: string, options: ByRoleSelectorOptions = {}): string {
173
+ const props: string[][] = [];
174
+ if (options.checked !== undefined) {
175
+ props.push(['checked', String(options.checked)]);
176
+ }
177
+ if (options.disabled !== undefined) {
178
+ props.push(['disabled', String(options.disabled)]);
179
+ }
180
+ if (options.selected !== undefined) {
181
+ props.push(['selected', String(options.selected)]);
182
+ }
183
+ if (options.expanded !== undefined) {
184
+ props.push(['expanded', String(options.expanded)]);
185
+ }
186
+ if (options.includeHidden !== undefined) {
187
+ props.push(['include-hidden', String(options.includeHidden)]);
188
+ }
189
+ if (options.level !== undefined) {
190
+ props.push(['level', String(options.level)]);
191
+ }
192
+ if (options.name !== undefined) {
193
+ props.push(['name', escapeForAttributeSelector(options.name, !!options.exact)]);
194
+ }
195
+ if (options.pressed !== undefined) {
196
+ props.push(['pressed', String(options.pressed)]);
197
+ }
198
+
199
+ return `role=${role}${props.map(([n, v]) => `[${n}=${v}]`).join('')}`;
200
+ }
201
+
202
+ // https://github.com/microsoft/playwright/blob/release-1.55/packages/playwright-core/src/utils/isomorphic/stringUtils.ts#L92
203
+ function escapeForAttributeSelector(value: string | RegExp, exact: boolean): string {
204
+ if (typeof value !== 'string') {
205
+ return escapeRegexForSelector(value);
206
+ }
207
+ // However, Playwright attribute selectors do not conform to CSS parsing spec,
208
+ // so we escape them differently.
209
+ return `"${value.replaceAll('\\', '\\\\').replaceAll('"', '\\"')}"${exact ? 's' : 'i'}`;
210
+ }
211
+
212
+ // https://github.com/microsoft/playwright/blob/release-1.55/packages/playwright-core/src/utils/isomorphic/stringUtils.ts#L75
213
+ function escapeRegexForSelector(re: RegExp): string {
214
+ // Unicode mode does not allow "identity character escapes", so Playwright does not escape and
215
+ // hopes that it does not contain quotes and/or >> signs.
216
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Character_escape
217
+ if (re['unicode'] || re['unicodeSets']) {
218
+ return String(re);
219
+ }
220
+ // Even number of backslashes followed by the quote -> insert a backslash.
221
+ return String(re).replaceAll(/(^|[^\\])(\\\\)*(["'`])/g, '$1$2\\$3').replaceAll('>>', '\\>\\>');
222
+ }