@serenity-js/webdriverio 3.1.6 → 3.2.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 (270) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +91 -41
  3. package/esm/adapter/TestRunnerLoader.d.ts +16 -0
  4. package/esm/adapter/TestRunnerLoader.d.ts.map +1 -0
  5. package/esm/adapter/TestRunnerLoader.js +58 -0
  6. package/esm/adapter/TestRunnerLoader.js.map +1 -0
  7. package/esm/adapter/WebdriverIOFrameworkAdapter.d.ts +24 -0
  8. package/esm/adapter/WebdriverIOFrameworkAdapter.d.ts.map +1 -0
  9. package/esm/adapter/WebdriverIOFrameworkAdapter.js +77 -0
  10. package/esm/adapter/WebdriverIOFrameworkAdapter.js.map +1 -0
  11. package/esm/adapter/WebdriverIOFrameworkAdapterFactory.d.ts +19 -0
  12. package/esm/adapter/WebdriverIOFrameworkAdapterFactory.d.ts.map +1 -0
  13. package/esm/adapter/WebdriverIOFrameworkAdapterFactory.js +15 -0
  14. package/esm/adapter/WebdriverIOFrameworkAdapterFactory.js.map +1 -0
  15. package/esm/adapter/WebdriverIONotifier.d.ts +72 -0
  16. package/esm/adapter/WebdriverIONotifier.d.ts.map +1 -0
  17. package/esm/adapter/WebdriverIONotifier.js +385 -0
  18. package/esm/adapter/WebdriverIONotifier.js.map +1 -0
  19. package/esm/adapter/index.d.ts +2 -0
  20. package/esm/adapter/index.d.ts.map +1 -0
  21. package/esm/adapter/index.js +2 -0
  22. package/esm/adapter/index.js.map +1 -0
  23. package/esm/adapter/reporter/BrowserCapabilitiesReporter.d.ts +18 -0
  24. package/esm/adapter/reporter/BrowserCapabilitiesReporter.d.ts.map +1 -0
  25. package/esm/adapter/reporter/BrowserCapabilitiesReporter.js +41 -0
  26. package/esm/adapter/reporter/BrowserCapabilitiesReporter.js.map +1 -0
  27. package/esm/adapter/reporter/InitialisesReporters.d.ts +8 -0
  28. package/esm/adapter/reporter/InitialisesReporters.d.ts.map +1 -0
  29. package/esm/adapter/reporter/InitialisesReporters.js +2 -0
  30. package/esm/adapter/reporter/InitialisesReporters.js.map +1 -0
  31. package/esm/adapter/reporter/OutputStreamBuffer.d.ts +13 -0
  32. package/esm/adapter/reporter/OutputStreamBuffer.d.ts.map +1 -0
  33. package/esm/adapter/reporter/OutputStreamBuffer.js +24 -0
  34. package/esm/adapter/reporter/OutputStreamBuffer.js.map +1 -0
  35. package/esm/adapter/reporter/OutputStreamBufferPrinter.d.ts +16 -0
  36. package/esm/adapter/reporter/OutputStreamBufferPrinter.d.ts.map +1 -0
  37. package/esm/adapter/reporter/OutputStreamBufferPrinter.js +21 -0
  38. package/esm/adapter/reporter/OutputStreamBufferPrinter.js.map +1 -0
  39. package/esm/adapter/reporter/ProvidesWriteStream.d.ts +8 -0
  40. package/esm/adapter/reporter/ProvidesWriteStream.d.ts.map +1 -0
  41. package/esm/adapter/reporter/ProvidesWriteStream.js +2 -0
  42. package/esm/adapter/reporter/ProvidesWriteStream.js.map +1 -0
  43. package/esm/adapter/reporter/TagPrinter.d.ts +17 -0
  44. package/esm/adapter/reporter/TagPrinter.d.ts.map +1 -0
  45. package/esm/adapter/reporter/TagPrinter.js +52 -0
  46. package/esm/adapter/reporter/TagPrinter.js.map +1 -0
  47. package/esm/adapter/reporter/index.d.ts +6 -0
  48. package/esm/adapter/reporter/index.d.ts.map +1 -0
  49. package/esm/adapter/reporter/index.js +6 -0
  50. package/esm/adapter/reporter/index.js.map +1 -0
  51. package/esm/api.d.ts +3 -0
  52. package/esm/api.d.ts.map +1 -0
  53. package/esm/api.js +2 -0
  54. package/esm/api.js.map +1 -0
  55. package/esm/config/WebdriverIOConfig.d.ts.map +1 -0
  56. package/esm/config/WebdriverIOConfig.js +2 -0
  57. package/esm/config/WebdriverIOConfig.js.map +1 -0
  58. package/esm/config/index.d.ts +2 -0
  59. package/esm/config/index.d.ts.map +1 -0
  60. package/esm/config/index.js +2 -0
  61. package/esm/config/index.js.map +1 -0
  62. package/esm/index.d.ts +16 -0
  63. package/esm/index.d.ts.map +1 -0
  64. package/esm/index.js +14 -0
  65. package/esm/index.js.map +1 -0
  66. package/esm/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts +42 -0
  67. package/esm/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts.map +1 -0
  68. package/esm/screenplay/abilities/BrowseTheWebWithWebdriverIO.js +48 -0
  69. package/esm/screenplay/abilities/BrowseTheWebWithWebdriverIO.js.map +1 -0
  70. package/esm/screenplay/abilities/index.d.ts +2 -0
  71. package/esm/screenplay/abilities/index.d.ts.map +1 -0
  72. package/esm/screenplay/abilities/index.js +2 -0
  73. package/esm/screenplay/abilities/index.js.map +1 -0
  74. package/esm/screenplay/index.d.ts +3 -0
  75. package/esm/screenplay/index.d.ts.map +1 -0
  76. package/esm/screenplay/index.js +3 -0
  77. package/esm/screenplay/index.js.map +1 -0
  78. package/esm/screenplay/models/WebdriverIOBrowsingSession.d.ts +24 -0
  79. package/esm/screenplay/models/WebdriverIOBrowsingSession.d.ts.map +1 -0
  80. package/esm/screenplay/models/WebdriverIOBrowsingSession.js +121 -0
  81. package/esm/screenplay/models/WebdriverIOBrowsingSession.js.map +1 -0
  82. package/esm/screenplay/models/WebdriverIOCookie.d.ts +14 -0
  83. package/esm/screenplay/models/WebdriverIOCookie.d.ts.map +1 -0
  84. package/esm/screenplay/models/WebdriverIOCookie.js +40 -0
  85. package/esm/screenplay/models/WebdriverIOCookie.js.map +1 -0
  86. package/esm/screenplay/models/WebdriverIOErrorHandler.d.ts +9 -0
  87. package/esm/screenplay/models/WebdriverIOErrorHandler.d.ts.map +1 -0
  88. package/esm/screenplay/models/WebdriverIOErrorHandler.js +19 -0
  89. package/esm/screenplay/models/WebdriverIOErrorHandler.js.map +1 -0
  90. package/esm/screenplay/models/WebdriverIOModalDialogHandler.d.ts +29 -0
  91. package/esm/screenplay/models/WebdriverIOModalDialogHandler.d.ts.map +1 -0
  92. package/esm/screenplay/models/WebdriverIOModalDialogHandler.js +73 -0
  93. package/esm/screenplay/models/WebdriverIOModalDialogHandler.js.map +1 -0
  94. package/esm/screenplay/models/WebdriverIOPage.d.ts +48 -0
  95. package/esm/screenplay/models/WebdriverIOPage.d.ts.map +1 -0
  96. package/esm/screenplay/models/WebdriverIOPage.js +203 -0
  97. package/esm/screenplay/models/WebdriverIOPage.js.map +1 -0
  98. package/esm/screenplay/models/WebdriverIOPageElement.d.ts +31 -0
  99. package/esm/screenplay/models/WebdriverIOPageElement.d.ts.map +1 -0
  100. package/esm/screenplay/models/WebdriverIOPageElement.js +205 -0
  101. package/esm/screenplay/models/WebdriverIOPageElement.js.map +1 -0
  102. package/esm/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.d.ts +32 -0
  103. package/esm/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.d.ts.map +1 -0
  104. package/esm/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.js +78 -0
  105. package/esm/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.js.map +1 -0
  106. package/esm/screenplay/models/WebdriverProtocolErrorCode.d.ts +39 -0
  107. package/esm/screenplay/models/WebdriverProtocolErrorCode.d.ts.map +1 -0
  108. package/esm/screenplay/models/WebdriverProtocolErrorCode.js +40 -0
  109. package/esm/screenplay/models/WebdriverProtocolErrorCode.js.map +1 -0
  110. package/esm/screenplay/models/index.d.ts +5 -0
  111. package/esm/screenplay/models/index.d.ts.map +1 -0
  112. package/esm/screenplay/models/index.js +5 -0
  113. package/esm/screenplay/models/index.js.map +1 -0
  114. package/esm/screenplay/models/locators/WebdriverIOLocator.d.ts +22 -0
  115. package/esm/screenplay/models/locators/WebdriverIOLocator.d.ts.map +1 -0
  116. package/esm/screenplay/models/locators/WebdriverIOLocator.js +97 -0
  117. package/esm/screenplay/models/locators/WebdriverIOLocator.js.map +1 -0
  118. package/esm/screenplay/models/locators/WebdriverIORootLocator.d.ts +17 -0
  119. package/esm/screenplay/models/locators/WebdriverIORootLocator.d.ts.map +1 -0
  120. package/esm/screenplay/models/locators/WebdriverIORootLocator.js +28 -0
  121. package/esm/screenplay/models/locators/WebdriverIORootLocator.js.map +1 -0
  122. package/esm/screenplay/models/locators/index.d.ts +3 -0
  123. package/esm/screenplay/models/locators/index.d.ts.map +1 -0
  124. package/esm/screenplay/models/locators/index.js +3 -0
  125. package/esm/screenplay/models/locators/index.js.map +1 -0
  126. package/lib/adapter/TestRunnerLoader.d.ts +3 -3
  127. package/lib/adapter/TestRunnerLoader.d.ts.map +1 -1
  128. package/lib/adapter/TestRunnerLoader.js +8 -8
  129. package/lib/adapter/TestRunnerLoader.js.map +1 -1
  130. package/lib/adapter/WebdriverIOFrameworkAdapter.d.ts +5 -4
  131. package/lib/adapter/WebdriverIOFrameworkAdapter.d.ts.map +1 -1
  132. package/lib/adapter/WebdriverIOFrameworkAdapter.js +51 -21
  133. package/lib/adapter/WebdriverIOFrameworkAdapter.js.map +1 -1
  134. package/lib/adapter/WebdriverIOFrameworkAdapterFactory.d.ts +5 -5
  135. package/lib/adapter/WebdriverIOFrameworkAdapterFactory.d.ts.map +1 -1
  136. package/lib/adapter/WebdriverIOFrameworkAdapterFactory.js +2 -2
  137. package/lib/adapter/WebdriverIOFrameworkAdapterFactory.js.map +1 -1
  138. package/lib/adapter/WebdriverIONotifier.d.ts +6 -6
  139. package/lib/adapter/WebdriverIONotifier.d.ts.map +1 -1
  140. package/lib/adapter/WebdriverIONotifier.js +48 -24
  141. package/lib/adapter/WebdriverIONotifier.js.map +1 -1
  142. package/lib/adapter/index.d.ts +1 -2
  143. package/lib/adapter/index.d.ts.map +1 -1
  144. package/lib/adapter/index.js +1 -2
  145. package/lib/adapter/index.js.map +1 -1
  146. package/lib/adapter/reporter/BrowserCapabilitiesReporter.d.ts +1 -1
  147. package/lib/adapter/reporter/BrowserCapabilitiesReporter.d.ts.map +1 -1
  148. package/lib/adapter/reporter/BrowserCapabilitiesReporter.js +4 -4
  149. package/lib/adapter/reporter/BrowserCapabilitiesReporter.js.map +1 -1
  150. package/lib/adapter/reporter/InitialisesReporters.d.ts +2 -2
  151. package/lib/adapter/reporter/InitialisesReporters.d.ts.map +1 -1
  152. package/lib/adapter/reporter/OutputStreamBuffer.d.ts +1 -1
  153. package/lib/adapter/reporter/OutputStreamBuffer.d.ts.map +1 -1
  154. package/lib/adapter/reporter/OutputStreamBufferPrinter.d.ts +3 -3
  155. package/lib/adapter/reporter/OutputStreamBufferPrinter.d.ts.map +1 -1
  156. package/lib/adapter/reporter/OutputStreamBufferPrinter.js +2 -2
  157. package/lib/adapter/reporter/OutputStreamBufferPrinter.js.map +1 -1
  158. package/lib/adapter/reporter/ProvidesWriteStream.d.ts +1 -1
  159. package/lib/adapter/reporter/ProvidesWriteStream.d.ts.map +1 -1
  160. package/lib/adapter/reporter/TagPrinter.d.ts +2 -2
  161. package/lib/adapter/reporter/TagPrinter.d.ts.map +1 -1
  162. package/lib/adapter/reporter/TagPrinter.js +7 -5
  163. package/lib/adapter/reporter/TagPrinter.js.map +1 -1
  164. package/lib/adapter/reporter/index.d.ts +5 -5
  165. package/lib/adapter/reporter/index.d.ts.map +1 -1
  166. package/lib/adapter/reporter/index.js +5 -5
  167. package/lib/adapter/reporter/index.js.map +1 -1
  168. package/lib/api.d.ts +3 -0
  169. package/lib/api.d.ts.map +1 -0
  170. package/lib/api.js +18 -0
  171. package/lib/api.js.map +1 -0
  172. package/lib/config/WebdriverIOConfig.d.ts +128 -0
  173. package/lib/config/WebdriverIOConfig.d.ts.map +1 -0
  174. package/lib/config/WebdriverIOConfig.js.map +1 -0
  175. package/lib/config/index.d.ts +2 -0
  176. package/lib/config/index.d.ts.map +1 -0
  177. package/lib/config/index.js +18 -0
  178. package/lib/config/index.js.map +1 -0
  179. package/lib/index.d.ts +15 -5
  180. package/lib/index.d.ts.map +1 -1
  181. package/lib/index.js +12 -5
  182. package/lib/index.js.map +1 -1
  183. package/lib/package.json +1 -0
  184. package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts +5 -5
  185. package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts.map +1 -1
  186. package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.js +2 -2
  187. package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.js.map +1 -1
  188. package/lib/screenplay/abilities/index.d.ts +1 -1
  189. package/lib/screenplay/abilities/index.d.ts.map +1 -1
  190. package/lib/screenplay/abilities/index.js +1 -1
  191. package/lib/screenplay/abilities/index.js.map +1 -1
  192. package/lib/screenplay/index.d.ts +2 -2
  193. package/lib/screenplay/index.d.ts.map +1 -1
  194. package/lib/screenplay/index.js +2 -2
  195. package/lib/screenplay/index.js.map +1 -1
  196. package/lib/screenplay/models/WebdriverIOBrowsingSession.d.ts +4 -4
  197. package/lib/screenplay/models/WebdriverIOBrowsingSession.d.ts.map +1 -1
  198. package/lib/screenplay/models/WebdriverIOBrowsingSession.js +12 -12
  199. package/lib/screenplay/models/WebdriverIOBrowsingSession.js.map +1 -1
  200. package/lib/screenplay/models/WebdriverIOCookie.d.ts +2 -2
  201. package/lib/screenplay/models/WebdriverIOCookie.d.ts.map +1 -1
  202. package/lib/screenplay/models/WebdriverIOCookie.js.map +1 -1
  203. package/lib/screenplay/models/WebdriverIOErrorHandler.d.ts +1 -1
  204. package/lib/screenplay/models/WebdriverIOErrorHandler.d.ts.map +1 -1
  205. package/lib/screenplay/models/WebdriverIOModalDialogHandler.d.ts +3 -3
  206. package/lib/screenplay/models/WebdriverIOModalDialogHandler.d.ts.map +1 -1
  207. package/lib/screenplay/models/WebdriverIOModalDialogHandler.js +3 -3
  208. package/lib/screenplay/models/WebdriverIOModalDialogHandler.js.map +1 -1
  209. package/lib/screenplay/models/WebdriverIOPage.d.ts +9 -9
  210. package/lib/screenplay/models/WebdriverIOPage.d.ts.map +1 -1
  211. package/lib/screenplay/models/WebdriverIOPage.js +9 -12
  212. package/lib/screenplay/models/WebdriverIOPage.js.map +1 -1
  213. package/lib/screenplay/models/WebdriverIOPageElement.d.ts +2 -2
  214. package/lib/screenplay/models/WebdriverIOPageElement.d.ts.map +1 -1
  215. package/lib/screenplay/models/WebdriverIOPageElement.js +16 -15
  216. package/lib/screenplay/models/WebdriverIOPageElement.js.map +1 -1
  217. package/lib/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.d.ts +1 -1
  218. package/lib/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.d.ts.map +1 -1
  219. package/lib/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.js.map +1 -1
  220. package/lib/screenplay/models/index.d.ts +4 -4
  221. package/lib/screenplay/models/index.d.ts.map +1 -1
  222. package/lib/screenplay/models/index.js +4 -4
  223. package/lib/screenplay/models/index.js.map +1 -1
  224. package/lib/screenplay/models/locators/WebdriverIOLocator.d.ts +10 -10
  225. package/lib/screenplay/models/locators/WebdriverIOLocator.d.ts.map +1 -1
  226. package/lib/screenplay/models/locators/WebdriverIOLocator.js +3 -3
  227. package/lib/screenplay/models/locators/WebdriverIOLocator.js.map +1 -1
  228. package/lib/screenplay/models/locators/WebdriverIORootLocator.d.ts +5 -5
  229. package/lib/screenplay/models/locators/WebdriverIORootLocator.d.ts.map +1 -1
  230. package/lib/screenplay/models/locators/WebdriverIORootLocator.js.map +1 -1
  231. package/lib/screenplay/models/locators/index.d.ts +2 -2
  232. package/lib/screenplay/models/locators/index.d.ts.map +1 -1
  233. package/lib/screenplay/models/locators/index.js +2 -2
  234. package/lib/screenplay/models/locators/index.js.map +1 -1
  235. package/package.json +39 -42
  236. package/src/adapter/TestRunnerLoader.ts +15 -10
  237. package/src/adapter/WebdriverIOFrameworkAdapter.ts +39 -26
  238. package/src/adapter/WebdriverIOFrameworkAdapterFactory.ts +4 -4
  239. package/src/adapter/WebdriverIONotifier.ts +37 -14
  240. package/src/adapter/index.ts +1 -2
  241. package/src/adapter/reporter/BrowserCapabilitiesReporter.ts +4 -4
  242. package/src/adapter/reporter/InitialisesReporters.ts +2 -2
  243. package/src/adapter/reporter/OutputStreamBuffer.ts +1 -1
  244. package/src/adapter/reporter/OutputStreamBufferPrinter.ts +3 -3
  245. package/src/adapter/reporter/ProvidesWriteStream.ts +1 -1
  246. package/src/adapter/reporter/TagPrinter.ts +6 -4
  247. package/src/adapter/reporter/index.ts +5 -5
  248. package/src/api.ts +2 -0
  249. package/src/config/index.ts +1 -0
  250. package/src/index.ts +27 -10
  251. package/src/screenplay/abilities/BrowseTheWebWithWebdriverIO.ts +5 -5
  252. package/src/screenplay/abilities/index.ts +1 -1
  253. package/src/screenplay/index.ts +2 -2
  254. package/src/screenplay/models/WebdriverIOBrowsingSession.ts +8 -8
  255. package/src/screenplay/models/WebdriverIOCookie.ts +2 -2
  256. package/src/screenplay/models/WebdriverIOErrorHandler.ts +1 -1
  257. package/src/screenplay/models/WebdriverIOModalDialogHandler.ts +4 -4
  258. package/src/screenplay/models/WebdriverIOPage.ts +11 -15
  259. package/src/screenplay/models/WebdriverIOPageElement.ts +21 -21
  260. package/src/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.ts +8 -3
  261. package/src/screenplay/models/index.ts +4 -4
  262. package/src/screenplay/models/locators/WebdriverIOLocator.ts +17 -17
  263. package/src/screenplay/models/locators/WebdriverIORootLocator.ts +5 -5
  264. package/src/screenplay/models/locators/index.ts +2 -2
  265. package/lib/adapter/WebdriverIOConfig.d.ts.map +0 -1
  266. package/lib/adapter/WebdriverIOConfig.js.map +0 -1
  267. package/tsconfig.build.json +0 -17
  268. /package/{lib/adapter → esm/config}/WebdriverIOConfig.d.ts +0 -0
  269. /package/lib/{adapter → config}/WebdriverIOConfig.js +0 -0
  270. /package/src/{adapter → config}/WebdriverIOConfig.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,24 @@
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.2.0](https://github.com/serenity-js/serenity-js/compare/v3.1.6...v3.2.0) (2023-05-05)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **webdriverio:** aligned CJS and ESM exports to offer a consistent developer experience ([c72213b](https://github.com/serenity-js/serenity-js/commit/c72213bc4527cda3bb64f208ebdb74f25b366302))
12
+ * **webdriverio:** support for WebdriverIO 8.10.0 ([71da9f9](https://github.com/serenity-js/serenity-js/commit/71da9f93d6c4af3ae9e1734b38107418ada37f9a))
13
+
14
+
15
+ ### Features
16
+
17
+ * **core:** introduced support for Node.js 20, dropped support for Node.js 14 ([491fef8](https://github.com/serenity-js/serenity-js/commit/491fef8df672a2b40d247887b3da409dccbd26fd)), closes [#1678](https://github.com/serenity-js/serenity-js/issues/1678)
18
+ * **webdriverio:** support for WebdriverIO 8 ([deeedad](https://github.com/serenity-js/serenity-js/commit/deeedadeeb50b5b5709d428e82249901282233ac)), closes [#1541](https://github.com/serenity-js/serenity-js/issues/1541) [#1682](https://github.com/serenity-js/serenity-js/issues/1682) [webdriverio/webdriverio#10314](https://github.com/webdriverio/webdriverio/issues/10314)
19
+
20
+
21
+
22
+
23
+
6
24
  ## [3.1.6](https://github.com/serenity-js/serenity-js/compare/v3.1.5...v3.1.6) (2023-04-18)
7
25
 
8
26
 
package/README.md CHANGED
@@ -5,17 +5,24 @@
5
5
  [![Join Serenity/JS Community Chat](https://img.shields.io/badge/Chat-Serenity%2FJS%20Community-FBD30B?logo=matrix)](https://matrix.to/#/#serenity-js:gitter.im)
6
6
  [![Support Serenity/JS on GitHub](https://img.shields.io/badge/Support-@serenity--js-703EC8?logo=github)](https://github.com/sponsors/serenity-js)
7
7
 
8
- [Serenity/JS](https://serenity-js.org) is an innovative framework designed to make acceptance and regression testing
8
+ [Serenity/JS](https://serenity-js.org) is an innovative open-source framework designed to make acceptance and regression testing
9
9
  of complex software systems faster, more collaborative and easier to scale.
10
10
 
11
- To get started, check out the comprehensive [Serenity/JS Handbook](https://serenity-js.org/handbook), [API documentation](https://serenity-js.org/api/core), and [Serenity/JS project templates on GitHub](https://serenity-js.org/handbook/getting-started#serenityjs-project-templates).
11
+ ⭐️ Get started with Serenity/JS!
12
+ - [Serenity/JS Handbook](https://serenity-js.org/handbook) and [tutorial](https://serenity-js.org/handbook/web-testing/your-first-web-scenario),
13
+ - [API documentation](https://serenity-js.org/api/core),
14
+ - [Serenity/JS project templates on GitHub](https://serenity-js.org/handbook/getting-started#serenityjs-project-templates).
12
15
 
13
- If you have any questions or just want to say hello, join the [Serenity/JS Community Chat](https://matrix.to/#/#serenity-js:gitter.im).
16
+ 👋 Join the Serenity/JS Community!
17
+ - Meet other Serenity/JS developers and maintainers on the [Serenity/JS Community chat channel](https://matrix.to/#/#serenity-js:gitter.im),
18
+ - Find answers to your Serenity/JS questions on the [Serenity/JS Forum](https://github.com/orgs/serenity-js/discussions/categories/how-do-i),
19
+ - Learn how to [contribute to Serenity/JS](https://serenity-js.org/contributing),
20
+ - Support the project and gain access to [Serenity/JS Playbooks](https://github.com/serenity-js/playbooks) by becoming a [Serenity/JS GitHub Sponsor](https://github.com/sponsors/serenity-js)!
14
21
 
15
22
  ## Serenity/JS WebdriverIO
16
23
 
17
- [`@serenity-js/webdriverio`](https://serenity-js.org/modules/webdriverio/) module is a [Screenplay Pattern](https://serenity-js.org/handbook/thinking-in-serenity-js/screenplay-pattern.html)-style adapter
18
- for [WebdriverIO](https://webdriver.io/), that helps with testing Web-based and mobile apps.
24
+ [`@serenity-js/webdriverio`](https://serenity-js.org/api/webdriverio/) module is a [Screenplay Pattern](https://serenity-js.org/handbook/thinking-in-serenity-js/screenplay-pattern.html)-style adapter
25
+ for [WebdriverIO](https://webdriver.io/) that will help you with testing Web and mobile apps.
19
26
 
20
27
  ### Installation
21
28
 
@@ -25,7 +32,7 @@ To install this module, run the following command in your [WebdriverIO project d
25
32
  npm install --save-dev @serenity-js/{assertions,console-reporter,core,serenity-bdd,web,webdriverio}
26
33
  ```
27
34
 
28
- Next, install one of the below test runner adapters.
35
+ Next, install a [Serenity/JS test runner adapter](https://serenity-js.org/handbook/test-runners/) appropriate for your preferred test runner.
29
36
 
30
37
  #### Usage with Cucumber.js
31
38
 
@@ -50,49 +57,34 @@ To use Serenity/JS WebdriverIO with Mocha, install the following adapter:
50
57
  npm install --save-dev @serenity-js/mocha
51
58
  ```
52
59
 
53
- ### Configuring Webdriverio
60
+ ### Configuring WebdriverIO
54
61
 
55
- ```typescript
56
- // serenity/Actors.ts
57
- import { Actor, Cast } from '@serenity-js/core';
58
- import { BrowseTheWebWithWebdriverIO } from '@serenity-js/webdriverio';
59
- import * as wdio from 'webdriverio';
62
+ To integrate Serenity/JS with WebdriverIO,
63
+ configure your `wdio.conf.ts` to specify `framework: '@serenity-js/webdriverio'`.
64
+ You can [configure Serenity/JS](https://serenity-js.org/api/core/class/SerenityConfig) in the same file.
60
65
 
61
- // example Actors class, confgures Serenity/JS actors to use WebdriverIO
62
- class Actors implements Cast {
63
- constructor(private readonly browser: wdio.Browser<'async'>) {
64
- }
65
-
66
- prepare(actor: Actor): Actor {
67
- return actor.whoCan(
68
- BrowseTheWebWithWebdriverIO.using(this.browser),
69
- // ... add other abilities as needed, like CallAnApi or TakeNotes
70
- );
71
- }
72
- }
73
-
74
- ```
75
-
76
- ```typescript
66
+ ```typescript title="wdio.conf.ts"
77
67
  // wdio.conf.ts
78
68
 
79
- // Import Serenity/JS reporting services, a.k.a. the "Stage Crew Members"
69
+ // Optional, import custom Actors if needed; More on this below.
80
70
  import { Actors } from './serenity/Actors.ts'
81
71
 
82
72
  export const config: WebdriverIOConfig = {
73
+
83
74
  // Tell WebdriverIO to use Serenity/JS framework
84
75
  framework: '@serenity-js/webdriverio',
85
76
 
77
+ // Serenity/JS configuration
86
78
  serenity: {
87
79
  // Configure Serenity/JS to use an appropriate test runner adapter
88
80
  runner: 'cucumber',
89
81
  // runner: 'mocha',
90
82
  // runner: 'jasmine',
91
83
 
92
- // register custom Actors class to configure your Serenity/JS actors
93
- actors: new Actors(),
84
+ // Optional, register custom Cast to configure your Serenity/JS actors
85
+ actors: new Actors(`https://api.example.org`),
94
86
 
95
- // Register StageCrewMembers we've imported at the top of this file
87
+ // Register Serenity/JS reporting services, a.k.a. the "stage crew"
96
88
  crew: [
97
89
  '@serenity-js/console-reporter',
98
90
  '@serenity-js/serenity-bdd',
@@ -135,14 +127,58 @@ export const config: WebdriverIOConfig = {
135
127
  ```
136
128
 
137
129
  Learn more about:
138
- - [Cucumber configuration options](https://serenity-js.org/modules/cucumber/class/src/cli/CucumberConfig.ts~CucumberConfig.html)
139
- - [Jasmine configuration options](https://serenity-js.org/modules/jasmine/class/src/adapter/JasmineConfig.ts~JasmineConfig.html)
140
- - [Mocha configuration options](https://serenity-js.org/modules/mocha/class/src/adapter/MochaConfig.ts~MochaConfig.html)
130
+ - [Cucumber configuration options](https://serenity-js.org/api/cucumber-adapter/interface/CucumberConfig/)
131
+ - [Jasmine configuration options](https://serenity-js.org/api/jasmine-adapter/interface/JasmineConfig/)
132
+ - [Mocha configuration options](https://serenity-js.org/api/mocha-adapter/interface/MochaConfig/)
141
133
  - [WebdriverIO configuration file](https://webdriver.io/docs/configurationfile/)
142
134
 
143
- ### Usage with Mocha
135
+ #### Using custom Serenity/JS Actors
136
+
137
+ By default, Serenity/JS uses a default [cast of actors](https://serenity-js.org/api/core/class/Cast) where every actor can:
138
+ - [`BrowseTheWebWithWebdriverIO`](https://serenity-js.org/api/webdriverio/class/BrowseTheWebWithWebdriverIO)
139
+ - [`TakeNotes.usingAnEmptyNotepad()`](https://serenity-js.org/api/core/class/TakeNotes)
140
+
141
+ If you're planning to implement scenarios where [actors](https://serenity-js.org/api/core/class/Actor) have
142
+ additional [abilities](https://serenity-js.org/api/core/class/Ability), you can replace this default setup
143
+ with a custom [`Cast`](https://serenity-js.org/api/core/class/Cast), like this one:
144
+
145
+ ```typescript title="serenity/Actors.ts"
146
+ // serenity/Actors.ts
147
+ import { Actor, Cast, TakeNotes } from '@serenity-js/core';
148
+ import { CallAnApi } from '@serenity-js/rest';
149
+ import { BrowseTheWebWithWebdriverIO } from '@serenity-js/webdriverio';
150
+ import type { Browser } from 'webdriverio';
151
+
152
+ export class Actors implements Cast {
144
153
 
145
- ```typescript
154
+ // Inject custom parameters via constructor
155
+ constructor(private readonly apiUrl: string) {
156
+ }
157
+
158
+ prepare(actor: Actor): Actor {
159
+ // You can assign abilities based on actor name, env variables, and so on
160
+ switch (actor.name) {
161
+
162
+ case 'Apisitt':
163
+ return actor.whoCan(
164
+ CallAnApi.at(this.apiUrl)
165
+ );
166
+
167
+ default:
168
+ return actor.whoCan(
169
+ BrowseTheWebWithWebdriverIO.using(browser), // global WDIO browser
170
+ TakeNotes.usingAnEmptyNotepad(),
171
+ );
172
+ }
173
+
174
+ }
175
+ }
176
+ ```
177
+
178
+ ### Using Serenity/JS with WebdriverIO and Mocha
179
+
180
+ ```typescript title="specs/example.spec.ts"
181
+ // specs/example.spec.ts
146
182
  import { actorCalled } from '@serenity-js/core';
147
183
  import { Ensure, equals } from '@serenity-js/assertions';
148
184
  import { By, Navigate, PageElement, Text } from '@serenity-js/web';
@@ -165,10 +201,10 @@ describe('Serenity/JS', () => {
165
201
  Navigate.to('https://serenity-js.org'),
166
202
  Ensure.that(
167
203
  Text.of(SerenityJSWebsite.header()),
168
- equals('Next generation acceptance testing')
204
+ equals('Enable collaborative test automation at any scale!')
169
205
  ),
170
206
  )
171
- })
207
+ });
172
208
  });
173
209
  ```
174
210
 
@@ -182,6 +218,20 @@ The easiest way for you to start writing web-based acceptance tests using Sereni
182
218
  - [Serenity/JS, Cucumber, and WebdriverIO template](https://github.com/serenity-js/serenity-js-cucumber-webdriverio-template)
183
219
  - Serenity/JS, Jasmine, and WebdriverIO template (coming soon!)
184
220
 
185
- ## More coming soon!
221
+ ## 📣 Stay up to date
222
+
223
+ New features, tutorials, and demos are coming soon!
224
+ Follow [Serenity/JS on LinkedIn](https://www.linkedin.com/company/serenity-js),
225
+ subscribe to [Serenity/JS channel on YouTube](https://www.youtube.com/@serenity-js) and join the [Serenity/JS Community Chat](https://matrix.to/#/#serenity-js:gitter.im) to stay up to date!
226
+ Please also make sure to star ⭐️ [Serenity/JS on GitHub](https://github.com/serenity-js/serenity-js) to help others discover the framework!
227
+
228
+ [![Follow Serenity/JS on LinkedIn](https://img.shields.io/badge/Follow-Serenity%2FJS%20-0077B5?logo=linkedin)](https://www.linkedin.com/company/serenity-js)
229
+ [![Watch Serenity/JS on YouTube](https://img.shields.io/badge/Watch-@serenity--js-E62117?logo=youtube)](https://www.youtube.com/@serenity-js)
230
+ [![Join Serenity/JS Community Chat](https://img.shields.io/badge/Chat-Serenity%2FJS%20Community-FBD30B?logo=matrix)](https://matrix.to/#/#serenity-js:gitter.im)
231
+ [![GitHub stars](https://img.shields.io/github/stars/serenity-js/serenity-js?label=Serenity%2FJS&logo=github&style=badge)](https://github.com/serenity-js/serenity-js)
232
+
233
+ ## 💛 Support Serenity/JS
234
+
235
+ If you appreciate all the effort that goes into making sophisticated tools easy to work with, please support our work and become a Serenity/JS GitHub Sponsor today!
186
236
 
187
- New features, tutorials, and demos are coming soon, so follow us on [LinkedIn](https://www.linkedin.com/company/serenity-js) and join the [Serenity/JS Community Chat channel](https://matrix.to/#/#serenity-js:gitter.im) to stay up to date!
237
+ [![GitHub Sponsors](https://img.shields.io/badge/Support%20@serenity%2FJS-703EC8?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/serenity-js)
@@ -0,0 +1,16 @@
1
+ import { TestRunnerAdapter } from '@serenity-js/core/lib/adapter/index.js';
2
+ import { ModuleLoader, Path } from '@serenity-js/core/lib/io/index.js';
3
+ import { WebdriverIOConfig } from '../config/index.js';
4
+ export declare class TestRunnerLoader {
5
+ private readonly loader;
6
+ private readonly cwd;
7
+ private readonly cid;
8
+ private readonly fileSystem;
9
+ private readonly finder;
10
+ constructor(loader: ModuleLoader, cwd: Path, cid: string);
11
+ runnerAdapterFor(config: WebdriverIOConfig): TestRunnerAdapter;
12
+ private cucumberAdapter;
13
+ private jasmineAdapter;
14
+ private mochaAdapter;
15
+ }
16
+ //# sourceMappingURL=TestRunnerLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestRunnerLoader.d.ts","sourceRoot":"","sources":["../../src/adapter/TestRunnerLoader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAkC,YAAY,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;AAEvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAQvD,qBAAa,gBAAgB;IAKrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IANxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAGf,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,IAAI,EACT,GAAG,EAAE,MAAM;IAMhC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB;IAiB9D,OAAO,CAAC,eAAe;IAuCvB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,YAAY;CAIvB"}
@@ -0,0 +1,58 @@
1
+ import { ConfigurationError } from '@serenity-js/core';
2
+ import { Config, FileFinder, FileSystem, Path } from '@serenity-js/core/lib/io/index.js';
3
+ export class TestRunnerLoader {
4
+ constructor(loader, cwd, cid) {
5
+ this.loader = loader;
6
+ this.cwd = cwd;
7
+ this.cid = cid;
8
+ this.fileSystem = new FileSystem(cwd);
9
+ this.finder = new FileFinder(cwd);
10
+ }
11
+ runnerAdapterFor(config) {
12
+ switch (config?.serenity?.runner) {
13
+ case 'cucumber':
14
+ return this.cucumberAdapter(config?.cucumberOpts);
15
+ case 'jasmine':
16
+ return this.jasmineAdapter(config?.jasmineOpts);
17
+ case 'mocha':
18
+ case undefined:
19
+ return this.mochaAdapter(config?.mochaOpts);
20
+ default:
21
+ throw new ConfigurationError(`"${config?.serenity?.runner}" is not a supported test runner. Please use "mocha", "jasmine", or "cucumber"`);
22
+ }
23
+ }
24
+ cucumberAdapter(cucumberOptions) {
25
+ const { CucumberCLIAdapter, CucumberFormat, StandardOutput, TempFileOutput } = this.loader.require('@serenity-js/cucumber/lib/adapter/index.js');
26
+ delete cucumberOptions?.timeout; // todo: support setting a timeout via config?
27
+ delete cucumberOptions?.parallel; // WebdriverIO handles that already
28
+ const cleanedCucumberOptions = new Config(cucumberOptions)
29
+ .where('require', requires => this.finder.filesMatching(requires).map(p => p.value))
30
+ .where('format', values => [].concat(values).map(value => {
31
+ const format = new CucumberFormat(value);
32
+ if (format.output === '') {
33
+ return format.value;
34
+ }
35
+ const basename = Path.from(format.output).basename();
36
+ const filenameParts = basename.split('.');
37
+ if (filenameParts[0] === basename) {
38
+ return `${format.formatter}:${format.output}.${this.cid}`;
39
+ }
40
+ filenameParts.splice(-1, 0, `${this.cid}`);
41
+ return `${format.formatter}:${format.output.replace(basename, filenameParts.join('.'))}`;
42
+ })).object();
43
+ // check if we need to free up stdout for any native reporters
44
+ const output = cleanedCucumberOptions?.format?.some(format => new CucumberFormat(format).output === '')
45
+ ? new TempFileOutput(this.fileSystem)
46
+ : new StandardOutput();
47
+ return new CucumberCLIAdapter(cleanedCucumberOptions, this.loader, this.fileSystem, output);
48
+ }
49
+ jasmineAdapter(jasmineOptions) {
50
+ const { JasmineAdapter } = this.loader.require('@serenity-js/jasmine/lib/adapter/index.js');
51
+ return new JasmineAdapter(jasmineOptions, this.loader);
52
+ }
53
+ mochaAdapter(mochaOptions) {
54
+ const { MochaAdapter } = this.loader.require('@serenity-js/mocha/lib/adapter/index.js');
55
+ return new MochaAdapter(mochaOptions, this.loader);
56
+ }
57
+ }
58
+ //# sourceMappingURL=TestRunnerLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestRunnerLoader.js","sourceRoot":"","sources":["../../src/adapter/TestRunnerLoader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { Serenity } from '@serenity-js/core';
3
+ import { ModuleLoader, Path } from '@serenity-js/core/lib/io/index.js';
4
+ import type { Capabilities } from '@wdio/types';
5
+ import type { EventEmitter } from 'events';
6
+ import { WebdriverIOConfig } from '../config/index.js';
7
+ import { InitialisesReporters, ProvidesWriteStream } from './reporter/index.js';
8
+ export declare class WebdriverIOFrameworkAdapter {
9
+ private readonly serenity;
10
+ private readonly loader;
11
+ private readonly cwd;
12
+ private readonly cid;
13
+ private readonly specs;
14
+ private readonly capabilities;
15
+ private readonly reporter;
16
+ private adapter;
17
+ private notifier;
18
+ constructor(serenity: Serenity, loader: ModuleLoader, cwd: Path, cid: string, webdriverIOConfig: WebdriverIOConfig, specs: string[], capabilities: Capabilities.RemoteCapability, reporter: EventEmitter & ProvidesWriteStream & InitialisesReporters);
19
+ init(): Promise<WebdriverIOFrameworkAdapter>;
20
+ hasTests(): boolean;
21
+ run(): Promise<number>;
22
+ private defaultConfig;
23
+ }
24
+ //# sourceMappingURL=WebdriverIOFrameworkAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIOFrameworkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/WebdriverIOFrameworkAdapter.ts"],"names":[],"mappings":";AAAA,OAAO,EAA6C,QAAQ,EAAa,MAAM,mBAAmB,CAAC;AAEnG,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAI3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAEH,oBAAoB,EAEpB,mBAAmB,EACtB,MAAM,qBAAqB,CAAC;AAK7B,qBAAa,2BAA2B;IAMhC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAEpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAX7B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAAsB;gBAGjB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,IAAI,EACT,GAAG,EAAE,MAAM,EAC5B,iBAAiB,EAAE,iBAAiB,EACnB,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,EAAE,YAAY,CAAC,gBAAgB,EAC3C,QAAQ,EAAE,YAAY,GAAG,mBAAmB,GAAG,oBAAoB;IAqDlF,IAAI,IAAI,OAAO,CAAC,2BAA2B,CAAC;IAqBlD,QAAQ,IAAI,OAAO;IAIb,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAK5B,OAAO,CAAC,aAAa;CASxB"}
@@ -0,0 +1,77 @@
1
+ import { AnsiDiffFormatter, ArtifactArchiver, Cast, TakeNotes } from '@serenity-js/core';
2
+ import { Path } from '@serenity-js/core/lib/io/index.js';
3
+ import * as deepmerge from 'deepmerge';
4
+ import { isRecord } from 'tiny-types/lib/objects/isRecord.js';
5
+ import { BrowseTheWebWithWebdriverIO } from '../screenplay/index.js';
6
+ import { BrowserCapabilitiesReporter, OutputStreamBuffer } from './reporter/index.js';
7
+ import { OutputStreamBufferPrinter } from './reporter/OutputStreamBufferPrinter.js';
8
+ import { TestRunnerLoader } from './TestRunnerLoader.js';
9
+ import { WebdriverIONotifier } from './WebdriverIONotifier.js';
10
+ export class WebdriverIOFrameworkAdapter {
11
+ constructor(serenity, loader, cwd, cid, webdriverIOConfig, specs, capabilities, reporter) {
12
+ this.serenity = serenity;
13
+ this.loader = loader;
14
+ this.cwd = cwd;
15
+ this.cid = cid;
16
+ this.specs = specs;
17
+ this.capabilities = capabilities;
18
+ this.reporter = reporter;
19
+ const config = deepmerge.default(this.defaultConfig(), webdriverIOConfig, {
20
+ isMergeableObject: isRecord,
21
+ });
22
+ // SauceLabs service serialises the config object for debugging.
23
+ // However, since Serenity/JS Stage is a pub/sub mechanism,
24
+ // it contains cyclic references which are not serialisable.
25
+ // We get rid of them from the config object to avoid confusing other services.
26
+ delete webdriverIOConfig.serenity;
27
+ this.adapter = new TestRunnerLoader(this.loader, this.cwd, this.cid)
28
+ .runnerAdapterFor(config);
29
+ this.notifier = new WebdriverIONotifier(config, capabilities, reporter, this.adapter.successThreshold(), cid, this.specs);
30
+ const outputStreamBuffer = new OutputStreamBuffer(`[${this.cid}]`);
31
+ const outputStreamBufferPrinter = new OutputStreamBufferPrinter(outputStreamBuffer, reporter.getWriteStreamObject('@serenity-js/webdriverio'));
32
+ this.serenity.configure({
33
+ outputStream: outputStreamBuffer,
34
+ cueTimeout: config.serenity.cueTimeout,
35
+ interactionTimeout: config.serenity.interactionTimeout,
36
+ diffFormatter: config.serenity.diffFormatter ?? new AnsiDiffFormatter(),
37
+ actors: config.serenity.actors || Cast.where(actor => actor.whoCan(BrowseTheWebWithWebdriverIO.using(global.browser), TakeNotes.usingAnEmptyNotepad())),
38
+ crew: [
39
+ ...config.serenity.crew,
40
+ this.notifier,
41
+ outputStreamBufferPrinter,
42
+ ]
43
+ });
44
+ }
45
+ async init() {
46
+ // This is the only (hacky) way to register a fake reporter programmatically (as of @wdio/reporter 7.4.2)
47
+ // - https://github.com/webdriverio/webdriverio/blob/365fb0ad79fcf4471f21f23e18afa6818986dbdb/packages/wdio-runner/src/index.ts#L147-L181
48
+ // - https://github.com/webdriverio/webdriverio/blob/365fb0ad79fcf4471f21f23e18afa6818986dbdb/packages/wdio-runner/src/reporter.ts#L24
49
+ const browserCapabilitiesReporter = await (this.reporter._loadReporter([
50
+ BrowserCapabilitiesReporter, {
51
+ serenity: this.serenity
52
+ },
53
+ ]));
54
+ this.reporter._reporters.push(browserCapabilitiesReporter);
55
+ // WebdriverIO v8 represents paths to specs as file URIs, so they need to be converted to absolute paths to avoid confusing the test runners like Cucumber
56
+ const absolutePaths = this.specs.map(pathToSpec => Path.fromURI(pathToSpec).value);
57
+ await this.adapter.load(absolutePaths);
58
+ return this;
59
+ }
60
+ hasTests() {
61
+ return this.adapter.scenarioCount() > 0;
62
+ }
63
+ async run() {
64
+ await this.adapter.run();
65
+ return this.notifier.failureCount();
66
+ }
67
+ defaultConfig() {
68
+ return {
69
+ serenity: {
70
+ crew: [
71
+ ArtifactArchiver.storingArtifactsAt(this.cwd.value, 'target/site/serenity'),
72
+ ]
73
+ }
74
+ };
75
+ }
76
+ }
77
+ //# sourceMappingURL=WebdriverIOFrameworkAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIOFrameworkAdapter.js","sourceRoot":"","sources":["../../src/adapter/WebdriverIOFrameworkAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { Serenity } from '@serenity-js/core';
3
+ import { ModuleLoader, Path } from '@serenity-js/core/lib/io/index.js';
4
+ import type { Capabilities } from '@wdio/types';
5
+ import type { EventEmitter } from 'events';
6
+ import { WebdriverIOConfig } from '../config/index.js';
7
+ import { InitialisesReporters, ProvidesWriteStream } from './reporter/index.js';
8
+ import { WebdriverIOFrameworkAdapter } from './WebdriverIOFrameworkAdapter.js';
9
+ /**
10
+ * @group Test Runner Adapter
11
+ */
12
+ export declare class WebdriverIOFrameworkAdapterFactory {
13
+ private readonly serenity;
14
+ private readonly loader;
15
+ private readonly cwd;
16
+ constructor(serenity: Serenity, loader: ModuleLoader, cwd: Path);
17
+ init(cid: string, config: WebdriverIOConfig, specs: string[], capabilities: Capabilities.RemoteCapability, reporter: EventEmitter & ProvidesWriteStream & InitialisesReporters): Promise<WebdriverIOFrameworkAdapter>;
18
+ }
19
+ //# sourceMappingURL=WebdriverIOFrameworkAdapterFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIOFrameworkAdapterFactory.d.ts","sourceRoot":"","sources":["../../src/adapter/WebdriverIOFrameworkAdapterFactory.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E;;GAEG;AACH,qBAAa,kCAAkC;IAEvC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAFH,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,IAAI;IAIvB,IAAI,CACP,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,EAAE,YAAY,CAAC,gBAAgB,EAC3C,QAAQ,EAAE,YAAY,GAAG,mBAAmB,GAAG,oBAAoB,GACpE,OAAO,CAAC,2BAA2B,CAAC;CAY1C"}
@@ -0,0 +1,15 @@
1
+ import { WebdriverIOFrameworkAdapter } from './WebdriverIOFrameworkAdapter.js';
2
+ /**
3
+ * @group Test Runner Adapter
4
+ */
5
+ export class WebdriverIOFrameworkAdapterFactory {
6
+ constructor(serenity, loader, cwd) {
7
+ this.serenity = serenity;
8
+ this.loader = loader;
9
+ this.cwd = cwd;
10
+ }
11
+ init(cid, config, specs, capabilities, reporter) {
12
+ return new WebdriverIOFrameworkAdapter(this.serenity, this.loader, this.cwd, cid, config, specs, capabilities, reporter).init();
13
+ }
14
+ }
15
+ //# sourceMappingURL=WebdriverIOFrameworkAdapterFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIOFrameworkAdapterFactory.js","sourceRoot":"","sources":["../../src/adapter/WebdriverIOFrameworkAdapterFactory.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E;;GAEG;AACH,MAAM,OAAO,kCAAkC;IAC3C,YACqB,QAAkB,EAClB,MAAoB,EACpB,GAAS;QAFT,aAAQ,GAAR,QAAQ,CAAU;QAClB,WAAM,GAAN,MAAM,CAAc;QACpB,QAAG,GAAH,GAAG,CAAM;IAE9B,CAAC;IAEM,IAAI,CACP,GAAW,EACX,MAAyB,EACzB,KAAe,EACf,YAA2C,EAC3C,QAAmE;QAEnE,OAAO,IAAI,2BAA2B,CAClC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,GAAG,EACR,GAAG,EACH,MAAM,EACN,KAAK,EACL,YAAY,EACZ,QAAQ,CACX,CAAC,IAAI,EAAE,CAAA;IACZ,CAAC;CACJ"}
@@ -0,0 +1,72 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { Stage, StageCrewMember } from '@serenity-js/core';
3
+ import { DomainEvent } from '@serenity-js/core/lib/events/index.js';
4
+ import { Outcome } from '@serenity-js/core/lib/model/index.js';
5
+ import type { Capabilities } from '@wdio/types';
6
+ import type { EventEmitter } from 'events';
7
+ import { WebdriverIOConfig } from '../config/index.js';
8
+ /**
9
+ * @package
10
+ */
11
+ export declare class WebdriverIONotifier implements StageCrewMember {
12
+ private readonly config;
13
+ private readonly capabilities;
14
+ private readonly reporter;
15
+ private readonly successThreshold;
16
+ private readonly cid;
17
+ private readonly specs;
18
+ private failures;
19
+ private stage?;
20
+ /**
21
+ * We don't have access to the "context" object produced by Mocha,
22
+ * and can't assume that other test runners have a similar concept.
23
+ * Since, at the time of writing, none of the WebdriverIO rely on this parameter
24
+ * using a dummy seems to be sufficient.
25
+ * @private
26
+ */
27
+ private static dummmyContext;
28
+ private readonly events;
29
+ private readonly suites;
30
+ constructor(config: WebdriverIOConfig, capabilities: Capabilities.RemoteCapability, reporter: EventEmitter, successThreshold: Outcome | {
31
+ Code: number;
32
+ }, cid: string, specs: string[], failures?: number, stage?: Stage);
33
+ assignedTo(stage: Stage): StageCrewMember;
34
+ notifyOf(event: DomainEvent): void;
35
+ private onTestRunFinishes;
36
+ failureCount(): number;
37
+ private onTestSuiteStarts;
38
+ private onTestSuiteFinished;
39
+ private suiteStartEventFrom;
40
+ private suiteNamesConcatenatedWith;
41
+ private suiteEndEventFrom;
42
+ private onSceneStarts;
43
+ private onSceneFinished;
44
+ private willBeRetried;
45
+ private testShortTitleFrom;
46
+ private testFrom;
47
+ private testStartEventFrom;
48
+ private parentSuiteName;
49
+ /**
50
+ * test status is 'passed' | 'pending' | 'skipped' | 'failed' | 'broken' | 'canceled'
51
+ * Since this is not documented, we're mimicking other WebdriverIO reporters, for example:
52
+ * https://github.com/webdriverio/webdriverio/blob/7415f3126e15a733b51721492e4995ceafae6046/packages/wdio-allure-reporter/src/constants.ts#L3-L9
53
+ *
54
+ * @param started
55
+ * @param finished
56
+ * @private
57
+ */
58
+ private testResultFrom;
59
+ private testEndEventFrom;
60
+ private whenSuccessful;
61
+ private testResultEventFrom;
62
+ private errorFrom;
63
+ /**
64
+ * @see https://github.com/webdriverio/webdriverio/blob/main/packages/wdio-utils/src/shim.ts
65
+ * @param hookName
66
+ * @param hookFunctions
67
+ * @param args
68
+ * @private
69
+ */
70
+ private invokeHooks;
71
+ }
72
+ //# sourceMappingURL=WebdriverIONotifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebdriverIONotifier.d.ts","sourceRoot":"","sources":["../../src/adapter/WebdriverIONotifier.ts"],"names":[],"mappings":";AAAA,OAAO,EAAc,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAoD,WAAW,EAAmF,MAAM,uCAAuC,CAAC;AACvM,OAAO,EASH,OAAO,EAGV,MAAM,sCAAsC,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAG3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA2BvD;;GAEG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IAenD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,KAAK,CAAC;IApBlB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa,CAAM;IAElC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;gBAG5B,MAAM,EAAE,iBAAiB,EACzB,YAAY,EAAE,YAAY,CAAC,gBAAgB,EAC3C,QAAQ,EAAE,YAAY,EACtB,gBAAgB,EAAE,OAAO,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAC5C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,EACxB,QAAQ,GAAE,MAAU,EACpB,KAAK,CAAC,EAAE,KAAK;IAIzB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe;IAKzC,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAUlC,OAAO,CAAC,iBAAiB;IAIzB,YAAY,IAAI,MAAM;IAItB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,eAAe;IAIvB;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IA+EtB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,mBAAmB;IAmD3B,OAAO,CAAC,SAAS;IAcjB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;CAkDtB"}