@serenity-js/webdriverio-8 3.31.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 (285) hide show
  1. package/CHANGELOG.md +1232 -0
  2. package/LICENSE.md +201 -0
  3. package/NOTICE.md +1 -0
  4. package/README.md +234 -0
  5. package/esm/adapter/TestRunnerLoader.d.ts +17 -0
  6. package/esm/adapter/TestRunnerLoader.d.ts.map +1 -0
  7. package/esm/adapter/TestRunnerLoader.js +63 -0
  8. package/esm/adapter/TestRunnerLoader.js.map +1 -0
  9. package/esm/adapter/WebdriverIOFrameworkAdapter.d.ts +25 -0
  10. package/esm/adapter/WebdriverIOFrameworkAdapter.d.ts.map +1 -0
  11. package/esm/adapter/WebdriverIOFrameworkAdapter.js +90 -0
  12. package/esm/adapter/WebdriverIOFrameworkAdapter.js.map +1 -0
  13. package/esm/adapter/WebdriverIOFrameworkAdapterFactory.d.ts +18 -0
  14. package/esm/adapter/WebdriverIOFrameworkAdapterFactory.d.ts.map +1 -0
  15. package/esm/adapter/WebdriverIOFrameworkAdapterFactory.js +18 -0
  16. package/esm/adapter/WebdriverIOFrameworkAdapterFactory.js.map +1 -0
  17. package/esm/adapter/WebdriverIONotifier.d.ts +71 -0
  18. package/esm/adapter/WebdriverIONotifier.d.ts.map +1 -0
  19. package/esm/adapter/WebdriverIONotifier.js +390 -0
  20. package/esm/adapter/WebdriverIONotifier.js.map +1 -0
  21. package/esm/adapter/index.d.ts +2 -0
  22. package/esm/adapter/index.d.ts.map +1 -0
  23. package/esm/adapter/index.js +2 -0
  24. package/esm/adapter/index.js.map +1 -0
  25. package/esm/adapter/reporter/BrowserCapabilitiesReporter.d.ts +18 -0
  26. package/esm/adapter/reporter/BrowserCapabilitiesReporter.d.ts.map +1 -0
  27. package/esm/adapter/reporter/BrowserCapabilitiesReporter.js +42 -0
  28. package/esm/adapter/reporter/BrowserCapabilitiesReporter.js.map +1 -0
  29. package/esm/adapter/reporter/InitialisesReporters.d.ts +8 -0
  30. package/esm/adapter/reporter/InitialisesReporters.d.ts.map +1 -0
  31. package/esm/adapter/reporter/InitialisesReporters.js +2 -0
  32. package/esm/adapter/reporter/InitialisesReporters.js.map +1 -0
  33. package/esm/adapter/reporter/OutputStreamBuffer.d.ts +13 -0
  34. package/esm/adapter/reporter/OutputStreamBuffer.d.ts.map +1 -0
  35. package/esm/adapter/reporter/OutputStreamBuffer.js +25 -0
  36. package/esm/adapter/reporter/OutputStreamBuffer.js.map +1 -0
  37. package/esm/adapter/reporter/OutputStreamBufferPrinter.d.ts +16 -0
  38. package/esm/adapter/reporter/OutputStreamBufferPrinter.d.ts.map +1 -0
  39. package/esm/adapter/reporter/OutputStreamBufferPrinter.js +24 -0
  40. package/esm/adapter/reporter/OutputStreamBufferPrinter.js.map +1 -0
  41. package/esm/adapter/reporter/ProvidesWriteStream.d.ts +8 -0
  42. package/esm/adapter/reporter/ProvidesWriteStream.d.ts.map +1 -0
  43. package/esm/adapter/reporter/ProvidesWriteStream.js +2 -0
  44. package/esm/adapter/reporter/ProvidesWriteStream.js.map +1 -0
  45. package/esm/adapter/reporter/TagPrinter.d.ts +17 -0
  46. package/esm/adapter/reporter/TagPrinter.d.ts.map +1 -0
  47. package/esm/adapter/reporter/TagPrinter.js +52 -0
  48. package/esm/adapter/reporter/TagPrinter.js.map +1 -0
  49. package/esm/adapter/reporter/index.d.ts +6 -0
  50. package/esm/adapter/reporter/index.d.ts.map +1 -0
  51. package/esm/adapter/reporter/index.js +6 -0
  52. package/esm/adapter/reporter/index.js.map +1 -0
  53. package/esm/api.d.ts +3 -0
  54. package/esm/api.d.ts.map +1 -0
  55. package/esm/api.js +2 -0
  56. package/esm/api.js.map +1 -0
  57. package/esm/config/WebdriverIOConfig.d.ts +95 -0
  58. package/esm/config/WebdriverIOConfig.d.ts.map +1 -0
  59. package/esm/config/WebdriverIOConfig.js +2 -0
  60. package/esm/config/WebdriverIOConfig.js.map +1 -0
  61. package/esm/config/index.d.ts +2 -0
  62. package/esm/config/index.d.ts.map +1 -0
  63. package/esm/config/index.js +2 -0
  64. package/esm/config/index.js.map +1 -0
  65. package/esm/index.d.ts +16 -0
  66. package/esm/index.d.ts.map +1 -0
  67. package/esm/index.js +14 -0
  68. package/esm/index.js.map +1 -0
  69. package/esm/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts +40 -0
  70. package/esm/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts.map +1 -0
  71. package/esm/screenplay/abilities/BrowseTheWebWithWebdriverIO.js +43 -0
  72. package/esm/screenplay/abilities/BrowseTheWebWithWebdriverIO.js.map +1 -0
  73. package/esm/screenplay/abilities/index.d.ts +2 -0
  74. package/esm/screenplay/abilities/index.d.ts.map +1 -0
  75. package/esm/screenplay/abilities/index.js +2 -0
  76. package/esm/screenplay/abilities/index.js.map +1 -0
  77. package/esm/screenplay/index.d.ts +3 -0
  78. package/esm/screenplay/index.d.ts.map +1 -0
  79. package/esm/screenplay/index.js +3 -0
  80. package/esm/screenplay/index.js.map +1 -0
  81. package/esm/screenplay/models/WebdriverIOBrowsingSession.d.ts +25 -0
  82. package/esm/screenplay/models/WebdriverIOBrowsingSession.d.ts.map +1 -0
  83. package/esm/screenplay/models/WebdriverIOBrowsingSession.js +125 -0
  84. package/esm/screenplay/models/WebdriverIOBrowsingSession.js.map +1 -0
  85. package/esm/screenplay/models/WebdriverIOCookie.d.ts +15 -0
  86. package/esm/screenplay/models/WebdriverIOCookie.d.ts.map +1 -0
  87. package/esm/screenplay/models/WebdriverIOCookie.js +42 -0
  88. package/esm/screenplay/models/WebdriverIOCookie.js.map +1 -0
  89. package/esm/screenplay/models/WebdriverIOErrorHandler.d.ts +9 -0
  90. package/esm/screenplay/models/WebdriverIOErrorHandler.d.ts.map +1 -0
  91. package/esm/screenplay/models/WebdriverIOErrorHandler.js +20 -0
  92. package/esm/screenplay/models/WebdriverIOErrorHandler.js.map +1 -0
  93. package/esm/screenplay/models/WebdriverIOModalDialogHandler.d.ts +27 -0
  94. package/esm/screenplay/models/WebdriverIOModalDialogHandler.d.ts.map +1 -0
  95. package/esm/screenplay/models/WebdriverIOModalDialogHandler.js +74 -0
  96. package/esm/screenplay/models/WebdriverIOModalDialogHandler.js.map +1 -0
  97. package/esm/screenplay/models/WebdriverIOPage.d.ts +50 -0
  98. package/esm/screenplay/models/WebdriverIOPage.d.ts.map +1 -0
  99. package/esm/screenplay/models/WebdriverIOPage.js +219 -0
  100. package/esm/screenplay/models/WebdriverIOPage.js.map +1 -0
  101. package/esm/screenplay/models/WebdriverIOPageElement.d.ts +34 -0
  102. package/esm/screenplay/models/WebdriverIOPageElement.d.ts.map +1 -0
  103. package/esm/screenplay/models/WebdriverIOPageElement.js +220 -0
  104. package/esm/screenplay/models/WebdriverIOPageElement.js.map +1 -0
  105. package/esm/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.d.ts +30 -0
  106. package/esm/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.d.ts.map +1 -0
  107. package/esm/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.js +77 -0
  108. package/esm/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.js.map +1 -0
  109. package/esm/screenplay/models/WebdriverProtocolErrorCode.d.ts +39 -0
  110. package/esm/screenplay/models/WebdriverProtocolErrorCode.d.ts.map +1 -0
  111. package/esm/screenplay/models/WebdriverProtocolErrorCode.js +40 -0
  112. package/esm/screenplay/models/WebdriverProtocolErrorCode.js.map +1 -0
  113. package/esm/screenplay/models/index.d.ts +5 -0
  114. package/esm/screenplay/models/index.d.ts.map +1 -0
  115. package/esm/screenplay/models/index.js +5 -0
  116. package/esm/screenplay/models/index.js.map +1 -0
  117. package/esm/screenplay/models/locators/WebdriverIOLocator.d.ts +33 -0
  118. package/esm/screenplay/models/locators/WebdriverIOLocator.d.ts.map +1 -0
  119. package/esm/screenplay/models/locators/WebdriverIOLocator.js +123 -0
  120. package/esm/screenplay/models/locators/WebdriverIOLocator.js.map +1 -0
  121. package/esm/screenplay/models/locators/WebdriverIORootLocator.d.ts +17 -0
  122. package/esm/screenplay/models/locators/WebdriverIORootLocator.d.ts.map +1 -0
  123. package/esm/screenplay/models/locators/WebdriverIORootLocator.js +30 -0
  124. package/esm/screenplay/models/locators/WebdriverIORootLocator.js.map +1 -0
  125. package/esm/screenplay/models/locators/index.d.ts +3 -0
  126. package/esm/screenplay/models/locators/index.d.ts.map +1 -0
  127. package/esm/screenplay/models/locators/index.js +3 -0
  128. package/esm/screenplay/models/locators/index.js.map +1 -0
  129. package/lib/adapter/TestRunnerLoader.d.ts +17 -0
  130. package/lib/adapter/TestRunnerLoader.d.ts.map +1 -0
  131. package/lib/adapter/TestRunnerLoader.js +67 -0
  132. package/lib/adapter/TestRunnerLoader.js.map +1 -0
  133. package/lib/adapter/WebdriverIOFrameworkAdapter.d.ts +25 -0
  134. package/lib/adapter/WebdriverIOFrameworkAdapter.d.ts.map +1 -0
  135. package/lib/adapter/WebdriverIOFrameworkAdapter.js +127 -0
  136. package/lib/adapter/WebdriverIOFrameworkAdapter.js.map +1 -0
  137. package/lib/adapter/WebdriverIOFrameworkAdapterFactory.d.ts +18 -0
  138. package/lib/adapter/WebdriverIOFrameworkAdapterFactory.d.ts.map +1 -0
  139. package/lib/adapter/WebdriverIOFrameworkAdapterFactory.js +22 -0
  140. package/lib/adapter/WebdriverIOFrameworkAdapterFactory.js.map +1 -0
  141. package/lib/adapter/WebdriverIONotifier.d.ts +71 -0
  142. package/lib/adapter/WebdriverIONotifier.d.ts.map +1 -0
  143. package/lib/adapter/WebdriverIONotifier.js +394 -0
  144. package/lib/adapter/WebdriverIONotifier.js.map +1 -0
  145. package/lib/adapter/index.d.ts +2 -0
  146. package/lib/adapter/index.d.ts.map +1 -0
  147. package/lib/adapter/index.js +18 -0
  148. package/lib/adapter/index.js.map +1 -0
  149. package/lib/adapter/reporter/BrowserCapabilitiesReporter.d.ts +18 -0
  150. package/lib/adapter/reporter/BrowserCapabilitiesReporter.d.ts.map +1 -0
  151. package/lib/adapter/reporter/BrowserCapabilitiesReporter.js +49 -0
  152. package/lib/adapter/reporter/BrowserCapabilitiesReporter.js.map +1 -0
  153. package/lib/adapter/reporter/InitialisesReporters.d.ts +8 -0
  154. package/lib/adapter/reporter/InitialisesReporters.d.ts.map +1 -0
  155. package/lib/adapter/reporter/InitialisesReporters.js +3 -0
  156. package/lib/adapter/reporter/InitialisesReporters.js.map +1 -0
  157. package/lib/adapter/reporter/OutputStreamBuffer.d.ts +13 -0
  158. package/lib/adapter/reporter/OutputStreamBuffer.d.ts.map +1 -0
  159. package/lib/adapter/reporter/OutputStreamBuffer.js +29 -0
  160. package/lib/adapter/reporter/OutputStreamBuffer.js.map +1 -0
  161. package/lib/adapter/reporter/OutputStreamBufferPrinter.d.ts +16 -0
  162. package/lib/adapter/reporter/OutputStreamBufferPrinter.d.ts.map +1 -0
  163. package/lib/adapter/reporter/OutputStreamBufferPrinter.js +28 -0
  164. package/lib/adapter/reporter/OutputStreamBufferPrinter.js.map +1 -0
  165. package/lib/adapter/reporter/ProvidesWriteStream.d.ts +8 -0
  166. package/lib/adapter/reporter/ProvidesWriteStream.d.ts.map +1 -0
  167. package/lib/adapter/reporter/ProvidesWriteStream.js +3 -0
  168. package/lib/adapter/reporter/ProvidesWriteStream.js.map +1 -0
  169. package/lib/adapter/reporter/TagPrinter.d.ts +17 -0
  170. package/lib/adapter/reporter/TagPrinter.d.ts.map +1 -0
  171. package/lib/adapter/reporter/TagPrinter.js +56 -0
  172. package/lib/adapter/reporter/TagPrinter.js.map +1 -0
  173. package/lib/adapter/reporter/index.d.ts +6 -0
  174. package/lib/adapter/reporter/index.d.ts.map +1 -0
  175. package/lib/adapter/reporter/index.js +22 -0
  176. package/lib/adapter/reporter/index.js.map +1 -0
  177. package/lib/api.d.ts +3 -0
  178. package/lib/api.d.ts.map +1 -0
  179. package/lib/api.js +18 -0
  180. package/lib/api.js.map +1 -0
  181. package/lib/config/WebdriverIOConfig.d.ts +95 -0
  182. package/lib/config/WebdriverIOConfig.d.ts.map +1 -0
  183. package/lib/config/WebdriverIOConfig.js +3 -0
  184. package/lib/config/WebdriverIOConfig.js.map +1 -0
  185. package/lib/config/index.d.ts +2 -0
  186. package/lib/config/index.d.ts.map +1 -0
  187. package/lib/config/index.js +18 -0
  188. package/lib/config/index.js.map +1 -0
  189. package/lib/index.d.ts +16 -0
  190. package/lib/index.d.ts.map +1 -0
  191. package/lib/index.js +52 -0
  192. package/lib/index.js.map +1 -0
  193. package/lib/package.json +1 -0
  194. package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts +40 -0
  195. package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts.map +1 -0
  196. package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.js +47 -0
  197. package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.js.map +1 -0
  198. package/lib/screenplay/abilities/index.d.ts +2 -0
  199. package/lib/screenplay/abilities/index.d.ts.map +1 -0
  200. package/lib/screenplay/abilities/index.js +18 -0
  201. package/lib/screenplay/abilities/index.js.map +1 -0
  202. package/lib/screenplay/index.d.ts +3 -0
  203. package/lib/screenplay/index.d.ts.map +1 -0
  204. package/lib/screenplay/index.js +19 -0
  205. package/lib/screenplay/index.js.map +1 -0
  206. package/lib/screenplay/models/WebdriverIOBrowsingSession.d.ts +25 -0
  207. package/lib/screenplay/models/WebdriverIOBrowsingSession.d.ts.map +1 -0
  208. package/lib/screenplay/models/WebdriverIOBrowsingSession.js +129 -0
  209. package/lib/screenplay/models/WebdriverIOBrowsingSession.js.map +1 -0
  210. package/lib/screenplay/models/WebdriverIOCookie.d.ts +15 -0
  211. package/lib/screenplay/models/WebdriverIOCookie.d.ts.map +1 -0
  212. package/lib/screenplay/models/WebdriverIOCookie.js +46 -0
  213. package/lib/screenplay/models/WebdriverIOCookie.js.map +1 -0
  214. package/lib/screenplay/models/WebdriverIOErrorHandler.d.ts +9 -0
  215. package/lib/screenplay/models/WebdriverIOErrorHandler.d.ts.map +1 -0
  216. package/lib/screenplay/models/WebdriverIOErrorHandler.js +24 -0
  217. package/lib/screenplay/models/WebdriverIOErrorHandler.js.map +1 -0
  218. package/lib/screenplay/models/WebdriverIOModalDialogHandler.d.ts +27 -0
  219. package/lib/screenplay/models/WebdriverIOModalDialogHandler.d.ts.map +1 -0
  220. package/lib/screenplay/models/WebdriverIOModalDialogHandler.js +78 -0
  221. package/lib/screenplay/models/WebdriverIOModalDialogHandler.js.map +1 -0
  222. package/lib/screenplay/models/WebdriverIOPage.d.ts +50 -0
  223. package/lib/screenplay/models/WebdriverIOPage.d.ts.map +1 -0
  224. package/lib/screenplay/models/WebdriverIOPage.js +256 -0
  225. package/lib/screenplay/models/WebdriverIOPage.js.map +1 -0
  226. package/lib/screenplay/models/WebdriverIOPageElement.d.ts +34 -0
  227. package/lib/screenplay/models/WebdriverIOPageElement.d.ts.map +1 -0
  228. package/lib/screenplay/models/WebdriverIOPageElement.js +257 -0
  229. package/lib/screenplay/models/WebdriverIOPageElement.js.map +1 -0
  230. package/lib/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.d.ts +30 -0
  231. package/lib/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.d.ts.map +1 -0
  232. package/lib/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.js +81 -0
  233. package/lib/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.js.map +1 -0
  234. package/lib/screenplay/models/WebdriverProtocolErrorCode.d.ts +39 -0
  235. package/lib/screenplay/models/WebdriverProtocolErrorCode.d.ts.map +1 -0
  236. package/lib/screenplay/models/WebdriverProtocolErrorCode.js +43 -0
  237. package/lib/screenplay/models/WebdriverProtocolErrorCode.js.map +1 -0
  238. package/lib/screenplay/models/index.d.ts +5 -0
  239. package/lib/screenplay/models/index.d.ts.map +1 -0
  240. package/lib/screenplay/models/index.js +21 -0
  241. package/lib/screenplay/models/index.js.map +1 -0
  242. package/lib/screenplay/models/locators/WebdriverIOLocator.d.ts +33 -0
  243. package/lib/screenplay/models/locators/WebdriverIOLocator.d.ts.map +1 -0
  244. package/lib/screenplay/models/locators/WebdriverIOLocator.js +128 -0
  245. package/lib/screenplay/models/locators/WebdriverIOLocator.js.map +1 -0
  246. package/lib/screenplay/models/locators/WebdriverIORootLocator.d.ts +17 -0
  247. package/lib/screenplay/models/locators/WebdriverIORootLocator.d.ts.map +1 -0
  248. package/lib/screenplay/models/locators/WebdriverIORootLocator.js +34 -0
  249. package/lib/screenplay/models/locators/WebdriverIORootLocator.js.map +1 -0
  250. package/lib/screenplay/models/locators/index.d.ts +3 -0
  251. package/lib/screenplay/models/locators/index.d.ts.map +1 -0
  252. package/lib/screenplay/models/locators/index.js +19 -0
  253. package/lib/screenplay/models/locators/index.js.map +1 -0
  254. package/package.json +122 -0
  255. package/src/adapter/TestRunnerLoader.ts +90 -0
  256. package/src/adapter/WebdriverIOFrameworkAdapter.ts +130 -0
  257. package/src/adapter/WebdriverIOFrameworkAdapterFactory.ts +39 -0
  258. package/src/adapter/WebdriverIONotifier.ts +480 -0
  259. package/src/adapter/index.ts +1 -0
  260. package/src/adapter/reporter/BrowserCapabilitiesReporter.ts +63 -0
  261. package/src/adapter/reporter/InitialisesReporters.ts +8 -0
  262. package/src/adapter/reporter/OutputStreamBuffer.ts +30 -0
  263. package/src/adapter/reporter/OutputStreamBufferPrinter.ts +30 -0
  264. package/src/adapter/reporter/ProvidesWriteStream.ts +8 -0
  265. package/src/adapter/reporter/TagPrinter.ts +69 -0
  266. package/src/adapter/reporter/index.ts +5 -0
  267. package/src/api.ts +2 -0
  268. package/src/config/WebdriverIOConfig.ts +94 -0
  269. package/src/config/index.ts +1 -0
  270. package/src/index.ts +32 -0
  271. package/src/screenplay/abilities/BrowseTheWebWithWebdriverIO.ts +46 -0
  272. package/src/screenplay/abilities/index.ts +1 -0
  273. package/src/screenplay/index.ts +2 -0
  274. package/src/screenplay/models/WebdriverIOBrowsingSession.ts +176 -0
  275. package/src/screenplay/models/WebdriverIOCookie.ts +51 -0
  276. package/src/screenplay/models/WebdriverIOErrorHandler.ts +25 -0
  277. package/src/screenplay/models/WebdriverIOModalDialogHandler.ts +99 -0
  278. package/src/screenplay/models/WebdriverIOPage.ts +311 -0
  279. package/src/screenplay/models/WebdriverIOPageElement.ts +280 -0
  280. package/src/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.ts +100 -0
  281. package/src/screenplay/models/WebdriverProtocolErrorCode.ts +38 -0
  282. package/src/screenplay/models/index.ts +4 -0
  283. package/src/screenplay/models/locators/WebdriverIOLocator.ts +176 -0
  284. package/src/screenplay/models/locators/WebdriverIORootLocator.ts +34 -0
  285. package/src/screenplay/models/locators/index.ts +2 -0
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebdriverIOBrowsingSession = void 0;
4
+ require("webdriverio");
5
+ const core_1 = require("@serenity-js/core");
6
+ const index_js_1 = require("@serenity-js/core/lib/model/index.js");
7
+ const web_1 = require("@serenity-js/web");
8
+ const index_js_2 = require("../models/index.js");
9
+ const WebdriverIOErrorHandler_js_1 = require("./WebdriverIOErrorHandler.js");
10
+ const WebdriverIOModalDialogHandler_js_1 = require("./WebdriverIOModalDialogHandler.js");
11
+ const WebdriverIOPuppeteerModalDialogHandler_js_1 = require("./WebdriverIOPuppeteerModalDialogHandler.js");
12
+ /**
13
+ * WebdriverIO-specific implementation of [`BrowsingSession`](https://serenity-js.org/api/web/class/BrowsingSession/).
14
+ *
15
+ * @group Models
16
+ */
17
+ class WebdriverIOBrowsingSession extends web_1.BrowsingSession {
18
+ browser;
19
+ constructor(browser) {
20
+ super();
21
+ this.browser = browser;
22
+ if (!browser.$ || !browser.$$) {
23
+ throw new core_1.LogicError(`WebdriverIO browser object is not initialised yet, so can't be assigned to an actor. Are you trying to instantiate an actor outside of a test or a test hook?`);
24
+ }
25
+ }
26
+ async allPages() {
27
+ // scan all the active window handles and add any newly opened windows if needed
28
+ const windowHandles = await this.browser.getWindowHandles();
29
+ // remove pages that are no longer open
30
+ const closedPageIds = this.registeredPageIds()
31
+ .filter(id => !windowHandles.includes(id.value));
32
+ this.deregister(...closedPageIds);
33
+ // add any new pages that might have been opened (e.g. popup windows)
34
+ const registeredWindowHandles = new Set(this.registeredPageIds().map(id => id.value));
35
+ const newlyOpenedWindowHandles = windowHandles.filter(windowHandle => !registeredWindowHandles.has(windowHandle));
36
+ for (const newlyOpenedWindowHandle of newlyOpenedWindowHandles) {
37
+ const errorHandler = new WebdriverIOErrorHandler_js_1.WebdriverIOErrorHandler();
38
+ this.register(new index_js_2.WebdriverIOPage(this, this.browser, await this.modalDialogHandlerFor(newlyOpenedWindowHandle, errorHandler), errorHandler, new index_js_1.CorrelationId(newlyOpenedWindowHandle)));
39
+ }
40
+ return super.allPages();
41
+ }
42
+ /**
43
+ * @param page
44
+ */
45
+ async changeCurrentPageTo(page) {
46
+ const currentPage = await this.currentPage();
47
+ // are we already on this page?
48
+ if (currentPage.id.equals(page.id)) {
49
+ return void 0;
50
+ }
51
+ // does the new page exist, or has it been closed in the meantime by user action, script, or similar?
52
+ if (!await page.isPresent()) {
53
+ return void 0;
54
+ }
55
+ // the page seems to be legit, switch to it
56
+ await this.browser.switchToWindow(page.id.value);
57
+ // and update the cached reference
58
+ await super.changeCurrentPageTo(page);
59
+ }
60
+ async activeWindowHandle() {
61
+ try {
62
+ return await this.browser.getWindowHandle();
63
+ }
64
+ catch (error) {
65
+ // If the window is closed by user action Webdriver will still hold the reference to the closed window.
66
+ if (['NoSuchWindowError', 'no such window'].includes(error.name)) {
67
+ const allHandles = await this.browser.getWindowHandles();
68
+ if (allHandles.length > 0) {
69
+ const handle = allHandles.at(-1);
70
+ await this.browser.switchToWindow(handle);
71
+ return handle;
72
+ }
73
+ }
74
+ throw error;
75
+ }
76
+ }
77
+ async currentPage() {
78
+ const actualCurrentPageHandle = await this.activeWindowHandle();
79
+ const actualCurrentPageId = index_js_1.CorrelationId.fromJSON(actualCurrentPageHandle);
80
+ if (this.currentBrowserPage && this.currentBrowserPage.id.equals(actualCurrentPageId)) {
81
+ return this.currentBrowserPage;
82
+ }
83
+ // Looks like the actual current page is not what we thought the current page was.
84
+ // Is it one of the pages we are aware of?
85
+ const allPages = await this.allPages();
86
+ const found = allPages.find(page => page.id.equals(actualCurrentPageId));
87
+ if (found) {
88
+ this.currentBrowserPage = found;
89
+ return this.currentBrowserPage;
90
+ }
91
+ // OK, so that's a handle that we haven't seen before, let's register it and set as current page.
92
+ this.currentBrowserPage = await this.registerCurrentPage();
93
+ return this.currentBrowserPage;
94
+ }
95
+ async registerCurrentPage() {
96
+ const windowHandle = await this.browser.getWindowHandle();
97
+ const errorHandler = new WebdriverIOErrorHandler_js_1.WebdriverIOErrorHandler();
98
+ const page = new index_js_2.WebdriverIOPage(this, this.browser, await this.modalDialogHandlerFor(windowHandle, errorHandler), errorHandler, new index_js_1.CorrelationId(windowHandle));
99
+ this.register(page);
100
+ return page;
101
+ }
102
+ async modalDialogHandlerFor(windowHandle, errorHandler) {
103
+ return this.browser.isDevTools
104
+ ? new WebdriverIOPuppeteerModalDialogHandler_js_1.WebdriverIOPuppeteerModalDialogHandler(await this.puppeteerPageFor(windowHandle))
105
+ : new WebdriverIOModalDialogHandler_js_1.WebdriverIOModalDialogHandler(this.browser, errorHandler);
106
+ }
107
+ async puppeteerPageFor(windowHandle) {
108
+ const puppeteer = await this.browser.getPuppeteer();
109
+ const pages = await puppeteer.pages();
110
+ const handles = await this.browser.getWindowHandles();
111
+ if (handles.length !== pages.length) {
112
+ throw new core_1.LogicError(`The number of registered Puppeteer pages doesn't match WebdriverIO window handles`);
113
+ }
114
+ const index = handles.indexOf(windowHandle);
115
+ // We cast to `unknown` first because the version of Page in Puppeteer-core
116
+ // might be slightly out-of-sync with what the WebdriverIO uses.
117
+ // This doesn't really matter since we're only using it to work with Dialogs.
118
+ const page = pages[index];
119
+ if (!page) {
120
+ throw new core_1.LogicError(`Couldn't find Puppeteer page for WebdriverIO window handle ${windowHandle}`);
121
+ }
122
+ return page;
123
+ }
124
+ browserCapabilities() {
125
+ return Promise.resolve(this.browser.capabilities);
126
+ }
127
+ }
128
+ exports.WebdriverIOBrowsingSession = WebdriverIOBrowsingSession;
129
+ //# sourceMappingURL=WebdriverIOBrowsingSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIOBrowsingSession.js","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOBrowsingSession.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import 'webdriverio';
2
+ import type { CookieData } from '@serenity-js/web';
3
+ import { Cookie } from '@serenity-js/web';
4
+ /**
5
+ * WebdriverIO-specific implementation of [`Cookie`](https://serenity-js.org/api/web/class/Cookie/).
6
+ *
7
+ * @group Models
8
+ */
9
+ export declare class WebdriverIOCookie extends Cookie {
10
+ private readonly browser;
11
+ constructor(browser: WebdriverIO.Browser, cookieName: string);
12
+ delete(): Promise<void>;
13
+ protected read(): Promise<CookieData>;
14
+ }
15
+ //# sourceMappingURL=WebdriverIOCookie.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIOCookie.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOCookie.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAsB,MAAM,kBAAkB,CAAC;AAG9D;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,MAAM;IAGrC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW,CAAC,OAAO,EAC7C,UAAU,EAAE,MAAM;IAMhB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;cAIb,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;CAwB9C"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebdriverIOCookie = void 0;
4
+ require("webdriverio");
5
+ const core_1 = require("@serenity-js/core");
6
+ const web_1 = require("@serenity-js/web");
7
+ const tiny_types_1 = require("tiny-types");
8
+ /**
9
+ * WebdriverIO-specific implementation of [`Cookie`](https://serenity-js.org/api/web/class/Cookie/).
10
+ *
11
+ * @group Models
12
+ */
13
+ class WebdriverIOCookie extends web_1.Cookie {
14
+ browser;
15
+ constructor(browser, cookieName) {
16
+ super(cookieName);
17
+ this.browser = browser;
18
+ (0, tiny_types_1.ensure)('browser', browser, (0, tiny_types_1.isDefined)());
19
+ }
20
+ async delete() {
21
+ await this.browser.deleteCookies(this.cookieName);
22
+ }
23
+ async read() {
24
+ const [cookie] = await this.browser.getCookies(this.cookieName);
25
+ if (!cookie) {
26
+ throw new web_1.CookieMissingError(`Cookie '${this.cookieName}' not set`);
27
+ }
28
+ // There _might_ be a bug in WDIO where the expiry date is set on "expires" rather than the "expiry" key
29
+ // and possibly another one around deserialising the timestamp, since WDIO seems to add several hundred milliseconds
30
+ // to the original expiry date
31
+ const expiry = cookie.expiry || cookie.expires;
32
+ return {
33
+ name: cookie.name,
34
+ value: cookie.value,
35
+ domain: cookie.domain,
36
+ path: cookie.path,
37
+ expiry: typeof expiry === 'number' && expiry >= 0
38
+ ? core_1.Timestamp.fromTimestampInSeconds(Math.round(expiry))
39
+ : undefined,
40
+ httpOnly: cookie.httpOnly,
41
+ secure: cookie.secure,
42
+ };
43
+ }
44
+ }
45
+ exports.WebdriverIOCookie = WebdriverIOCookie;
46
+ //# sourceMappingURL=WebdriverIOCookie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIOCookie.js","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOCookie.ts"],"names":[],"mappings":";;;AAAA,uBAAqB;AAErB,4CAA8C;AAE9C,0CAA8D;AAC9D,2CAA+C;AAE/C;;;;GAIG;AACH,MAAa,iBAAkB,SAAQ,YAAM;IAGpB;IADrB,YACqB,OAA4B,EAC7C,UAAkB;QAElB,KAAK,CAAC,UAAU,CAAC,CAAC;QAHD,YAAO,GAAP,OAAO,CAAqB;QAI7C,IAAA,mBAAM,EAAC,SAAS,EAAE,OAAO,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM;QACR,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAES,KAAK,CAAC,IAAI;QAChB,MAAM,CAAE,MAAM,CAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAElE,IAAI,CAAE,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,wBAAkB,CAAC,WAAY,IAAI,CAAC,UAAW,WAAW,CAAC,CAAC;QAC1E,CAAC;QAED,wGAAwG;QACxG,oHAAoH;QACpH,8BAA8B;QAC9B,MAAM,MAAM,GAAuB,MAAM,CAAC,MAAM,IAAK,MAAc,CAAC,OAAO,CAAC;QAE5E,OAAO;YACH,IAAI,EAAQ,MAAM,CAAC,IAAI;YACvB,KAAK,EAAO,MAAM,CAAC,KAAK;YACxB,MAAM,EAAM,MAAM,CAAC,MAAM;YACzB,IAAI,EAAQ,MAAM,CAAC,IAAI;YACvB,MAAM,EAAM,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC;gBACjD,CAAC,CAAC,gBAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtD,CAAC,CAAC,SAAS;YACf,QAAQ,EAAI,MAAM,CAAC,QAAQ;YAC3B,MAAM,EAAM,MAAM,CAAC,MAAM;SAC5B,CAAA;IACL,CAAC;CACJ;AAtCD,8CAsCC"}
@@ -0,0 +1,9 @@
1
+ import type { WebdriverProtocolErrorCode } from './WebdriverProtocolErrorCode.js';
2
+ export declare class WebdriverIOErrorHandler {
3
+ private readonly handlers;
4
+ constructor(handlers?: Map<WebdriverProtocolErrorCode, (error: Error) => Promise<void> | void>);
5
+ executeIfHandled<T>(error: Error, action: () => Promise<T> | T): Promise<T>;
6
+ setHandlerFor(errorType: WebdriverProtocolErrorCode, handler: (error: Error) => Promise<void> | void): void;
7
+ unsetHandlerFor(errorType: WebdriverProtocolErrorCode): void;
8
+ }
9
+ //# sourceMappingURL=WebdriverIOErrorHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIOErrorHandler.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOErrorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAElF,qBAAa,uBAAuB;IAEpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,GAAE,GAAG,CAAC,0BAA0B,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAa;IAGpH,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAUjF,aAAa,CAAC,SAAS,EAAE,0BAA0B,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAI3G,eAAe,CAAC,SAAS,EAAE,0BAA0B,GAAG,IAAI;CAG/D"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebdriverIOErrorHandler = void 0;
4
+ class WebdriverIOErrorHandler {
5
+ handlers;
6
+ constructor(handlers = new Map()) {
7
+ this.handlers = handlers;
8
+ }
9
+ async executeIfHandled(error, action) {
10
+ if (!this.handlers.has(error.name)) {
11
+ throw error;
12
+ }
13
+ await this.handlers.get(error.name)(error);
14
+ return action();
15
+ }
16
+ setHandlerFor(errorType, handler) {
17
+ this.handlers.set(errorType, handler);
18
+ }
19
+ unsetHandlerFor(errorType) {
20
+ this.handlers.delete(errorType);
21
+ }
22
+ }
23
+ exports.WebdriverIOErrorHandler = WebdriverIOErrorHandler;
24
+ //# sourceMappingURL=WebdriverIOErrorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIOErrorHandler.js","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOErrorHandler.ts"],"names":[],"mappings":";;;AAEA,MAAa,uBAAuB;IAEH;IAA7B,YAA6B,WAAoF,IAAI,GAAG,EAAE;QAA7F,aAAQ,GAAR,QAAQ,CAAqF;IAC1H,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAI,KAAY,EAAE,MAA4B;QAChE,IAAI,CAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAkC,CAAC,EAAE,CAAC;YAChE,MAAM,KAAK,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAkC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEzE,OAAO,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,aAAa,CAAC,SAAqC,EAAE,OAA+C;QAChG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,eAAe,CAAC,SAAqC;QACjD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;CACJ;AAtBD,0DAsBC"}
@@ -0,0 +1,27 @@
1
+ import 'webdriverio';
2
+ import type { ModalDialog } from '@serenity-js/web';
3
+ import { ModalDialogHandler } from '@serenity-js/web';
4
+ import type { WebdriverIOErrorHandler } from './WebdriverIOErrorHandler.js';
5
+ /**
6
+ * WebdriverIO-specific implementation of [`ModalDialogHandler`](https://serenity-js.org/api/web/class/ModalDialogHandler/),
7
+ * used with the [WebDriver protocol](https://webdriver.io/docs/api/webdriver).
8
+ *
9
+ * @group Models
10
+ */
11
+ export declare class WebdriverIOModalDialogHandler extends ModalDialogHandler {
12
+ private readonly browser;
13
+ private readonly errorHandler;
14
+ private readonly defaultHandler;
15
+ private currentHandler;
16
+ constructor(browser: WebdriverIO.Browser, errorHandler: WebdriverIOErrorHandler);
17
+ tryToHandleDialog(): Promise<void>;
18
+ acceptNext(): Promise<void>;
19
+ acceptNextWithValue(text: string | number): Promise<void>;
20
+ dismissNext(): Promise<void>;
21
+ reset(): Promise<void>;
22
+ /**
23
+ * @override
24
+ */
25
+ last(): Promise<ModalDialog>;
26
+ }
27
+ //# sourceMappingURL=WebdriverIOModalDialogHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIOModalDialogHandler.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOModalDialogHandler.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAgE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEpH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAG5E;;;;;GAKG;AACH,qBAAa,6BAA8B,SAAQ,kBAAkB;IAc7D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAbjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAO1B;IAEL,OAAO,CAAC,cAAc,CAAsB;gBAGvB,OAAO,EAAE,WAAW,CAAC,OAAO,EAC5B,YAAY,EAAE,uBAAuB;IASpD,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAalC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;CAQrC"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebdriverIOModalDialogHandler = void 0;
4
+ require("webdriverio");
5
+ const web_1 = require("@serenity-js/web");
6
+ const WebdriverProtocolErrorCode_js_1 = require("./WebdriverProtocolErrorCode.js");
7
+ /**
8
+ * WebdriverIO-specific implementation of [`ModalDialogHandler`](https://serenity-js.org/api/web/class/ModalDialogHandler/),
9
+ * used with the [WebDriver protocol](https://webdriver.io/docs/api/webdriver).
10
+ *
11
+ * @group Models
12
+ */
13
+ class WebdriverIOModalDialogHandler extends web_1.ModalDialogHandler {
14
+ browser;
15
+ errorHandler;
16
+ defaultHandler = async () => {
17
+ const message = await this.browser.getAlertText();
18
+ await this.browser.dismissAlert();
19
+ this.modalDialog = new web_1.DismissedModalDialog(message);
20
+ };
21
+ currentHandler;
22
+ constructor(browser, errorHandler) {
23
+ super();
24
+ this.browser = browser;
25
+ this.errorHandler = errorHandler;
26
+ this.currentHandler = this.defaultHandler;
27
+ this.errorHandler.setHandlerFor(WebdriverProtocolErrorCode_js_1.WebdriverProtocolErrorCode.UnexpectedAlertOpenError, error_ => this.tryToHandleDialog());
28
+ }
29
+ async tryToHandleDialog() {
30
+ try {
31
+ await this.currentHandler();
32
+ }
33
+ catch (error) {
34
+ if (error.name === WebdriverProtocolErrorCode_js_1.WebdriverProtocolErrorCode.NoSuchAlertError) {
35
+ this.modalDialog = new web_1.AbsentModalDialog();
36
+ return;
37
+ }
38
+ throw error;
39
+ }
40
+ }
41
+ async acceptNext() {
42
+ this.currentHandler = async () => {
43
+ const message = await this.browser.getAlertText();
44
+ await this.browser.acceptAlert();
45
+ this.modalDialog = new web_1.AcceptedModalDialog(message);
46
+ };
47
+ }
48
+ async acceptNextWithValue(text) {
49
+ this.currentHandler = async () => {
50
+ await this.browser.sendAlertText(String(text));
51
+ const message = await this.browser.getAlertText();
52
+ await this.browser.acceptAlert();
53
+ this.modalDialog = new web_1.AcceptedModalDialog(message);
54
+ };
55
+ }
56
+ async dismissNext() {
57
+ this.currentHandler = async () => {
58
+ const message = await this.browser.getAlertText();
59
+ await this.browser.dismissAlert();
60
+ this.modalDialog = new web_1.DismissedModalDialog(message);
61
+ };
62
+ }
63
+ async reset() {
64
+ this.modalDialog = new web_1.AbsentModalDialog();
65
+ this.currentHandler = this.defaultHandler;
66
+ }
67
+ /**
68
+ * @override
69
+ */
70
+ async last() {
71
+ if (this.modalDialog instanceof web_1.AbsentModalDialog) {
72
+ await this.tryToHandleDialog();
73
+ }
74
+ return this.modalDialog;
75
+ }
76
+ }
77
+ exports.WebdriverIOModalDialogHandler = WebdriverIOModalDialogHandler;
78
+ //# sourceMappingURL=WebdriverIOModalDialogHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIOModalDialogHandler.js","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOModalDialogHandler.ts"],"names":[],"mappings":";;;AAAA,uBAAqB;AAGrB,0CAAoH;AAGpH,mFAA6E;AAE7E;;;;;GAKG;AACH,MAAa,6BAA8B,SAAQ,wBAAkB;IAc5C;IACA;IAbJ,cAAc,GAC3B,KAAK,IAAI,EAAE;QACP,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAElD,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAElC,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAoB,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC,CAAA;IAEG,cAAc,CAAsB;IAE5C,YACqB,OAA4B,EAC5B,YAAqC;QAEtD,KAAK,EAAE,CAAC;QAHS,YAAO,GAAP,OAAO,CAAqB;QAC5B,iBAAY,GAAZ,YAAY,CAAyB;QAItD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAE1C,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,0DAA0B,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC7H,CAAC;IAED,KAAK,CAAC,iBAAiB;QACnB,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;QAC/B,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,IAAI,KAAK,0DAA0B,CAAC,gBAAgB,EAAE,CAAC;gBAC7D,IAAI,CAAC,WAAW,GAAG,IAAI,uBAAiB,EAAE,CAAC;gBAC3C,OAAO;YACX,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,IAAI,CAAC,cAAc,GAAG,KAAK,IAAI,EAAE;YAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAElD,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAEjC,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAmB,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAqB;QAC3C,IAAI,CAAC,cAAc,GAAG,KAAK,IAAI,EAAE;YAC7B,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAElD,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAEjC,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAmB,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW;QACb,IAAI,CAAC,cAAc,GAAG,KAAK,IAAI,EAAE;YAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAElD,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAElC,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAoB,CAAC,OAAO,CAAC,CAAC;QACzD,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,WAAW,GAAG,IAAI,uBAAiB,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QAEN,IAAI,IAAI,CAAC,WAAW,YAAY,uBAAiB,EAAE,CAAC;YAChD,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACnC,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;CACJ;AApFD,sEAoFC"}
@@ -0,0 +1,50 @@
1
+ import 'webdriverio';
2
+ import type { CorrelationId } from '@serenity-js/core/lib/model/index.js';
3
+ import type { Cookie, CookieData, ModalDialogHandler, PageElements, Selector } from '@serenity-js/web';
4
+ import { Key, Page, PageElement } from '@serenity-js/web';
5
+ import { URL } from 'url';
6
+ import type { WebdriverIOBrowsingSession } from './WebdriverIOBrowsingSession.js';
7
+ import type { WebdriverIOErrorHandler } from './WebdriverIOErrorHandler.js';
8
+ /**
9
+ * WebdriverIO-specific implementation of [`Page`](https://serenity-js.org/api/web/class/Page/).
10
+ *
11
+ * @group Models
12
+ */
13
+ export declare class WebdriverIOPage extends Page<WebdriverIO.Element> {
14
+ private readonly browser;
15
+ private readonly errorHandler;
16
+ private lastScriptExecutionSummary;
17
+ private dehydrator;
18
+ constructor(session: WebdriverIOBrowsingSession, browser: WebdriverIO.Browser, modalDialogHandler: ModalDialogHandler, errorHandler: WebdriverIOErrorHandler, pageId: CorrelationId);
19
+ createPageElement(nativeElement: WebdriverIO.Element): PageElement<WebdriverIO.Element>;
20
+ locate(selector: Selector): PageElement<WebdriverIO.Element>;
21
+ locateAll(selector: Selector): PageElements<WebdriverIO.Element>;
22
+ navigateTo(destination: string): Promise<void>;
23
+ navigateBack(): Promise<void>;
24
+ navigateForward(): Promise<void>;
25
+ reload(): Promise<void>;
26
+ sendKeys(keys: Array<Key | string>): Promise<void>;
27
+ executeScript<Result, InnerArguments extends any[]>(script: string | ((...parameters: InnerArguments) => Result), ...args: InnerArguments): Promise<Result>;
28
+ executeAsyncScript<Result, Parameters extends any[]>(script: string | ((...args: [...parameters: Parameters, callback: (result: Result) => void]) => void), ...args: Parameters): Promise<Result>;
29
+ lastScriptExecutionResult<Result = any>(): Result;
30
+ takeScreenshot(): Promise<string>;
31
+ cookie(name: string): Promise<Cookie>;
32
+ setCookie(cookieData: CookieData): Promise<void>;
33
+ deleteAllCookies(): Promise<void>;
34
+ title(): Promise<string>;
35
+ name(): Promise<string>;
36
+ url(): Promise<URL>;
37
+ viewportSize(): Promise<{
38
+ width: number;
39
+ height: number;
40
+ }>;
41
+ setViewportSize(size: {
42
+ width: number;
43
+ height: number;
44
+ }): Promise<void>;
45
+ close(): Promise<void>;
46
+ closeOthers(): Promise<void>;
47
+ isPresent(): Promise<boolean>;
48
+ private inContextOfThisPage;
49
+ }
50
+ //# sourceMappingURL=WebdriverIOPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIOPage.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOPage.ts"],"names":[],"mappings":"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"}