@serenity-js/playwright 3.41.2 → 3.42.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 (154) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/esm/ExtraBrowserContextOptions.d.ts +36 -0
  3. package/esm/ExtraBrowserContextOptions.d.ts.map +1 -0
  4. package/esm/ExtraBrowserContextOptions.js +2 -0
  5. package/esm/ExtraBrowserContextOptions.js.map +1 -0
  6. package/esm/index.d.ts +4 -0
  7. package/esm/index.d.ts.map +1 -0
  8. package/esm/index.js +4 -0
  9. package/esm/index.js.map +1 -0
  10. package/esm/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts +163 -0
  11. package/esm/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts.map +1 -0
  12. package/esm/screenplay/abilities/BrowseTheWebWithPlaywright.js +168 -0
  13. package/esm/screenplay/abilities/BrowseTheWebWithPlaywright.js.map +1 -0
  14. package/esm/screenplay/abilities/index.d.ts +2 -0
  15. package/esm/screenplay/abilities/index.d.ts.map +1 -0
  16. package/esm/screenplay/abilities/index.js +2 -0
  17. package/esm/screenplay/abilities/index.js.map +1 -0
  18. package/esm/screenplay/index.d.ts +3 -0
  19. package/esm/screenplay/index.d.ts.map +1 -0
  20. package/esm/screenplay/index.js +3 -0
  21. package/esm/screenplay/index.js.map +1 -0
  22. package/esm/screenplay/models/PlaywrightBrowsingSession.d.ts +32 -0
  23. package/esm/screenplay/models/PlaywrightBrowsingSession.d.ts.map +1 -0
  24. package/esm/screenplay/models/PlaywrightBrowsingSession.js +54 -0
  25. package/esm/screenplay/models/PlaywrightBrowsingSession.js.map +1 -0
  26. package/esm/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts +18 -0
  27. package/esm/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts.map +1 -0
  28. package/esm/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js +38 -0
  29. package/esm/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js.map +1 -0
  30. package/esm/screenplay/models/PlaywrightBrowsingSessionWithPage.d.ts +21 -0
  31. package/esm/screenplay/models/PlaywrightBrowsingSessionWithPage.d.ts.map +1 -0
  32. package/esm/screenplay/models/PlaywrightBrowsingSessionWithPage.js +44 -0
  33. package/esm/screenplay/models/PlaywrightBrowsingSessionWithPage.js.map +1 -0
  34. package/esm/screenplay/models/PlaywrightCookie.d.ts +15 -0
  35. package/esm/screenplay/models/PlaywrightCookie.d.ts.map +1 -0
  36. package/esm/screenplay/models/PlaywrightCookie.js +41 -0
  37. package/esm/screenplay/models/PlaywrightCookie.js.map +1 -0
  38. package/esm/screenplay/models/PlaywrightModalDialogHandler.d.ts +19 -0
  39. package/esm/screenplay/models/PlaywrightModalDialogHandler.d.ts.map +1 -0
  40. package/esm/screenplay/models/PlaywrightModalDialogHandler.js +48 -0
  41. package/esm/screenplay/models/PlaywrightModalDialogHandler.js.map +1 -0
  42. package/esm/screenplay/models/PlaywrightPage.d.ts +54 -0
  43. package/esm/screenplay/models/PlaywrightPage.d.ts.map +1 -0
  44. package/esm/screenplay/models/PlaywrightPage.js +190 -0
  45. package/esm/screenplay/models/PlaywrightPage.js.map +1 -0
  46. package/esm/screenplay/models/PlaywrightPageElement.d.ts +33 -0
  47. package/esm/screenplay/models/PlaywrightPageElement.d.ts.map +1 -0
  48. package/esm/screenplay/models/PlaywrightPageElement.js +198 -0
  49. package/esm/screenplay/models/PlaywrightPageElement.js.map +1 -0
  50. package/esm/screenplay/models/index.d.ts +8 -0
  51. package/esm/screenplay/models/index.d.ts.map +1 -0
  52. package/esm/screenplay/models/index.js +8 -0
  53. package/esm/screenplay/models/index.js.map +1 -0
  54. package/esm/screenplay/models/locators/PlaywrightLocator.d.ts +31 -0
  55. package/esm/screenplay/models/locators/PlaywrightLocator.d.ts.map +1 -0
  56. package/esm/screenplay/models/locators/PlaywrightLocator.js +166 -0
  57. package/esm/screenplay/models/locators/PlaywrightLocator.js.map +1 -0
  58. package/esm/screenplay/models/locators/PlaywrightRootLocator.d.ts +39 -0
  59. package/esm/screenplay/models/locators/PlaywrightRootLocator.d.ts.map +1 -0
  60. package/esm/screenplay/models/locators/PlaywrightRootLocator.js +48 -0
  61. package/esm/screenplay/models/locators/PlaywrightRootLocator.js.map +1 -0
  62. package/esm/screenplay/models/locators/index.d.ts +3 -0
  63. package/esm/screenplay/models/locators/index.d.ts.map +1 -0
  64. package/esm/screenplay/models/locators/index.js +3 -0
  65. package/esm/screenplay/models/locators/index.js.map +1 -0
  66. package/esm/screenplay/promised.d.ts +10 -0
  67. package/esm/screenplay/promised.d.ts.map +1 -0
  68. package/esm/screenplay/promised.js +12 -0
  69. package/esm/screenplay/promised.js.map +1 -0
  70. package/esm/selector-engines/PlaywrightSelectorEngine.d.ts +5 -0
  71. package/esm/selector-engines/PlaywrightSelectorEngine.d.ts.map +1 -0
  72. package/esm/selector-engines/PlaywrightSelectorEngine.js +2 -0
  73. package/esm/selector-engines/PlaywrightSelectorEngine.js.map +1 -0
  74. package/esm/selector-engines/SerenitySelectorEngines.d.ts +14 -0
  75. package/esm/selector-engines/SerenitySelectorEngines.d.ts.map +1 -0
  76. package/esm/selector-engines/SerenitySelectorEngines.js +40 -0
  77. package/esm/selector-engines/SerenitySelectorEngines.js.map +1 -0
  78. package/esm/selector-engines/index.d.ts +2 -0
  79. package/esm/selector-engines/index.d.ts.map +1 -0
  80. package/esm/selector-engines/index.js +2 -0
  81. package/esm/selector-engines/index.js.map +1 -0
  82. package/lib/index.d.ts +3 -3
  83. package/lib/index.d.ts.map +1 -1
  84. package/lib/index.js +3 -3
  85. package/lib/index.js.map +1 -1
  86. package/lib/package.json +1 -0
  87. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts +1 -1
  88. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts.map +1 -1
  89. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.js +3 -3
  90. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.js.map +1 -1
  91. package/lib/screenplay/abilities/index.d.ts +1 -1
  92. package/lib/screenplay/abilities/index.d.ts.map +1 -1
  93. package/lib/screenplay/abilities/index.js +1 -1
  94. package/lib/screenplay/abilities/index.js.map +1 -1
  95. package/lib/screenplay/index.d.ts +2 -2
  96. package/lib/screenplay/index.d.ts.map +1 -1
  97. package/lib/screenplay/index.js +2 -2
  98. package/lib/screenplay/index.js.map +1 -1
  99. package/lib/screenplay/models/PlaywrightBrowsingSession.d.ts +3 -3
  100. package/lib/screenplay/models/PlaywrightBrowsingSession.d.ts.map +1 -1
  101. package/lib/screenplay/models/PlaywrightBrowsingSession.js +7 -6
  102. package/lib/screenplay/models/PlaywrightBrowsingSession.js.map +1 -1
  103. package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts +3 -3
  104. package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts.map +1 -1
  105. package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js +2 -2
  106. package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js.map +1 -1
  107. package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.d.ts +3 -3
  108. package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.d.ts.map +1 -1
  109. package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.js +5 -5
  110. package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.js.map +1 -1
  111. package/lib/screenplay/models/PlaywrightPage.d.ts +3 -3
  112. package/lib/screenplay/models/PlaywrightPage.d.ts.map +1 -1
  113. package/lib/screenplay/models/PlaywrightPage.js +11 -11
  114. package/lib/screenplay/models/PlaywrightPage.js.map +1 -1
  115. package/lib/screenplay/models/PlaywrightPageElement.js +1 -1
  116. package/lib/screenplay/models/PlaywrightPageElement.js.map +1 -1
  117. package/lib/screenplay/models/index.d.ts +7 -7
  118. package/lib/screenplay/models/index.d.ts.map +1 -1
  119. package/lib/screenplay/models/index.js +7 -7
  120. package/lib/screenplay/models/index.js.map +1 -1
  121. package/lib/screenplay/models/locators/PlaywrightLocator.d.ts +1 -1
  122. package/lib/screenplay/models/locators/PlaywrightLocator.d.ts.map +1 -1
  123. package/lib/screenplay/models/locators/PlaywrightLocator.js +8 -8
  124. package/lib/screenplay/models/locators/PlaywrightLocator.js.map +1 -1
  125. package/lib/screenplay/models/locators/PlaywrightRootLocator.d.ts +2 -1
  126. package/lib/screenplay/models/locators/PlaywrightRootLocator.d.ts.map +1 -1
  127. package/lib/screenplay/models/locators/PlaywrightRootLocator.js +2 -2
  128. package/lib/screenplay/models/locators/PlaywrightRootLocator.js.map +1 -1
  129. package/lib/screenplay/models/locators/index.d.ts +2 -2
  130. package/lib/screenplay/models/locators/index.d.ts.map +1 -1
  131. package/lib/screenplay/models/locators/index.js +2 -2
  132. package/lib/screenplay/models/locators/index.js.map +1 -1
  133. package/lib/selector-engines/index.d.ts +1 -1
  134. package/lib/selector-engines/index.d.ts.map +1 -1
  135. package/lib/selector-engines/index.js +1 -1
  136. package/lib/selector-engines/index.js.map +1 -1
  137. package/package.json +25 -9
  138. package/src/index.ts +3 -3
  139. package/src/screenplay/abilities/BrowseTheWebWithPlaywright.ts +2 -2
  140. package/src/screenplay/abilities/index.ts +1 -1
  141. package/src/screenplay/index.ts +2 -2
  142. package/src/screenplay/models/PlaywrightBrowsingSession.ts +5 -4
  143. package/src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts +3 -3
  144. package/src/screenplay/models/PlaywrightBrowsingSessionWithPage.ts +4 -4
  145. package/src/screenplay/models/PlaywrightPage.ts +8 -8
  146. package/src/screenplay/models/PlaywrightPageElement.ts +2 -2
  147. package/src/screenplay/models/index.ts +7 -7
  148. package/src/screenplay/models/locators/PlaywrightLocator.ts +4 -4
  149. package/src/screenplay/models/locators/PlaywrightRootLocator.ts +5 -2
  150. package/src/screenplay/models/locators/index.ts +2 -2
  151. package/src/selector-engines/SerenitySelectorEngines.ts +1 -1
  152. package/src/selector-engines/index.ts +1 -1
  153. package/tsconfig-cjs.build.json +18 -0
  154. package/tsconfig-esm.build.json +18 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightBrowsingSessionWithBrowser.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E;;GAEG;AACH,MAAM,OAAO,oCAAqC,SAAQ,yBAAyB;IAGxD;IACA;IAFvB,YACuB,OAA2B,EAC3B,qBAAuD,EAC1E,0BAAsD,EACtD,SAA+B;QAE/B,KAAK,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC;QAL1B,YAAO,GAAP,OAAO,CAAoB;QAC3B,0BAAqB,GAArB,qBAAqB,CAAkC;IAK9E,CAAC;IAEkB,KAAK,CAAC,oBAAoB;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC/D,CAAC;IAEkB,KAAK,CAAC,mBAAmB;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5C,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAExB,iFAAiF;QACjF,iFAAiF;QACjF,8BAA8B;QAE9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEtC,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,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,EAAI,4DAA4D;YACpH,YAAY,EAAE,OAAO,CAAC,QAAQ,EAA0B,gDAAgD;YACxG,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;SACzC,CAAA;IACL,CAAC;CACJ"}
