@serenity-js/playwright 3.6.1 → 3.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.
Files changed (42) hide show
  1. package/CHANGELOG.md +16 -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,22 @@
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.0](https://github.com/serenity-js/serenity-js/compare/v3.6.1...v3.7.0) (2023-07-20)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **deps:** update playwright dependencies to ^1.36.1 ([b86289b](https://github.com/serenity-js/serenity-js/commit/b86289b3f6d703baa9867ad167502de102591545))
12
+
13
+
14
+ ### Features
15
+
16
+ * **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)
17
+
18
+
19
+
20
+
21
+
6
22
  ## [3.6.1](https://github.com/serenity-js/serenity-js/compare/v3.6.0...v3.6.1) (2023-07-11)
7
23
 
8
24
 
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":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA+C;AAE/C,0CAA6D;AAC7D,sEAAwD;AAExD,2CAA+C;AAI/C;;;;GAIG;AACH,MAAa,qBAAsB,SAAQ,iBAA+B;IACtE,EAAE,CAAC,MAAuC;QACtC,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,SAAS,CAAC,KAAsC;QAC5C,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAA+C;QAC5D,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,IAAI;YACA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3C,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC1B;QACD,OAAM,KAAK,EAAE;YACT,MAAM,IAAI,iBAAU,CAAC,iFAAiF,EAAE,KAAK,CAAC,CAAC;SAClH;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,WAAW;QACb,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,cAAc;QAChB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAG,OAA4B;QAC/C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE3C,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CACzC,CAAC;YACG,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;SACtB,CAAC,CACL,CAAC;QAEF,MAAM,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,eAAe;QACjB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE3C,qBAAqB;QACrB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CACvD,CAAC,WAAqC,EAAE,EAAE,CACtC,WAAW,CAAC,GAAG,CAAC,CAAC,UAA6B,EAAE,EAAE;YAC9C,OAAO;gBACH,QAAQ,EAAI,UAAU,CAAC,QAAQ;gBAC/B,QAAQ,EAAI,UAAU,CAAC,QAAQ;gBAC/B,KAAK,EAAO,UAAU,CAAC,KAAK;gBAC5B,KAAK,EAAO,UAAU,CAAC,KAAK;aAC/B,CAAA;QACL,CAAC,CAAC,CACT,CAAC;QACF,oBAAoB;QAEpB,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CACxB,IAAI,kBAAY,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CACjF,CAAC;IACN,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI;QACN,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,CAAqB,2DAA2D;IAC/G,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,IAAI;YACA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,CAAC;YAEpD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;YAE3C,IAAI,KAAK,EAAE;gBACP,MAAM,OAAO,GAAI,IAAI,CAAC,OAA6B,CAAC;gBAEpD,MAAM,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBAE3C,OAAO;oBACH,UAAU,EAAE,KAAK,IAAmB,EAAE;wBAClC,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC;oBACxC,CAAC;iBACJ,CAAA;aACJ;YAED,qBAAqB;YACrB,MAAM,wBAAwB,GAAG,MAAM,aAAa,CAAC,cAAc,CAC/D,CAAC,OAAoB,EAAE,EAAE;gBACrB,MAAM,uBAAuB,GAAG,QAAQ,CAAC,aAAa,CAAC;gBACvD,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,uBAAuB,CAAC;YACnC,CAAC,CACJ,CAAC;YACF,oBAAoB;YAEpB,OAAO,IAAI,gCAAgC,CAAC,wBAAwB,CAAC,CAAC;SACzE;QAAC,OAAM,KAAK,EAAE;YACX,MAAM,IAAI,iBAAU,CAAC,2CAA4C,IAAI,CAAC,OAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;SAC5F;IACL,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,IAAI;YACA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAC,QAAQ,CACnB,OAAO,CAAC,EAAE,CAAC,OAAO,KAAK,QAAQ,CAAC,aAAa,CAChD,CAAC;SACL;QAAC,MAAM;YACJ,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED,KAAK,CAAC,WAAW;QACb,IAAI;YACA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3C,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAErC,OAAO,IAAI,CAAC;SACf;QAAC,MAAM;YACJ,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED,KAAK,CAAC,SAAS;QACX,IAAI;YACA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC;SAC9B;QAAC,MAAM;YACJ,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QAEZ,IAAI;YACA,MAAM,OAAO,GAAuB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAE/D,uBAAuB;YACvB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YACxD,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACnB,OAAO,IAAI,CAAC;aACf;YAED,yEAAyE;YACzE,OAAO,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;SACpC;QAAC,MAAM;YACJ,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED,KAAK,CAAC,SAAS;QACX,IAAI;YACA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAE3C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;YAC5C,IAAI,CAAE,SAAS,EAAE;gBACb,OAAO,KAAK,CAAC;aAChB;YAED,OAAO,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SACpD;QAAC,MAAM;YACJ,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;CACJ;AAvMD,sDAuMC;AAED;;GAEG;AACH,MAAM,gCAAgC;IAClC,YAA6B,IAAyB;QAAzB,SAAI,GAAJ,IAAI,CAAqB;QAClD,IAAA,mBAAM,EAAC,aAAa,EAAE,IAAI,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,qBAAqB;QACrB,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CACpB,CAAC,OAAoB,EAAE,EAAE;YACrB,OAAO,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,EACD,IAAI,CAAC,IAAI,CACZ,CAAC;QACF,oBAAoB;IACxB,CAAC;CACJ"}
@@ -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.0",
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.0",
47
+ "@serenity-js/web": "3.7.0",
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": "9a4da7e6080c3628e69bbf01f0efb3cd4e7b0720"
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';