@serenity-js/playwright 3.6.1 → 3.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/lib/index.d.ts +1 -0
  3. package/lib/index.d.ts.map +1 -1
  4. package/lib/index.js +1 -0
  5. package/lib/index.js.map +1 -1
  6. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts +1 -1
  7. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts.map +1 -1
  8. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.js +25 -1
  9. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.js.map +1 -1
  10. package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts +3 -1
  11. package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts.map +1 -1
  12. package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js +6 -2
  13. package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js.map +1 -1
  14. package/lib/screenplay/models/PlaywrightPageElement.d.ts +1 -0
  15. package/lib/screenplay/models/PlaywrightPageElement.d.ts.map +1 -1
  16. package/lib/screenplay/models/PlaywrightPageElement.js +3 -0
  17. package/lib/screenplay/models/PlaywrightPageElement.js.map +1 -1
  18. package/lib/screenplay/models/locators/PlaywrightLocator.d.ts +1 -0
  19. package/lib/screenplay/models/locators/PlaywrightLocator.d.ts.map +1 -1
  20. package/lib/screenplay/models/locators/PlaywrightLocator.js +18 -0
  21. package/lib/screenplay/models/locators/PlaywrightLocator.js.map +1 -1
  22. package/lib/selector-engines/PlaywrightSelectorEngine.d.ts +5 -0
  23. package/lib/selector-engines/PlaywrightSelectorEngine.d.ts.map +1 -0
  24. package/lib/selector-engines/PlaywrightSelectorEngine.js +3 -0
  25. package/lib/selector-engines/PlaywrightSelectorEngine.js.map +1 -0
  26. package/lib/selector-engines/SerenitySelectorEngines.d.ts +14 -0
  27. package/lib/selector-engines/SerenitySelectorEngines.d.ts.map +1 -0
  28. package/lib/selector-engines/SerenitySelectorEngines.js +44 -0
  29. package/lib/selector-engines/SerenitySelectorEngines.js.map +1 -0
  30. package/lib/selector-engines/index.d.ts +2 -0
  31. package/lib/selector-engines/index.d.ts.map +1 -0
  32. package/lib/selector-engines/index.js +18 -0
  33. package/lib/selector-engines/index.js.map +1 -0
  34. package/package.json +5 -5
  35. package/src/index.ts +1 -0
  36. package/src/screenplay/abilities/BrowseTheWebWithPlaywright.ts +2 -2
  37. package/src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts +7 -1
  38. package/src/screenplay/models/PlaywrightPageElement.ts +4 -0
  39. package/src/screenplay/models/locators/PlaywrightLocator.ts +26 -0
  40. package/src/selector-engines/PlaywrightSelectorEngine.ts +4 -0
  41. package/src/selector-engines/SerenitySelectorEngines.ts +45 -0
  42. package/src/selector-engines/index.ts +1 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,30 @@
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.7.1](https://github.com/serenity-js/serenity-js/compare/v3.7.0...v3.7.1) (2023-07-22)
7
+
8
+ **Note:** Version bump only for package @serenity-js/playwright
9
+
10
+
11
+
12
+
13
+
14
+ # [3.7.0](https://github.com/serenity-js/serenity-js/compare/v3.6.1...v3.7.0) (2023-07-20)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **deps:** update playwright dependencies to ^1.36.1 ([b86289b](https://github.com/serenity-js/serenity-js/commit/b86289b3f6d703baa9867ad167502de102591545))
20
+
21
+
22
+ ### Features
23
+
24
+ * **playwright:** support for parentElement.closestTo(childElement) API ([cee2c48](https://github.com/serenity-js/serenity-js/commit/cee2c48e63cc8edbfc9daece57e9966f8833beeb)), closes [#1784](https://github.com/serenity-js/serenity-js/issues/1784)
25
+
26
+
27
+
28
+
29
+
6
30
  ## [3.6.1](https://github.com/serenity-js/serenity-js/compare/v3.6.0...v3.6.1) (2023-07-11)
7
31
 
8
32
 
package/lib/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './PlaywrightOptions';
2
2
  export * from './screenplay';
3
+ export * from './selector-engines';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
package/lib/index.js CHANGED
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./PlaywrightOptions"), exports);
18
18
  __exportStar(require("./screenplay"), exports);
19
+ __exportStar(require("./selector-engines"), exports);
19
20
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,+CAA6B;AAC7B,qDAAmC"}
@@ -1,6 +1,6 @@
1
1
  import type { Discardable } from '@serenity-js/core';
2
2
  import { BrowseTheWeb } from '@serenity-js/web';
3
- import type * as playwright from 'playwright-core';
3
+ import * as playwright from 'playwright-core';
4
4
  import type { PlaywrightOptions } from '../../PlaywrightOptions';
5
5
  /**
6
6
  * This implementation of the {@apilink Ability|ability} to {@apilink BrowseTheWeb}
@@ -1 +1 @@
1
- {"version":3,"file":"BrowseTheWebWithPlaywright.d.ts","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAMjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AACH,qBAAa,0BAA2B,SAAQ,YAAY,CAAC,UAAU,CAAC,OAAO,CAAE,YAAW,WAAW;IAEnG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,0BAA0B;IAIlG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,0BAA0B;IAIhG;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGjC"}
1
+ {"version":3,"file":"BrowseTheWebWithPlaywright.d.ts","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAMjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AACH,qBAAa,0BAA2B,SAAQ,YAAY,CAAC,UAAU,CAAC,OAAO,CAAE,YAAW,WAAW;IAEnG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,0BAA0B;IAIlG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,0BAA0B;IAIhG;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGjC"}
@@ -1,7 +1,31 @@
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.BrowseTheWebWithPlaywright = void 0;
4
27
  const web_1 = require("@serenity-js/web");
28
+ const playwright = __importStar(require("playwright-core"));
5
29
  const models_1 = require("../models");
6
30
  /**
7
31
  * This implementation of the {@apilink Ability|ability} to {@apilink BrowseTheWeb}
@@ -98,7 +122,7 @@ const models_1 = require("../models");
98
122
  */
99
123
  class BrowseTheWebWithPlaywright extends web_1.BrowseTheWeb {
100
124
  static using(browser, options) {
101
- return new BrowseTheWebWithPlaywright(new models_1.PlaywrightBrowsingSessionWithBrowser(browser, options));
125
+ return new BrowseTheWebWithPlaywright(new models_1.PlaywrightBrowsingSessionWithBrowser(browser, options, playwright.selectors));
102
126
  }
103
127
  static usingPage(page, options) {
104
128
  return new BrowseTheWebWithPlaywright(new models_1.PlaywrightBrowsingSessionWithPage(page, options));
@@ -1 +1 @@
1
- {"version":3,"file":"BrowseTheWebWithPlaywright.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":";;;AACA,0CAAgD;AAIhD,sCAGmB;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AACH,MAAa,0BAA2B,SAAQ,kBAAgC;IAE5E,MAAM,CAAC,KAAK,CAAC,OAA2B,EAAE,OAA2B;QACjE,OAAO,IAAI,0BAA0B,CAAC,IAAI,6CAAoC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,IAAqB,EAAE,OAA2B;QAC/D,OAAO,IAAI,0BAA0B,CAAC,IAAI,0CAAiC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAChG,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO;QACT,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;CACJ;AApBD,gEAoBC"}
1
+ {"version":3,"file":"BrowseTheWebWithPlaywright.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,0CAAgD;AAChD,4DAA8C;AAG9C,sCAGmB;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AACH,MAAa,0BAA2B,SAAQ,kBAAgC;IAE5E,MAAM,CAAC,KAAK,CAAC,OAA2B,EAAE,OAA2B;QACjE,OAAO,IAAI,0BAA0B,CAAC,IAAI,6CAAoC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5H,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,IAAqB,EAAE,OAA2B;QAC/D,OAAO,IAAI,0BAA0B,CAAC,IAAI,0CAAiC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAChG,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO;QACT,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;CACJ;AApBD,gEAoBC"}
@@ -4,7 +4,9 @@ import type { PlaywrightOptions } from '../../PlaywrightOptions';
4
4
  import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession';
5
5
  export declare class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession {
6
6
  protected readonly browser: playwright.Browser;
7
- constructor(browser: playwright.Browser, browserContextOptions: PlaywrightOptions);
7
+ private readonly selectors;
8
+ private readonly serenitySelectorEngines;
9
+ constructor(browser: playwright.Browser, browserContextOptions: PlaywrightOptions, selectors: playwright.Selectors);
8
10
  protected createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext>;
9
11
  closeAllPages(): Promise<void>;
10
12
  browserCapabilities(): Promise<BrowserCapabilities>;
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightBrowsingSessionWithBrowser.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,qBAAa,oCAAqC,SAAQ,yBAAyB;IAE3E,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO;gBAA3B,OAAO,EAAE,UAAU,CAAC,OAAO,EAC9C,qBAAqB,EAAE,iBAAiB;cAKzB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;IAIxF,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAOrE"}
1
+ {"version":3,"file":"PlaywrightBrowsingSessionWithBrowser.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,qBAAa,oCAAqC,SAAQ,yBAAyB;IAI3E,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO;IAE9C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL9B,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiC;gBAGlD,OAAO,EAAE,UAAU,CAAC,OAAO,EAC9C,qBAAqB,EAAE,iBAAiB,EACvB,SAAS,EAAE,UAAU,CAAC,SAAS;cAK3B,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;IAM9F,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAOrE"}
@@ -1,13 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PlaywrightBrowsingSessionWithBrowser = void 0;
4
+ const selector_engines_1 = require("../../selector-engines");
4
5
  const PlaywrightBrowsingSession_1 = require("./PlaywrightBrowsingSession");
5
6
  class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession_1.PlaywrightBrowsingSession {
6
- constructor(browser, browserContextOptions) {
7
+ constructor(browser, browserContextOptions, selectors) {
7
8
  super(browserContextOptions);
8
9
  this.browser = browser;
10
+ this.selectors = selectors;
11
+ this.serenitySelectorEngines = new selector_engines_1.SerenitySelectorEngines();
9
12
  }
10
- createBrowserContext(options) {
13
+ async createBrowserContext(options) {
14
+ await this.serenitySelectorEngines.ensureRegisteredWith(this.selectors);
11
15
  return this.browser.newContext(this.browserContextOptions);
12
16
  }
13
17
  async closeAllPages() {
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightBrowsingSessionWithBrowser.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts"],"names":[],"mappings":";;;AAIA,2EAAwE;AAExE,MAAa,oCAAqC,SAAQ,qDAAyB;IAC/E,YACuB,OAA2B,EAC9C,qBAAwC;QAExC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAHV,YAAO,GAAP,OAAO,CAAoB;IAIlD,CAAC;IAEkB,oBAAoB,CAAC,OAA0B;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC/D,CAAC;IAEQ,KAAK,CAAC,aAAa;QACxB,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;QAE5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAEQ,KAAK,CAAC,mBAAmB;QAC9B,OAAO;YACH,WAAW,EAAG,IAAI,CAAC,OAAe,CAAC,YAAY,CAAC,IAAI;YACpD,YAAY,EAAE,OAAO,CAAC,QAAQ;YAC9B,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;SACzC,CAAA;IACL,CAAC;CACJ;AA1BD,oFA0BC"}
1
+ {"version":3,"file":"PlaywrightBrowsingSessionWithBrowser.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts"],"names":[],"mappings":";;;AAIA,6DAAiE;AACjE,2EAAwE;AAExE,MAAa,oCAAqC,SAAQ,qDAAyB;IAG/E,YACuB,OAA2B,EAC9C,qBAAwC,EACvB,SAA+B;QAEhD,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAJV,YAAO,GAAP,OAAO,CAAoB;QAE7B,cAAS,GAAT,SAAS,CAAsB;QALnC,4BAAuB,GAAG,IAAI,0CAAuB,EAAE,CAAC;IAQzE,CAAC;IAEkB,KAAK,CAAC,oBAAoB,CAAC,OAA0B;QACpE,MAAM,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAExE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC/D,CAAC;IAEQ,KAAK,CAAC,aAAa;QACxB,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;QAE5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAEQ,KAAK,CAAC,mBAAmB;QAC9B,OAAO;YACH,WAAW,EAAG,IAAI,CAAC,OAAe,CAAC,YAAY,CAAC,IAAI;YACpD,YAAY,EAAE,OAAO,CAAC,QAAQ;YAC9B,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;SACzC,CAAA;IACL,CAAC;CACJ;AA/BD,oFA+BC"}
@@ -8,6 +8,7 @@ import type * as playwright from 'playwright-core';
8
8
  */
9
9
  export declare class PlaywrightPageElement extends PageElement<playwright.Locator> {
10
10
  of(parent: PageElement<playwright.Locator>): PageElement<playwright.Locator>;
11
+ closestTo(child: PageElement<playwright.Locator>): PageElement<playwright.Locator>;
11
12
  enterValue(value: string | number | Array<string | number>): Promise<void>;
12
13
  clearValue(): Promise<void>;
13
14
  click(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightPageElement.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPageElement.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAKnD;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;IACtE,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;IAItE,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1E,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,aAAa,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7D,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAsB/C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKxC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAKvB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAKxB,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAmCrC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAW5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAW/B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAS7B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAkB9B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;CActC"}
1
+ {"version":3,"file":"PlaywrightPageElement.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPageElement.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAKnD;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;IACtE,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;IAI5E,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;IAI5E,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1E,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,aAAa,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7D,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAsB/C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKxC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAKvB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAKxB,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAmCrC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAW5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAW/B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAS7B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAkB9B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;CActC"}
@@ -37,6 +37,9 @@ class PlaywrightPageElement extends web_1.PageElement {
37
37
  of(parent) {
38
38
  return new PlaywrightPageElement(this.locator.of(parent.locator));
39
39
  }
40
+ closestTo(child) {
41
+ return new PlaywrightPageElement(this.locator.closestTo(child.locator));
42
+ }
40
43
  async enterValue(value) {
41
44
  const text = [].concat(value).join('');
42
45
  const element = await this.nativeElement();
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightPageElement.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPageElement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlaywrightPageElement.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPageElement.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ export declare class PlaywrightLocator extends Locator<playwright.Locator, strin
14
14
  nativeElement(): Promise<playwright.Locator>;
15
15
  allNativeElements(): Promise<Array<playwright.Locator>>;
16
16
  of(parent: PlaywrightRootLocator): Locator<playwright.Locator, string>;
17
+ closestTo(child: PlaywrightLocator): Locator<playwright.Locator, string>;
17
18
  locate(child: PlaywrightLocator): Locator<playwright.Locator, string>;
18
19
  element(): PageElement<playwright.Locator>;
19
20
  allElements(): Promise<Array<PageElement<playwright.Locator>>>;
@@ -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;AAInD,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,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,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"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PlaywrightExistingElementLocator = exports.PlaywrightLocator = void 0;
4
4
  const core_1 = require("@serenity-js/core");
5
5
  const web_1 = require("@serenity-js/web");
6
+ const selector_engines_1 = require("../../../selector-engines");
6
7
  const promised_1 = require("../../promised");
7
8
  const PlaywrightPageElement_1 = require("../PlaywrightPageElement");
8
9
  /**
@@ -67,6 +68,9 @@ class PlaywrightLocator extends web_1.Locator {
67
68
  of(parent) {
68
69
  return new PlaywrightLocator(parent, this.selector);
69
70
  }
71
+ closestTo(child) {
72
+ return new PlaywrightParentElementLocator(this.parent, this.selector, child);
73
+ }
70
74
  locate(child) {
71
75
  return new PlaywrightLocator(this, child.selector);
72
76
  }
@@ -95,4 +99,18 @@ class PlaywrightExistingElementLocator extends PlaywrightLocator {
95
99
  }
96
100
  }
97
101
  exports.PlaywrightExistingElementLocator = PlaywrightExistingElementLocator;
102
+ class PlaywrightParentElementLocator extends PlaywrightLocator {
103
+ constructor(parent, selector, child) {
104
+ super(parent, selector);
105
+ this.child = child;
106
+ }
107
+ async nativeElement() {
108
+ const cssSelector = this.asCssSelector(this.selector);
109
+ const child = await this.child.nativeElement();
110
+ return child.locator(`${selector_engines_1.SerenitySelectorEngines.engineIdOf('closest')}=${cssSelector.value}`);
111
+ }
112
+ async allNativeElements() {
113
+ return [await this.nativeElement()];
114
+ }
115
+ }
98
116
  //# 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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"}
@@ -0,0 +1,5 @@
1
+ export interface PlaywrightSelectorEngine {
2
+ query(root: Element, selector: string): HTMLElement;
3
+ queryAll(root: Element, selector: string): Array<HTMLElement>;
4
+ }
5
+ //# sourceMappingURL=PlaywrightSelectorEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightSelectorEngine.d.ts","sourceRoot":"","sources":["../../src/selector-engines/PlaywrightSelectorEngine.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACrC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;IACpD,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;CACjE"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=PlaywrightSelectorEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightSelectorEngine.js","sourceRoot":"","sources":["../../src/selector-engines/PlaywrightSelectorEngine.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { Selectors } from 'playwright-core';
2
+ /**
3
+ * Utility class responsible for registering custom [Playwright selector engines](https://playwright.dev/docs/extensibility)
4
+ * used internally by Serenity/JS.
5
+ *
6
+ * @internal
7
+ */
8
+ export declare class SerenitySelectorEngines {
9
+ private static isRegistered;
10
+ private static readonly engines;
11
+ ensureRegisteredWith(selectors: Selectors): Promise<void>;
12
+ static engineIdOf(engineName: string): string;
13
+ }
14
+ //# sourceMappingURL=SerenitySelectorEngines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerenitySelectorEngines.d.ts","sourceRoot":"","sources":["../../src/selector-engines/SerenitySelectorEngines.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD;;;;;GAKG;AACH,qBAAa,uBAAuB;IAChC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAS5B;IAEG,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/D,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;CAOhD"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SerenitySelectorEngines = void 0;
4
+ const core_1 = require("@serenity-js/core");
5
+ /**
6
+ * Utility class responsible for registering custom [Playwright selector engines](https://playwright.dev/docs/extensibility)
7
+ * used internally by Serenity/JS.
8
+ *
9
+ * @internal
10
+ */
11
+ class SerenitySelectorEngines {
12
+ async ensureRegisteredWith(selectors) {
13
+ // As of Playwright 1.36.1, Selectors don't offer any inspection mechanism,
14
+ // so invoking `register` twice with the same engine name results in a error.
15
+ // Static `isRegistered` helps to work around that
16
+ // https://github.com/microsoft/playwright/blob/49c1f9eb025d02f8bfc38351592f3466fe8bc242/packages/playwright-core/src/client/selectors.ts
17
+ if (!SerenitySelectorEngines.isRegistered) {
18
+ for (const [engineName, engine] of SerenitySelectorEngines.engines) {
19
+ await selectors.register(engineName, engine, { contentScript: true });
20
+ }
21
+ SerenitySelectorEngines.isRegistered = true;
22
+ }
23
+ }
24
+ static engineIdOf(engineName) {
25
+ const prefixedEngineName = `_sjs_${engineName}`;
26
+ if (!this.engines.has(prefixedEngineName)) {
27
+ throw new core_1.LogicError(`${engineName} is not a valid Serenity/JS Playwright selector engine name. Available engines: ${this.engines.keys()} `);
28
+ }
29
+ return prefixedEngineName;
30
+ }
31
+ }
32
+ exports.SerenitySelectorEngines = SerenitySelectorEngines;
33
+ SerenitySelectorEngines.isRegistered = false;
34
+ SerenitySelectorEngines.engines = new Map(Object.entries({
35
+ _sjs_closest: () => ({
36
+ query: (root, selector) => {
37
+ return root.closest(selector);
38
+ },
39
+ queryAll: (root, selector) => {
40
+ return [root.closest(selector)];
41
+ }
42
+ })
43
+ }));
44
+ //# sourceMappingURL=SerenitySelectorEngines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerenitySelectorEngines.js","sourceRoot":"","sources":["../../src/selector-engines/SerenitySelectorEngines.ts"],"names":[],"mappings":";;;AAAA,4CAA+C;AAK/C;;;;;GAKG;AACH,MAAa,uBAAuB;IAahC,KAAK,CAAC,oBAAoB,CAAC,SAAoB;QAC3C,2EAA2E;QAC3E,6EAA6E;QAC7E,kDAAkD;QAClD,0IAA0I;QAC1I,IAAI,CAAE,uBAAuB,CAAC,YAAY,EAAE;YACxC,KAAK,MAAM,CAAE,UAAU,EAAE,MAAM,CAAE,IAAI,uBAAuB,CAAC,OAAO,EAAE;gBAClE,MAAM,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;aACzE;YACD,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC;SAC/C;IACL,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,UAAkB;QAChC,MAAM,kBAAkB,GAAG,QAAS,UAAW,EAAE,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE;YACvC,MAAM,IAAI,iBAAU,CAAC,GAAI,UAAW,mFAAoF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAG,GAAG,CAAC,CAAC;SACpJ;QACD,OAAO,kBAAkB,CAAC;IAC9B,CAAC;;AAhCL,0DAiCC;AAhCkB,oCAAY,GAAG,KAAK,CAAC;AACZ,+BAAO,GAAgD,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAClG,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QACjB,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;YACtB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QACD,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;YACzB,OAAO,CAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAE,CAAC;QACtC,CAAC;KACJ,CAAC;CACL,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './SerenitySelectorEngines';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/selector-engines/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,18 @@
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("./SerenitySelectorEngines"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/selector-engines/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serenity-js/playwright",
3
- "version": "3.6.1",
3
+ "version": "3.7.1",
4
4
  "description": "Serenity/JS Screenplay Pattern library for Playwright",
5
5
  "author": {
6
6
  "name": "Jan Molak",
@@ -43,9 +43,9 @@
43
43
  "node": "^16.13 || ^18.12 || ^20"
44
44
  },
45
45
  "dependencies": {
46
- "@serenity-js/core": "3.6.1",
47
- "@serenity-js/web": "3.6.1",
48
- "playwright-core": "^1.36.0",
46
+ "@serenity-js/core": "3.7.1",
47
+ "@serenity-js/web": "3.7.1",
48
+ "playwright-core": "^1.36.1",
49
49
  "tiny-types": "^1.20.0"
50
50
  },
51
51
  "devDependencies": {
@@ -58,5 +58,5 @@
58
58
  "ts-node": "^10.9.1",
59
59
  "typescript": "^5.1.6"
60
60
  },
61
- "gitHead": "3e7242840af96081c63d12b116e3f95f74b97160"
61
+ "gitHead": "6a67f2edc2872be27b849402a1109f0944e019bb"
62
62
  }
package/src/index.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './PlaywrightOptions';
2
2
  export * from './screenplay';
3
+ export * from './selector-engines';
@@ -1,6 +1,6 @@
1
1
  import type { Discardable } from '@serenity-js/core';
2
2
  import { BrowseTheWeb } from '@serenity-js/web';
3
- import type * as playwright from 'playwright-core';
3
+ import * as playwright from 'playwright-core';
4
4
 
5
5
  import type { PlaywrightOptions } from '../../PlaywrightOptions';
6
6
  import {
@@ -104,7 +104,7 @@ import {
104
104
  export class BrowseTheWebWithPlaywright extends BrowseTheWeb<playwright.Locator> implements Discardable {
105
105
 
106
106
  static using(browser: playwright.Browser, options?: PlaywrightOptions): BrowseTheWebWithPlaywright {
107
- return new BrowseTheWebWithPlaywright(new PlaywrightBrowsingSessionWithBrowser(browser, options));
107
+ return new BrowseTheWebWithPlaywright(new PlaywrightBrowsingSessionWithBrowser(browser, options, playwright.selectors));
108
108
  }
109
109
 
110
110
  static usingPage(page: playwright.Page, options?: PlaywrightOptions): BrowseTheWebWithPlaywright {
@@ -2,17 +2,23 @@ import type { BrowserCapabilities } from '@serenity-js/web';
2
2
  import type * as playwright from 'playwright-core';
3
3
 
4
4
  import type { PlaywrightOptions } from '../../PlaywrightOptions';
5
+ import { SerenitySelectorEngines } from '../../selector-engines';
5
6
  import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession';
6
7
 
7
8
  export class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession {
9
+ private readonly serenitySelectorEngines = new SerenitySelectorEngines();
10
+
8
11
  constructor(
9
12
  protected readonly browser: playwright.Browser,
10
13
  browserContextOptions: PlaywrightOptions,
14
+ private readonly selectors: playwright.Selectors,
11
15
  ) {
12
16
  super(browserContextOptions);
13
17
  }
14
18
 
15
- protected override createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext> {
19
+ protected override async createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext> {
20
+ await this.serenitySelectorEngines.ensureRegisteredWith(this.selectors);
21
+
16
22
  return this.browser.newContext(this.browserContextOptions);
17
23
  }
18
24
 
@@ -17,6 +17,10 @@ export class PlaywrightPageElement extends PageElement<playwright.Locator> {
17
17
  return new PlaywrightPageElement(this.locator.of(parent.locator));
18
18
  }
19
19
 
20
+ closestTo(child: PageElement<playwright.Locator>): PageElement<playwright.Locator> {
21
+ return new PlaywrightPageElement(this.locator.closestTo(child.locator));
22
+ }
23
+
20
24
  async enterValue(value: string | number | Array<string | number>): Promise<void> {
21
25
  const text = [].concat(value).join('');
22
26
 
@@ -3,6 +3,7 @@ import type { PageElement, RootLocator, Selector } from '@serenity-js/web';
3
3
  import { ByCss, ByCssContainingText, ByDeepCss, ById, ByTagName, ByXPath, Locator } from '@serenity-js/web';
4
4
  import type * as playwright from 'playwright-core';
5
5
 
6
+ import { SerenitySelectorEngines } from '../../../selector-engines';
6
7
  import { promised } from '../../promised';
7
8
  import { PlaywrightPageElement } from '../PlaywrightPageElement';
8
9
  import type { PlaywrightRootLocator } from './PlaywrightRootLocator';
@@ -92,6 +93,10 @@ export class PlaywrightLocator extends Locator<playwright.Locator, string> {
92
93
  return new PlaywrightLocator(parent, this.selector);
93
94
  }
94
95
 
96
+ closestTo(child: PlaywrightLocator): Locator<playwright.Locator, string> {
97
+ return new PlaywrightParentElementLocator(this.parent, this.selector, child);
98
+ }
99
+
95
100
  locate(child: PlaywrightLocator): Locator<playwright.Locator, string> {
96
101
  return new PlaywrightLocator(this, child.selector);
97
102
  }
@@ -135,3 +140,24 @@ export class PlaywrightExistingElementLocator extends PlaywrightLocator {
135
140
  return [ this.existingNativeElement ];
136
141
  }
137
142
  }
143
+
144
+ class PlaywrightParentElementLocator extends PlaywrightLocator {
145
+ constructor(
146
+ parent: RootLocator<playwright.Locator>,
147
+ selector: Selector,
148
+ private readonly child: PlaywrightLocator
149
+ ) {
150
+ super(parent, selector);
151
+ }
152
+
153
+ override async nativeElement(): Promise<playwright.Locator> {
154
+ const cssSelector = this.asCssSelector(this.selector);
155
+ const child = await this.child.nativeElement();
156
+
157
+ return child.locator(`${ SerenitySelectorEngines.engineIdOf('closest') }=${ cssSelector.value }`)
158
+ }
159
+
160
+ async allNativeElements(): Promise<Array<playwright.Locator>> {
161
+ return [ await this.nativeElement() ];
162
+ }
163
+ }
@@ -0,0 +1,4 @@
1
+ export interface PlaywrightSelectorEngine {
2
+ query(root: Element, selector: string): HTMLElement;
3
+ queryAll(root: Element, selector: string): Array<HTMLElement>;
4
+ }
@@ -0,0 +1,45 @@
1
+ import { LogicError } from '@serenity-js/core';
2
+ import type { Selectors } from 'playwright-core';
3
+
4
+ import type { PlaywrightSelectorEngine } from './PlaywrightSelectorEngine';
5
+
6
+ /**
7
+ * Utility class responsible for registering custom [Playwright selector engines](https://playwright.dev/docs/extensibility)
8
+ * used internally by Serenity/JS.
9
+ *
10
+ * @internal
11
+ */
12
+ export class SerenitySelectorEngines {
13
+ private static isRegistered = false;
14
+ private static readonly engines: Map<string, () => PlaywrightSelectorEngine> = new Map(Object.entries({
15
+ _sjs_closest: () => ({
16
+ query: (root, selector) => {
17
+ return root.closest(selector);
18
+ },
19
+ queryAll: (root, selector) => {
20
+ return [ root.closest(selector) ];
21
+ }
22
+ })
23
+ }))
24
+
25
+ async ensureRegisteredWith(selectors: Selectors): Promise<void> {
26
+ // As of Playwright 1.36.1, Selectors don't offer any inspection mechanism,
27
+ // so invoking `register` twice with the same engine name results in a error.
28
+ // Static `isRegistered` helps to work around that
29
+ // https://github.com/microsoft/playwright/blob/49c1f9eb025d02f8bfc38351592f3466fe8bc242/packages/playwright-core/src/client/selectors.ts
30
+ if (! SerenitySelectorEngines.isRegistered) {
31
+ for (const [ engineName, engine ] of SerenitySelectorEngines.engines) {
32
+ await selectors.register(engineName, engine, { contentScript: true });
33
+ }
34
+ SerenitySelectorEngines.isRegistered = true;
35
+ }
36
+ }
37
+
38
+ static engineIdOf(engineName: string): string {
39
+ const prefixedEngineName = `_sjs_${ engineName }`;
40
+ if (!this.engines.has(prefixedEngineName)) {
41
+ throw new LogicError(`${ engineName } is not a valid Serenity/JS Playwright selector engine name. Available engines: ${ this.engines.keys() } `);
42
+ }
43
+ return prefixedEngineName;
44
+ }
45
+ }
@@ -0,0 +1 @@
1
+ export * from './SerenitySelectorEngines';