@@ -0,0 +1,21 @@
1
+ import type { BrowserCapabilities } from '@serenity-js/web';
2
+ import type * as playwright from 'playwright-core';
3
+ import type { ExtraBrowserContextOptions } from '../../ExtraBrowserContextOptions.js';
4
+ import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession.js';
5
+ import { PlaywrightPage } from './PlaywrightPage.js';
6
+ /**
7
+ * @group Models
8
+ */
9
+ export declare class PlaywrightBrowsingSessionWithPage extends PlaywrightBrowsingSession {
10
+ protected readonly page: playwright.Page;
11
+ private readonly playwrightManagedPageId;
12
+ constructor(page: playwright.Page, browserContextOptions: ExtraBrowserContextOptions, selectors: playwright.Selectors);
13
+ protected registerCurrentPage(): Promise<PlaywrightPage>;
14
+ protected createBrowserContext(): Promise<playwright.BrowserContext>;
15
+ /**
16
+ * Closes any newly opened pages, leaving only the original one managed by Playwright Test.
17
+ */
18
+ closeAllPages(): Promise<void>;
19
+ browserCapabilities(): Promise<BrowserCapabilities>;
20
+ }
21
+ //# sourceMappingURL=PlaywrightBrowsingSessionWithPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightBrowsingSessionWithPage.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithPage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,qBAAa,iCAAkC,SAAQ,yBAAyB;IAIxE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI;IAH5C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAyC;gBAG1D,IAAI,EAAE,UAAU,CAAC,IAAI,EACxC,qBAAqB,EAAE,0BAA0B,EACjD,SAAS,EAAE,UAAU,CAAC,SAAS;cAKV,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC;cAU9C,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;IAInF;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAQrE"}
@@ -0,0 +1,44 @@
1
+ import { CorrelationId } from '@serenity-js/core/model';
2
+ import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession.js';
3
+ import { PlaywrightPage } from './PlaywrightPage.js';
4
+ /**
5
+ * @group Models
6
+ */
7
+ export class PlaywrightBrowsingSessionWithPage extends PlaywrightBrowsingSession {
8
+ page;
9
+ playwrightManagedPageId = CorrelationId.create();
10
+ constructor(page, browserContextOptions, selectors) {
11
+ super(browserContextOptions, selectors);
12
+ this.page = page;
13
+ }
14
+ async registerCurrentPage() {
15
+ await this.browserContext();
16
+ const playwrightPage = new PlaywrightPage(this, this.page, this.extraBrowserContextOptions, this.playwrightManagedPageId);
17
+ this.register(playwrightPage);
18
+ return playwrightPage;
19
+ }
20
+ async createBrowserContext() {
21
+ return this.page.context();
22
+ }
23
+ /**
24
+ * Closes any newly opened pages, leaving only the original one managed by Playwright Test.
25
+ */
26
+ async closeAllPages() {
27
+ for (const page of this.pages.values()) {
28
+ if (!page.id.equals(this.playwrightManagedPageId)) {
29
+ await page.close();
30
+ }
31
+ }
32
+ this.pages.clear();
33
+ this.currentBrowserPage = undefined;
34
+ }
35
+ async browserCapabilities() {
36
+ const browser = this.page.context().browser();
37
+ return {
38
+ browserName: browser._initializer.name, // todo: raise a PR to Playwright to expose this information
39
+ platformName: process.platform, // todo: get the actual platform from Playwright
40
+ browserVersion: browser.version()
41
+ };
42
+ }
43
+ }
44
+ //# sourceMappingURL=PlaywrightBrowsingSessionWithPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightBrowsingSessionWithPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithPage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAKxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,MAAM,OAAO,iCAAkC,SAAQ,yBAAyB;IAIrD;IAHN,uBAAuB,GAAkB,aAAa,CAAC,MAAM,EAAE,CAAC;IAEjF,YACuB,IAAqB,EACxC,qBAAiD,EACjD,SAA+B;QAE/B,KAAK,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAJrB,SAAI,GAAJ,IAAI,CAAiB;IAK5C,CAAC;IAEkB,KAAK,CAAC,mBAAmB;QACxC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAE1H,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAE9B,OAAO,cAAc,CAAC;IAC1B,CAAC;IAEkB,KAAK,CAAC,oBAAoB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACf,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,IAAI,CAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;QACL,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;IACxC,CAAC;IAEQ,KAAK,CAAC,mBAAmB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;QAC9C,OAAO;YACH,WAAW,EAAG,OAAe,CAAC,YAAY,CAAC,IAAI,EAAI,4DAA4D;YAC/G,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAqB,gDAAgD;YACnG,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE;SACpC,CAAA;IACL,CAAC;CACJ"}
@@ -0,0 +1,15 @@
1
+ import type { CookieData } from '@serenity-js/web';
2
+ import { Cookie } from '@serenity-js/web';
3
+ import type * as playwright from 'playwright-core';
4
+ /**
5
+ * Playwright-specific implementation of [`Cookie`](https://serenity-js.org/api/web/class/Cookie/).
6
+ *
7
+ * @group Models
8
+ */
9
+ export declare class PlaywrightCookie extends Cookie {
10
+ private readonly context;
11
+ constructor(context: playwright.BrowserContext, cookieName: string);
12
+ delete(): Promise<void>;
13
+ protected read(): Promise<CookieData>;
14
+ }
15
+ //# sourceMappingURL=PlaywrightCookie.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightCookie.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightCookie.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAsB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAGnD;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,MAAM;IAGpC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,UAAU,CAAC,cAAc,EACnD,UAAU,EAAE,MAAM;IAMhB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;cASb,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;CAqB9C"}
@@ -0,0 +1,41 @@
1
+ import { Timestamp } from '@serenity-js/core';
2
+ import { Cookie, CookieMissingError } from '@serenity-js/web';
3
+ import { ensure, isDefined } from 'tiny-types';
4
+ /**
5
+ * Playwright-specific implementation of [`Cookie`](https://serenity-js.org/api/web/class/Cookie/).
6
+ *
7
+ * @group Models
8
+ */
9
+ export class PlaywrightCookie extends Cookie {
10
+ context;
11
+ constructor(context, cookieName) {
12
+ super(cookieName);
13
+ this.context = context;
14
+ ensure('context', context, isDefined());
15
+ }
16
+ async delete() {
17
+ // see https://github.com/microsoft/playwright/issues/10143
18
+ const cookies = await this.context.cookies();
19
+ await this.context.clearCookies();
20
+ await this.context.addCookies(cookies.filter(cookie => cookie.name !== this.cookieName));
21
+ }
22
+ async read() {
23
+ const cookies = await this.context.cookies();
24
+ const found = cookies.find(cookie => cookie.name === this.cookieName);
25
+ if (!found) {
26
+ throw new CookieMissingError(`Cookie '${this.cookieName}' not set`);
27
+ }
28
+ return {
29
+ name: found.name,
30
+ value: found.value,
31
+ domain: found.domain,
32
+ path: found.path,
33
+ expiry: typeof found.expires === 'number' && found.expires >= 0
34
+ ? Timestamp.fromTimestampInSeconds(Math.round(found.expires))
35
+ : undefined,
36
+ httpOnly: found.httpOnly,
37
+ secure: found.secure,
38
+ };
39
+ }
40
+ }
41
+ //# sourceMappingURL=PlaywrightCookie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightCookie.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightCookie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,MAAM;IAGnB;IADrB,YACqB,OAAkC,EACnD,UAAkB;QAElB,KAAK,CAAC,UAAU,CAAC,CAAC;QAHD,YAAO,GAAP,OAAO,CAA2B;QAInD,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM;QACR,2DAA2D;QAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CACzB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAC5D,CAAC;IACN,CAAC;IAES,KAAK,CAAC,IAAI;QAChB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAE7C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtE,IAAI,CAAE,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,kBAAkB,CAAC,WAAY,IAAI,CAAC,UAAW,WAAW,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO;YACH,IAAI,EAAQ,KAAK,CAAC,IAAI;YACtB,KAAK,EAAO,KAAK,CAAC,KAAK;YACvB,MAAM,EAAM,KAAK,CAAC,MAAM;YACxB,IAAI,EAAQ,KAAK,CAAC,IAAI;YACtB,MAAM,EAAM,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC;gBAC/D,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7D,CAAC,CAAC,SAAS;YACf,QAAQ,EAAI,KAAK,CAAC,QAAQ;YAC1B,MAAM,EAAM,KAAK,CAAC,MAAM;SAC3B,CAAA;IACL,CAAC;CACJ"}
@@ -0,0 +1,19 @@
1
+ import { ModalDialogHandler } from '@serenity-js/web';
2
+ import type * as playwright from 'playwright-core';
3
+ /**
4
+ * Playwright-specific implementation of [`ModalDialogHandler`](https://serenity-js.org/api/web/class/ModalDialogHandler/).
5
+ *
6
+ * @group Models
7
+ */
8
+ export declare class PlaywrightModalDialogHandler extends ModalDialogHandler {
9
+ private readonly page;
10
+ private readonly defaultHandler;
11
+ private currentHandler;
12
+ constructor(page: playwright.Page);
13
+ acceptNext(): Promise<void>;
14
+ acceptNextWithValue(text: string | number): Promise<void>;
15
+ dismissNext(): Promise<void>;
16
+ reset(): Promise<void>;
17
+ discard(): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=PlaywrightModalDialogHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightModalDialogHandler.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightModalDialogHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAgE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACpH,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD;;;;GAIG;AACH,qBAAa,4BAA6B,SAAQ,kBAAkB;IAUpD,OAAO,CAAC,QAAQ,CAAC,IAAI;IARjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAI1B;IAEL,OAAO,CAAC,cAAc,CAAsD;gBAE/C,IAAI,EAAE,UAAU,CAAC,IAAI;IAU5C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGjC"}
@@ -0,0 +1,48 @@
1
+ import { AbsentModalDialog, AcceptedModalDialog, DismissedModalDialog, ModalDialogHandler } from '@serenity-js/web';
2
+ /**
3
+ * Playwright-specific implementation of [`ModalDialogHandler`](https://serenity-js.org/api/web/class/ModalDialogHandler/).
4
+ *
5
+ * @group Models
6
+ */
7
+ export class PlaywrightModalDialogHandler extends ModalDialogHandler {
8
+ page;
9
+ defaultHandler = async (dialog) => {
10
+ await dialog.dismiss();
11
+ return new DismissedModalDialog(dialog.message());
12
+ };
13
+ currentHandler;
14
+ constructor(page) {
15
+ super();
16
+ this.page = page;
17
+ this.currentHandler = this.defaultHandler;
18
+ this.page.on('dialog', async (dialog) => {
19
+ this.modalDialog = await this.currentHandler(dialog);
20
+ });
21
+ }
22
+ async acceptNext() {
23
+ this.currentHandler = async (dialog) => {
24
+ await dialog.accept(dialog.defaultValue());
25
+ return new AcceptedModalDialog(dialog.message());
26
+ };
27
+ }
28
+ async acceptNextWithValue(text) {
29
+ this.currentHandler = async (dialog) => {
30
+ await dialog.accept(String(text));
31
+ return new AcceptedModalDialog(dialog.message());
32
+ };
33
+ }
34
+ async dismissNext() {
35
+ this.currentHandler = async (dialog) => {
36
+ await dialog.dismiss();
37
+ return new DismissedModalDialog(dialog.message());
38
+ };
39
+ }
40
+ async reset() {
41
+ this.modalDialog = new AbsentModalDialog();
42
+ this.currentHandler = this.defaultHandler;
43
+ }
44
+ async discard() {
45
+ this.page.off('dialog', this.currentHandler);
46
+ }
47
+ }
48
+ //# sourceMappingURL=PlaywrightModalDialogHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightModalDialogHandler.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightModalDialogHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGpH;;;;GAIG;AACH,MAAM,OAAO,4BAA6B,SAAQ,kBAAkB;IAUnC;IARZ,cAAc,GAC3B,KAAK,EAAE,MAAyB,EAAE,EAAE;QAChC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC,CAAA;IAEG,cAAc,CAAsD;IAE5E,YAA6B,IAAqB;QAC9C,KAAK,EAAE,CAAC;QADiB,SAAI,GAAJ,IAAI,CAAiB;QAG9C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAE1C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;YACvD,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,MAAyB,EAAE,EAAE;YACtD,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YAC3C,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAqB;QAC3C,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,MAAyB,EAAE,EAAE;YACtD,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAClC,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,WAAW;QACb,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,MAAyB,EAAE,EAAE;YACtD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO;QACT,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;CACJ"}
@@ -0,0 +1,54 @@
1
+ import { URL } from 'node:url';
2
+ import { type QuestionAdapter } from '@serenity-js/core';
3
+ import type { CorrelationId } from '@serenity-js/core/model';
4
+ import type { Cookie, CookieData, PageElements, Selector } from '@serenity-js/web';
5
+ import { Key, Page, PageElement } from '@serenity-js/web';
6
+ import type * as playwright from 'playwright-core';
7
+ import type { ExtraBrowserContextOptions } from '../../ExtraBrowserContextOptions.js';
8
+ import type { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession.js';
9
+ /**
10
+ * Playwright-specific implementation of [`Page`](https://serenity-js.org/api/web/class/Page/).
11
+ *
12
+ * @group Models
13
+ */
14
+ export declare class PlaywrightPage extends Page<playwright.Locator> {
15
+ private readonly page;
16
+ private readonly options;
17
+ private lastScriptExecutionSummary;
18
+ private dehydrator;
19
+ static current(): QuestionAdapter<PlaywrightPage>;
20
+ constructor(session: PlaywrightBrowsingSession, page: playwright.Page, options: Partial<Pick<ExtraBrowserContextOptions, 'defaultNavigationWaitUntil'>>, pageId: CorrelationId);
21
+ createPageElement(nativeElement: playwright.Locator): PageElement<playwright.Locator>;
22
+ locate(selector: Selector): PageElement<playwright.Locator>;
23
+ locateAll(selector: Selector): PageElements<playwright.Locator>;
24
+ navigateTo(destination: string): Promise<void>;
25
+ navigateBack(): Promise<void>;
26
+ navigateForward(): Promise<void>;
27
+ reload(): Promise<void>;
28
+ sendKeys(keys: (string | Key)[]): Promise<void>;
29
+ executeScript<Result, InnerArguments extends any[]>(script: string | ((...parameters: InnerArguments) => Result), ...args: InnerArguments): Promise<Result>;
30
+ executeAsyncScript<Result, InnerArguments extends any[]>(script: string | ((...args: [...parameters: InnerArguments, callback: (result: Result) => void]) => void), ...args: InnerArguments): Promise<Result>;
31
+ lastScriptExecutionResult<Result = any>(): Result;
32
+ takeScreenshot(): Promise<string>;
33
+ cookie(name: string): Promise<Cookie>;
34
+ setCookie(cookieData: CookieData): Promise<void>;
35
+ deleteAllCookies(): Promise<void>;
36
+ title(): Promise<string>;
37
+ name(): Promise<string>;
38
+ url(): Promise<URL>;
39
+ viewportSize(): Promise<{
40
+ width: number;
41
+ height: number;
42
+ }>;
43
+ setViewportSize(size: {
44
+ width: number;
45
+ height: number;
46
+ }): Promise<void>;
47
+ close(): Promise<void>;
48
+ closeOthers(): Promise<void>;
49
+ isPresent(): Promise<boolean>;
50
+ nativePage(): Promise<playwright.Page>;
51
+ private resetState;
52
+ private currentFrame;
53
+ }
54
+ //# sourceMappingURL=PlaywrightPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightPage.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ import { URL } from 'node:url';
2
+ import { List, LogicError } from '@serenity-js/core';
3
+ import { ArgumentDehydrator, BrowserWindowClosedError, ByDeepCss, Key, Page, PageElement, PageElementsLocator } from '@serenity-js/web';
4
+ import * as scripts from '@serenity-js/web/scripts';
5
+ import { promised } from '../promised.js';
6
+ import { PlaywrightExistingElementLocator, PlaywrightLocator, PlaywrightRootLocator } from './locators/index.js';
7
+ import { PlaywrightModalDialogHandler } from './PlaywrightModalDialogHandler.js';
8
+ import { PlaywrightPageElement } from './PlaywrightPageElement.js';
9
+ /**
10
+ * Playwright-specific implementation of [`Page`](https://serenity-js.org/api/web/class/Page/).
11
+ *
12
+ * @group Models
13
+ */
14
+ export class PlaywrightPage extends Page {
15
+ page;
16
+ options;
17
+ lastScriptExecutionSummary;
18
+ dehydrator = new ArgumentDehydrator((item) => item instanceof PageElement, async (item) => {
19
+ const nativeElement = await item.nativeElement();
20
+ return nativeElement.elementHandle();
21
+ });
22
+ static current() {
23
+ return super.current();
24
+ }
25
+ constructor(session, page, options, pageId) {
26
+ super(session, new PlaywrightRootLocator(page), new PlaywrightModalDialogHandler(page), pageId);
27
+ this.page = page;
28
+ this.options = options;
29
+ }
30
+ createPageElement(nativeElement) {
31
+ return new PlaywrightPageElement(new PlaywrightExistingElementLocator(this.rootLocator, new ByDeepCss(nativeElement._selector), nativeElement));
32
+ }
33
+ locate(selector) {
34
+ return new PlaywrightPageElement(new PlaywrightLocator(this.rootLocator, selector));
35
+ }
36
+ locateAll(selector) {
37
+ return List.of(new PageElementsLocator(new PlaywrightLocator(this.rootLocator, selector)));
38
+ }
39
+ async navigateTo(destination) {
40
+ await this.page.goto(destination, { waitUntil: this.options?.defaultNavigationWaitUntil });
41
+ await this.resetState();
42
+ }
43
+ async navigateBack() {
44
+ await this.page.goBack({ waitUntil: this.options?.defaultNavigationWaitUntil });
45
+ await this.resetState();
46
+ }
47
+ async navigateForward() {
48
+ await this.page.goForward({ waitUntil: this.options?.defaultNavigationWaitUntil });
49
+ await this.resetState();
50
+ }
51
+ async reload() {
52
+ await this.page.reload({ waitUntil: this.options?.defaultNavigationWaitUntil });
53
+ await this.resetState();
54
+ }
55
+ async sendKeys(keys) {
56
+ const keySequence = keys.map(key => {
57
+ if (!Key.isKey(key)) {
58
+ return key;
59
+ }
60
+ return key.devtoolsName;
61
+ });
62
+ await this.page.keyboard.press(keySequence.join('+'));
63
+ }
64
+ async executeScript(script, ...args) {
65
+ const serialisedScript = typeof script === 'function'
66
+ ? String(script)
67
+ : String(`function script() { ${script} }`);
68
+ const executableScript = new Function(`
69
+ const parameters = (${scripts.rehydrate}).apply(null, arguments[0]);
70
+ return (${serialisedScript}).apply(null, parameters);
71
+ `);
72
+ const dehydratedArguments = await this.dehydrator.dehydrate(args);
73
+ const result = await this.rootLocator.evaluate(executableScript, dehydratedArguments);
74
+ this.lastScriptExecutionSummary = new LastScriptExecutionSummary(result);
75
+ return result;
76
+ }
77
+ async executeAsyncScript(script, ...args) {
78
+ const serialisedScript = typeof script === 'function'
79
+ ? String(script)
80
+ : String(`function script() { ${script} }`);
81
+ const executableScript = new Function(`
82
+ const parameters = (${scripts.rehydrate}).apply(null, arguments[0]);
83
+
84
+ return new Promise((resolve, reject) => {
85
+ try {
86
+ return (${serialisedScript}).apply(null, parameters.concat(resolve));
87
+ } catch (error) {
88
+ return reject(error);
89
+ }
90
+ })
91
+ `);
92
+ const dehydratedArguments = await this.dehydrator.dehydrate(args);
93
+ const result = await this.rootLocator.evaluate(executableScript, dehydratedArguments);
94
+ this.lastScriptExecutionSummary = new LastScriptExecutionSummary(result);
95
+ return result;
96
+ }
97
+ lastScriptExecutionResult() {
98
+ if (!this.lastScriptExecutionSummary) {
99
+ throw new LogicError(`Make sure to execute a script before checking on the result`);
100
+ }
101
+ return this.lastScriptExecutionSummary.result;
102
+ }
103
+ async takeScreenshot() {
104
+ try {
105
+ const screenshot = await this.page.screenshot();
106
+ return screenshot.toString('base64');
107
+ }
108
+ catch (error) {
109
+ if (error?.message.includes('Target page, context or browser has been closed')) {
110
+ throw new BrowserWindowClosedError(`Couldn't take screenshot since the browser window is already closed`, error);
111
+ }
112
+ throw error;
113
+ }
114
+ }
115
+ async cookie(name) {
116
+ return this.session.cookie(name);
117
+ }
118
+ async setCookie(cookieData) {
119
+ const url = await this.page.url();
120
+ const cookie = {
121
+ name: cookieData.name,
122
+ value: cookieData.value,
123
+ domain: cookieData.domain,
124
+ path: cookieData.path,
125
+ url: !(cookieData.domain && cookieData.path)
126
+ ? url
127
+ : undefined,
128
+ secure: cookieData.secure,
129
+ httpOnly: cookieData.httpOnly,
130
+ expires: cookieData.expiry
131
+ ? cookieData.expiry.toSeconds()
132
+ : undefined,
133
+ sameSite: cookieData.sameSite,
134
+ };
135
+ return this.session.setCookie(cookie);
136
+ }
137
+ async deleteAllCookies() {
138
+ await this.session.deleteAllCookies();
139
+ }
140
+ async title() {
141
+ const currentFrame = await this.currentFrame();
142
+ return currentFrame.title();
143
+ }
144
+ async name() {
145
+ const currentFrame = await this.currentFrame();
146
+ return currentFrame.evaluate(() => window.name);
147
+ }
148
+ async url() {
149
+ const currentFrame = await this.currentFrame();
150
+ return new URL(currentFrame.url());
151
+ }
152
+ async viewportSize() {
153
+ return this.page.viewportSize();
154
+ }
155
+ async setViewportSize(size) {
156
+ await this.page.setViewportSize(size);
157
+ }
158
+ async close() {
159
+ await this.resetState();
160
+ await this.modalDialogHandler.discard();
161
+ await this.page.close();
162
+ }
163
+ async closeOthers() {
164
+ await this.session.closePagesOtherThan(this);
165
+ }
166
+ isPresent() {
167
+ return promised(!this.page.isClosed());
168
+ }
169
+ async nativePage() {
170
+ return promised(this.page);
171
+ }
172
+ async resetState() {
173
+ this.lastScriptExecutionSummary = undefined;
174
+ await this.rootLocator.switchToMainFrame();
175
+ await this.modalDialogHandler.reset();
176
+ }
177
+ async currentFrame() {
178
+ return await this.rootLocator.nativeElement();
179
+ }
180
+ }
181
+ /**
182
+ * @package
183
+ */
184
+ class LastScriptExecutionSummary {
185
+ result;
186
+ constructor(result) {
187
+ this.result = result;
188
+ }
189
+ }
190
+ //# sourceMappingURL=PlaywrightPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { SwitchableOrigin } from '@serenity-js/web';
2
+ import { PageElement, SelectOption } from '@serenity-js/web';
3
+ import type * as playwright from 'playwright-core';
4
+ /**
5
+ * Playwright-specific implementation of [`PageElement`](https://serenity-js.org/api/web/class/PageElement/).
6
+ *
7
+ * @group Models
8
+ */
9
+ export declare class PlaywrightPageElement extends PageElement<playwright.Locator> {
10
+ of(parent: PageElement<playwright.Locator>): PageElement<playwright.Locator>;
11
+ closestTo(child: PageElement<playwright.Locator>): PageElement<playwright.Locator>;
12
+ enterValue(value: string | number | Array<string | number>): Promise<void>;
13
+ clearValue(): Promise<void>;
14
+ click(): Promise<void>;
15
+ doubleClick(): Promise<void>;
16
+ scrollIntoView(): Promise<void>;
17
+ hoverOver(): Promise<void>;
18
+ rightClick(): Promise<void>;
19
+ selectOptions(...options: Array<SelectOption>): Promise<void>;
20
+ selectedOptions(): Promise<Array<SelectOption>>;
21
+ dragTo(destination: PageElement<playwright.Locator>): Promise<void>;
22
+ attribute(name: string): Promise<string>;
23
+ text(): Promise<string>;
24
+ value(): Promise<string>;
25
+ html(): Promise<string>;
26
+ switchTo(): Promise<SwitchableOrigin>;
27
+ isActive(): Promise<boolean>;
28
+ isClickable(): Promise<boolean>;
29
+ isEnabled(): Promise<boolean>;
30
+ isSelected(): Promise<boolean>;
31
+ isVisible(): Promise<boolean>;
32
+ }
33
+ //# sourceMappingURL=PlaywrightPageElement.d.ts.map
@@ -0,0 +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;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,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnE,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,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAKvB,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"}