@serenity-js/web 3.0.0-rc.9 → 3.0.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 (413) hide show
  1. package/CHANGELOG.md +329 -74
  2. package/README.md +8 -12
  3. package/lib/errors/BrowserWindowClosedError.d.ts +15 -0
  4. package/lib/errors/BrowserWindowClosedError.d.ts.map +1 -0
  5. package/lib/errors/BrowserWindowClosedError.js +21 -0
  6. package/lib/errors/BrowserWindowClosedError.js.map +1 -0
  7. package/lib/errors/CookieMissingError.d.ts +11 -0
  8. package/lib/errors/CookieMissingError.d.ts.map +1 -0
  9. package/lib/errors/CookieMissingError.js +10 -0
  10. package/lib/errors/CookieMissingError.js.map +1 -1
  11. package/lib/errors/ModalDialogObstructsScreenshotError.d.ts +15 -0
  12. package/lib/errors/ModalDialogObstructsScreenshotError.d.ts.map +1 -0
  13. package/lib/errors/ModalDialogObstructsScreenshotError.js +21 -0
  14. package/lib/errors/ModalDialogObstructsScreenshotError.js.map +1 -0
  15. package/lib/errors/index.d.ts +3 -0
  16. package/lib/errors/index.d.ts.map +1 -0
  17. package/lib/errors/index.js +7 -1
  18. package/lib/errors/index.js.map +1 -1
  19. package/lib/expectations/index.d.ts +1 -1
  20. package/lib/expectations/index.d.ts.map +1 -0
  21. package/lib/expectations/index.js +5 -2
  22. package/lib/expectations/index.js.map +1 -1
  23. package/lib/expectations/isActive.d.ts +14 -8
  24. package/lib/expectations/isActive.d.ts.map +1 -0
  25. package/lib/expectations/isActive.js +17 -11
  26. package/lib/expectations/isActive.js.map +1 -1
  27. package/lib/expectations/isClickable.d.ts +14 -13
  28. package/lib/expectations/isClickable.d.ts.map +1 -0
  29. package/lib/expectations/isClickable.js +15 -17
  30. package/lib/expectations/isClickable.js.map +1 -1
  31. package/lib/expectations/isEnabled.d.ts +14 -7
  32. package/lib/expectations/isEnabled.d.ts.map +1 -0
  33. package/lib/expectations/isEnabled.js +17 -9
  34. package/lib/expectations/isEnabled.js.map +1 -1
  35. package/lib/expectations/isSelected.d.ts +14 -7
  36. package/lib/expectations/isSelected.d.ts.map +1 -0
  37. package/lib/expectations/isSelected.js +15 -9
  38. package/lib/expectations/isSelected.js.map +1 -1
  39. package/lib/expectations/isVisible.d.ts +14 -7
  40. package/lib/expectations/isVisible.d.ts.map +1 -0
  41. package/lib/expectations/isVisible.js +17 -9
  42. package/lib/expectations/isVisible.js.map +1 -1
  43. package/lib/index.d.ts +1 -1
  44. package/lib/index.d.ts.map +1 -0
  45. package/lib/index.js +5 -2
  46. package/lib/index.js.map +1 -1
  47. package/lib/screenplay/abilities/BrowseTheWeb.d.ts +88 -45
  48. package/lib/screenplay/abilities/BrowseTheWeb.d.ts.map +1 -0
  49. package/lib/screenplay/abilities/BrowseTheWeb.js +89 -19
  50. package/lib/screenplay/abilities/BrowseTheWeb.js.map +1 -1
  51. package/lib/screenplay/abilities/index.d.ts +1 -1
  52. package/lib/screenplay/abilities/index.d.ts.map +1 -0
  53. package/lib/screenplay/abilities/index.js +5 -2
  54. package/lib/screenplay/abilities/index.js.map +1 -1
  55. package/lib/screenplay/index.d.ts +1 -0
  56. package/lib/screenplay/index.d.ts.map +1 -0
  57. package/lib/screenplay/index.js +5 -1
  58. package/lib/screenplay/index.js.map +1 -1
  59. package/lib/screenplay/interactions/Clear.d.ts +50 -55
  60. package/lib/screenplay/interactions/Clear.d.ts.map +1 -0
  61. package/lib/screenplay/interactions/Clear.js +70 -63
  62. package/lib/screenplay/interactions/Clear.js.map +1 -1
  63. package/lib/screenplay/interactions/Click.d.ts +41 -50
  64. package/lib/screenplay/interactions/Click.d.ts.map +1 -0
  65. package/lib/screenplay/interactions/Click.js +45 -55
  66. package/lib/screenplay/interactions/Click.js.map +1 -1
  67. package/lib/screenplay/interactions/DoubleClick.d.ts +64 -67
  68. package/lib/screenplay/interactions/DoubleClick.d.ts.map +1 -0
  69. package/lib/screenplay/interactions/DoubleClick.js +68 -72
  70. package/lib/screenplay/interactions/DoubleClick.js.map +1 -1
  71. package/lib/screenplay/interactions/Enter.d.ts +42 -51
  72. package/lib/screenplay/interactions/Enter.d.ts.map +1 -0
  73. package/lib/screenplay/interactions/Enter.js +42 -52
  74. package/lib/screenplay/interactions/Enter.js.map +1 -1
  75. package/lib/screenplay/interactions/ExecuteScript.d.ts +144 -148
  76. package/lib/screenplay/interactions/ExecuteScript.d.ts.map +1 -0
  77. package/lib/screenplay/interactions/ExecuteScript.js +163 -185
  78. package/lib/screenplay/interactions/ExecuteScript.js.map +1 -1
  79. package/lib/screenplay/interactions/Hover.d.ts +40 -50
  80. package/lib/screenplay/interactions/Hover.d.ts.map +1 -0
  81. package/lib/screenplay/interactions/Hover.js +44 -55
  82. package/lib/screenplay/interactions/Hover.js.map +1 -1
  83. package/lib/screenplay/interactions/Navigate.d.ts +106 -113
  84. package/lib/screenplay/interactions/Navigate.d.ts.map +1 -0
  85. package/lib/screenplay/interactions/Navigate.js +124 -146
  86. package/lib/screenplay/interactions/Navigate.js.map +1 -1
  87. package/lib/screenplay/interactions/PageElementInteraction.d.ts +12 -28
  88. package/lib/screenplay/interactions/PageElementInteraction.d.ts.map +1 -0
  89. package/lib/screenplay/interactions/PageElementInteraction.js +12 -33
  90. package/lib/screenplay/interactions/PageElementInteraction.js.map +1 -1
  91. package/lib/screenplay/interactions/Press.d.ts +61 -55
  92. package/lib/screenplay/interactions/Press.d.ts.map +1 -0
  93. package/lib/screenplay/interactions/Press.js +83 -72
  94. package/lib/screenplay/interactions/Press.js.map +1 -1
  95. package/lib/screenplay/interactions/RightClick.d.ts +59 -65
  96. package/lib/screenplay/interactions/RightClick.d.ts.map +1 -0
  97. package/lib/screenplay/interactions/RightClick.js +63 -70
  98. package/lib/screenplay/interactions/RightClick.js.map +1 -1
  99. package/lib/screenplay/interactions/Scroll.d.ts +46 -64
  100. package/lib/screenplay/interactions/Scroll.d.ts.map +1 -0
  101. package/lib/screenplay/interactions/Scroll.js +49 -71
  102. package/lib/screenplay/interactions/Scroll.js.map +1 -1
  103. package/lib/screenplay/interactions/Select.d.ts +217 -193
  104. package/lib/screenplay/interactions/Select.d.ts.map +1 -0
  105. package/lib/screenplay/interactions/Select.js +218 -245
  106. package/lib/screenplay/interactions/Select.js.map +1 -1
  107. package/lib/screenplay/interactions/Switch.d.ts +105 -128
  108. package/lib/screenplay/interactions/Switch.d.ts.map +1 -0
  109. package/lib/screenplay/interactions/Switch.js +121 -172
  110. package/lib/screenplay/interactions/Switch.js.map +1 -1
  111. package/lib/screenplay/interactions/TakeScreenshot.d.ts +28 -50
  112. package/lib/screenplay/interactions/TakeScreenshot.d.ts.map +1 -0
  113. package/lib/screenplay/interactions/TakeScreenshot.js +32 -57
  114. package/lib/screenplay/interactions/TakeScreenshot.js.map +1 -1
  115. package/lib/screenplay/interactions/index.d.ts +2 -3
  116. package/lib/screenplay/interactions/index.d.ts.map +1 -0
  117. package/lib/screenplay/interactions/index.js +6 -4
  118. package/lib/screenplay/interactions/index.js.map +1 -1
  119. package/lib/screenplay/models/BrowserCapabilities.d.ts +24 -0
  120. package/lib/screenplay/models/BrowserCapabilities.d.ts.map +1 -0
  121. package/lib/screenplay/models/BrowserCapabilities.js.map +1 -0
  122. package/lib/screenplay/models/BrowsingSession.d.ts +69 -0
  123. package/lib/screenplay/models/BrowsingSession.d.ts.map +1 -0
  124. package/lib/screenplay/models/BrowsingSession.js +101 -0
  125. package/lib/screenplay/models/BrowsingSession.js.map +1 -0
  126. package/lib/screenplay/models/Cookie.d.ts +104 -64
  127. package/lib/screenplay/models/Cookie.d.ts.map +1 -0
  128. package/lib/screenplay/models/Cookie.js +110 -59
  129. package/lib/screenplay/models/Cookie.js.map +1 -1
  130. package/lib/screenplay/models/CookieData.d.ts +20 -58
  131. package/lib/screenplay/models/CookieData.d.ts.map +1 -0
  132. package/lib/{input → screenplay/models}/Key.d.ts +13 -9
  133. package/lib/screenplay/models/Key.d.ts.map +1 -0
  134. package/lib/{input → screenplay/models}/Key.js +16 -13
  135. package/lib/screenplay/models/Key.js.map +1 -0
  136. package/lib/screenplay/models/Locator.d.ts +29 -8
  137. package/lib/screenplay/models/Locator.d.ts.map +1 -0
  138. package/lib/screenplay/models/Locator.js +53 -7
  139. package/lib/screenplay/models/Locator.js.map +1 -1
  140. package/lib/screenplay/models/Page.d.ts +398 -36
  141. package/lib/screenplay/models/Page.d.ts.map +1 -0
  142. package/lib/screenplay/models/Page.js +209 -4
  143. package/lib/screenplay/models/Page.js.map +1 -1
  144. package/lib/screenplay/models/PageElement.d.ts +77 -5
  145. package/lib/screenplay/models/PageElement.d.ts.map +1 -0
  146. package/lib/screenplay/models/PageElement.js +29 -7
  147. package/lib/screenplay/models/PageElement.js.map +1 -1
  148. package/lib/screenplay/models/PageElements.d.ts +16 -3
  149. package/lib/screenplay/models/PageElements.d.ts.map +1 -0
  150. package/lib/screenplay/models/PageElements.js +21 -8
  151. package/lib/screenplay/models/PageElements.js.map +1 -1
  152. package/lib/screenplay/models/RootLocator.d.ts +25 -0
  153. package/lib/screenplay/models/RootLocator.d.ts.map +1 -0
  154. package/lib/screenplay/models/RootLocator.js +52 -0
  155. package/lib/screenplay/models/RootLocator.js.map +1 -0
  156. package/lib/screenplay/models/SelectOption.d.ts +25 -0
  157. package/lib/screenplay/models/SelectOption.d.ts.map +1 -0
  158. package/lib/screenplay/models/SelectOption.js +37 -0
  159. package/lib/screenplay/models/SelectOption.js.map +1 -0
  160. package/lib/screenplay/models/Switchable.d.ts +23 -0
  161. package/lib/screenplay/models/Switchable.d.ts.map +1 -0
  162. package/lib/screenplay/{interactions/WaitBuilder.js → models/Switchable.js} +1 -1
  163. package/lib/screenplay/models/Switchable.js.map +1 -0
  164. package/lib/screenplay/models/SwitchableOrigin.d.ts +18 -0
  165. package/lib/screenplay/models/SwitchableOrigin.d.ts.map +1 -0
  166. package/lib/screenplay/{interactions/EnterBuilder.js → models/SwitchableOrigin.js} +1 -1
  167. package/lib/screenplay/models/SwitchableOrigin.js.map +1 -0
  168. package/lib/screenplay/models/dialogs/AbsentModalDialog.d.ts +15 -0
  169. package/lib/screenplay/models/dialogs/AbsentModalDialog.d.ts.map +1 -0
  170. package/lib/screenplay/models/dialogs/AbsentModalDialog.js +24 -0
  171. package/lib/screenplay/models/dialogs/AbsentModalDialog.js.map +1 -0
  172. package/lib/screenplay/models/dialogs/AcceptedModalDialog.d.ts +17 -0
  173. package/lib/screenplay/models/dialogs/AcceptedModalDialog.d.ts.map +1 -0
  174. package/lib/screenplay/models/dialogs/AcceptedModalDialog.js +29 -0
  175. package/lib/screenplay/models/dialogs/AcceptedModalDialog.js.map +1 -0
  176. package/lib/screenplay/models/dialogs/DismissedModalDialog.d.ts +17 -0
  177. package/lib/screenplay/models/dialogs/DismissedModalDialog.d.ts.map +1 -0
  178. package/lib/screenplay/models/dialogs/DismissedModalDialog.js +29 -0
  179. package/lib/screenplay/models/dialogs/DismissedModalDialog.js.map +1 -0
  180. package/lib/screenplay/models/dialogs/ModalDialog.d.ts +168 -0
  181. package/lib/screenplay/models/dialogs/ModalDialog.d.ts.map +1 -0
  182. package/lib/screenplay/models/dialogs/ModalDialog.js +174 -0
  183. package/lib/screenplay/models/dialogs/ModalDialog.js.map +1 -0
  184. package/lib/screenplay/models/dialogs/ModalDialogHandler.d.ts +38 -0
  185. package/lib/screenplay/models/dialogs/ModalDialogHandler.d.ts.map +1 -0
  186. package/lib/screenplay/models/dialogs/ModalDialogHandler.js +30 -0
  187. package/lib/screenplay/models/dialogs/ModalDialogHandler.js.map +1 -0
  188. package/lib/screenplay/models/dialogs/index.d.ts +6 -0
  189. package/lib/screenplay/models/dialogs/index.d.ts.map +1 -0
  190. package/lib/screenplay/models/dialogs/index.js +22 -0
  191. package/lib/screenplay/models/dialogs/index.js.map +1 -0
  192. package/lib/screenplay/models/index.d.ts +9 -1
  193. package/lib/screenplay/models/index.d.ts.map +1 -0
  194. package/lib/screenplay/models/index.js +13 -2
  195. package/lib/screenplay/models/index.js.map +1 -1
  196. package/lib/screenplay/models/selectors/By.d.ts +38 -0
  197. package/lib/screenplay/models/selectors/By.d.ts.map +1 -0
  198. package/lib/screenplay/models/selectors/By.js +43 -0
  199. package/lib/screenplay/models/selectors/By.js.map +1 -1
  200. package/lib/screenplay/models/selectors/ByCss.d.ts +8 -0
  201. package/lib/screenplay/models/selectors/ByCss.d.ts.map +1 -0
  202. package/lib/screenplay/models/selectors/ByCss.js +7 -0
  203. package/lib/screenplay/models/selectors/ByCss.js.map +1 -1
  204. package/lib/screenplay/models/selectors/ByCssContainingText.d.ts +9 -0
  205. package/lib/screenplay/models/selectors/ByCssContainingText.d.ts.map +1 -0
  206. package/lib/screenplay/models/selectors/ByCssContainingText.js +8 -0
  207. package/lib/screenplay/models/selectors/ByCssContainingText.js.map +1 -1
  208. package/lib/screenplay/models/selectors/ByDeepCss.d.ts +14 -0
  209. package/lib/screenplay/models/selectors/ByDeepCss.d.ts.map +1 -0
  210. package/lib/screenplay/models/selectors/ByDeepCss.js +20 -0
  211. package/lib/screenplay/models/selectors/ByDeepCss.js.map +1 -0
  212. package/lib/screenplay/models/selectors/ById.d.ts +8 -0
  213. package/lib/screenplay/models/selectors/ById.d.ts.map +1 -0
  214. package/lib/screenplay/models/selectors/ById.js +7 -0
  215. package/lib/screenplay/models/selectors/ById.js.map +1 -1
  216. package/lib/screenplay/models/selectors/ByTagName.d.ts +8 -0
  217. package/lib/screenplay/models/selectors/ByTagName.d.ts.map +1 -0
  218. package/lib/screenplay/models/selectors/ByTagName.js +7 -0
  219. package/lib/screenplay/models/selectors/ByTagName.js.map +1 -1
  220. package/lib/screenplay/models/selectors/ByXPath.d.ts +8 -0
  221. package/lib/screenplay/models/selectors/ByXPath.d.ts.map +1 -0
  222. package/lib/screenplay/models/selectors/ByXPath.js +7 -0
  223. package/lib/screenplay/models/selectors/ByXPath.js.map +1 -1
  224. package/lib/screenplay/models/selectors/Selector.d.ts +6 -0
  225. package/lib/screenplay/models/selectors/Selector.d.ts.map +1 -0
  226. package/lib/screenplay/models/selectors/Selector.js +6 -1
  227. package/lib/screenplay/models/selectors/Selector.js.map +1 -1
  228. package/lib/screenplay/models/selectors/index.d.ts +2 -0
  229. package/lib/screenplay/models/selectors/index.d.ts.map +1 -0
  230. package/lib/screenplay/models/selectors/index.js +6 -1
  231. package/lib/screenplay/models/selectors/index.js.map +1 -1
  232. package/lib/screenplay/questions/Attribute.d.ts +115 -67
  233. package/lib/screenplay/questions/Attribute.d.ts.map +1 -0
  234. package/lib/screenplay/questions/Attribute.js +128 -74
  235. package/lib/screenplay/questions/Attribute.js.map +1 -1
  236. package/lib/screenplay/questions/CssClasses.d.ts +124 -79
  237. package/lib/screenplay/questions/CssClasses.d.ts.map +1 -0
  238. package/lib/screenplay/questions/CssClasses.js +132 -83
  239. package/lib/screenplay/questions/CssClasses.js.map +1 -1
  240. package/lib/screenplay/questions/LastScriptExecution.d.ts +42 -6
  241. package/lib/screenplay/questions/LastScriptExecution.d.ts.map +1 -0
  242. package/lib/screenplay/questions/LastScriptExecution.js +45 -7
  243. package/lib/screenplay/questions/LastScriptExecution.js.map +1 -1
  244. package/lib/screenplay/questions/Selected.d.ts +202 -171
  245. package/lib/screenplay/questions/Selected.d.ts.map +1 -0
  246. package/lib/screenplay/questions/Selected.js +225 -186
  247. package/lib/screenplay/questions/Selected.js.map +1 -1
  248. package/lib/screenplay/questions/Text.d.ts +101 -82
  249. package/lib/screenplay/questions/Text.d.ts.map +1 -0
  250. package/lib/screenplay/questions/Text.js +143 -92
  251. package/lib/screenplay/questions/Text.js.map +1 -1
  252. package/lib/screenplay/questions/Value.d.ts +77 -44
  253. package/lib/screenplay/questions/Value.d.ts.map +1 -0
  254. package/lib/screenplay/questions/Value.js +84 -47
  255. package/lib/screenplay/questions/Value.js.map +1 -1
  256. package/lib/screenplay/questions/index.d.ts +1 -0
  257. package/lib/screenplay/questions/index.d.ts.map +1 -0
  258. package/lib/screenplay/questions/index.js +5 -1
  259. package/lib/screenplay/questions/index.js.map +1 -1
  260. package/lib/scripts/index.d.ts +2 -0
  261. package/lib/scripts/index.d.ts.map +1 -0
  262. package/lib/{input → scripts}/index.js +6 -2
  263. package/lib/scripts/index.js.map +1 -0
  264. package/lib/scripts/isVisible.d.ts +2 -0
  265. package/lib/scripts/isVisible.d.ts.map +1 -0
  266. package/lib/scripts/isVisible.js +96 -0
  267. package/lib/scripts/isVisible.js.map +1 -0
  268. package/lib/stage/crew/index.d.ts +1 -0
  269. package/lib/stage/crew/index.d.ts.map +1 -0
  270. package/lib/stage/crew/index.js +5 -1
  271. package/lib/stage/crew/index.js.map +1 -1
  272. package/lib/stage/crew/photographer/Photographer.d.ts +126 -39
  273. package/lib/stage/crew/photographer/Photographer.d.ts.map +1 -0
  274. package/lib/stage/crew/photographer/Photographer.js +161 -42
  275. package/lib/stage/crew/photographer/Photographer.js.map +1 -1
  276. package/lib/stage/crew/photographer/index.d.ts +1 -0
  277. package/lib/stage/crew/photographer/index.d.ts.map +1 -0
  278. package/lib/stage/crew/photographer/index.js +5 -1
  279. package/lib/stage/crew/photographer/index.js.map +1 -1
  280. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.d.ts +13 -12
  281. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.d.ts.map +1 -0
  282. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js +22 -33
  283. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js.map +1 -1
  284. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.d.ts +8 -8
  285. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.d.ts.map +1 -0
  286. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.js +7 -8
  287. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.js.map +1 -1
  288. package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.d.ts +8 -7
  289. package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.d.ts.map +1 -0
  290. package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.js +7 -7
  291. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.d.ts +8 -8
  292. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.d.ts.map +1 -0
  293. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.js +7 -8
  294. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.js.map +1 -1
  295. package/lib/stage/crew/photographer/strategies/index.d.ts +1 -0
  296. package/lib/stage/crew/photographer/strategies/index.d.ts.map +1 -0
  297. package/lib/stage/crew/photographer/strategies/index.js +5 -1
  298. package/lib/stage/crew/photographer/strategies/index.js.map +1 -1
  299. package/lib/stage/index.d.ts +1 -0
  300. package/lib/stage/index.d.ts.map +1 -0
  301. package/lib/stage/index.js +5 -1
  302. package/lib/stage/index.js.map +1 -1
  303. package/package.json +20 -43
  304. package/src/errors/BrowserWindowClosedError.ts +17 -0
  305. package/src/errors/CookieMissingError.ts +10 -0
  306. package/src/errors/ModalDialogObstructsScreenshotError.ts +17 -0
  307. package/src/errors/index.ts +2 -0
  308. package/src/expectations/index.ts +0 -1
  309. package/src/expectations/isActive.ts +23 -12
  310. package/src/expectations/isClickable.ts +22 -21
  311. package/src/expectations/isEnabled.ts +23 -9
  312. package/src/expectations/isSelected.ts +20 -10
  313. package/src/expectations/isVisible.ts +23 -9
  314. package/src/index.ts +0 -1
  315. package/src/screenplay/abilities/BrowseTheWeb.ts +95 -87
  316. package/src/screenplay/abilities/index.ts +0 -1
  317. package/src/screenplay/interactions/Clear.ts +75 -63
  318. package/src/screenplay/interactions/Click.ts +43 -54
  319. package/src/screenplay/interactions/DoubleClick.ts +66 -71
  320. package/src/screenplay/interactions/Enter.ts +41 -53
  321. package/src/screenplay/interactions/ExecuteScript.ts +207 -220
  322. package/src/screenplay/interactions/Hover.ts +42 -54
  323. package/src/screenplay/interactions/Navigate.ts +129 -156
  324. package/src/screenplay/interactions/PageElementInteraction.ts +14 -34
  325. package/src/screenplay/interactions/Press.ts +78 -69
  326. package/src/screenplay/interactions/RightClick.ts +61 -69
  327. package/src/screenplay/interactions/Scroll.ts +48 -71
  328. package/src/screenplay/interactions/Select.ts +229 -269
  329. package/src/screenplay/interactions/Switch.ts +123 -179
  330. package/src/screenplay/interactions/TakeScreenshot.ts +31 -57
  331. package/src/screenplay/interactions/index.ts +1 -3
  332. package/src/screenplay/models/BrowserCapabilities.ts +26 -0
  333. package/src/screenplay/models/BrowsingSession.ts +115 -0
  334. package/src/screenplay/models/Cookie.ts +115 -73
  335. package/src/screenplay/models/CookieData.ts +20 -58
  336. package/src/{input → screenplay/models}/Key.ts +12 -9
  337. package/src/screenplay/models/Locator.ts +43 -9
  338. package/src/screenplay/models/Page.ts +438 -37
  339. package/src/screenplay/models/PageElement.ts +92 -12
  340. package/src/screenplay/models/PageElements.ts +23 -9
  341. package/src/screenplay/models/RootLocator.ts +30 -0
  342. package/src/screenplay/models/SelectOption.ts +38 -0
  343. package/src/screenplay/models/Switchable.ts +24 -0
  344. package/src/screenplay/models/SwitchableOrigin.ts +18 -0
  345. package/src/screenplay/models/dialogs/AbsentModalDialog.ts +22 -0
  346. package/src/screenplay/models/dialogs/AcceptedModalDialog.ts +27 -0
  347. package/src/screenplay/models/dialogs/DismissedModalDialog.ts +27 -0
  348. package/src/screenplay/models/dialogs/ModalDialog.ts +200 -0
  349. package/src/screenplay/models/dialogs/ModalDialogHandler.ts +50 -0
  350. package/src/screenplay/models/dialogs/index.ts +5 -0
  351. package/src/screenplay/models/index.ts +8 -1
  352. package/src/screenplay/models/selectors/By.ts +45 -0
  353. package/src/screenplay/models/selectors/ByCss.ts +7 -0
  354. package/src/screenplay/models/selectors/ByCssContainingText.ts +8 -0
  355. package/src/screenplay/models/selectors/ByDeepCss.ts +15 -0
  356. package/src/screenplay/models/selectors/ById.ts +7 -0
  357. package/src/screenplay/models/selectors/ByTagName.ts +7 -0
  358. package/src/screenplay/models/selectors/ByXPath.ts +7 -0
  359. package/src/screenplay/models/selectors/Selector.ts +6 -1
  360. package/src/screenplay/models/selectors/index.ts +1 -0
  361. package/src/screenplay/questions/Attribute.ts +137 -76
  362. package/src/screenplay/questions/CssClasses.ts +135 -83
  363. package/src/screenplay/questions/LastScriptExecution.ts +45 -8
  364. package/src/screenplay/questions/Selected.ts +237 -191
  365. package/src/screenplay/questions/Text.ts +161 -96
  366. package/src/screenplay/questions/Value.ts +88 -48
  367. package/src/scripts/index.ts +1 -0
  368. package/src/scripts/isVisible.ts +113 -0
  369. package/src/stage/crew/photographer/Photographer.ts +142 -41
  370. package/src/stage/crew/photographer/strategies/PhotoTakingStrategy.ts +27 -42
  371. package/src/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.ts +7 -8
  372. package/src/stage/crew/photographer/strategies/TakePhotosOfFailures.ts +7 -7
  373. package/src/stage/crew/photographer/strategies/TakePhotosOfInteractions.ts +7 -8
  374. package/tsconfig.build.json +14 -0
  375. package/lib/expectations/ElementExpectation.d.ts +0 -83
  376. package/lib/expectations/ElementExpectation.js +0 -102
  377. package/lib/expectations/ElementExpectation.js.map +0 -1
  378. package/lib/input/Key.js.map +0 -1
  379. package/lib/input/index.d.ts +0 -1
  380. package/lib/input/index.js.map +0 -1
  381. package/lib/screenplay/abilities/BrowserCapabilities.d.ts +0 -5
  382. package/lib/screenplay/abilities/BrowserCapabilities.js.map +0 -1
  383. package/lib/screenplay/interactions/EnterBuilder.d.ts +0 -25
  384. package/lib/screenplay/interactions/EnterBuilder.js.map +0 -1
  385. package/lib/screenplay/interactions/PressBuilder.d.ts +0 -26
  386. package/lib/screenplay/interactions/PressBuilder.js +0 -3
  387. package/lib/screenplay/interactions/PressBuilder.js.map +0 -1
  388. package/lib/screenplay/interactions/SelectBuilder.d.ts +0 -33
  389. package/lib/screenplay/interactions/SelectBuilder.js +0 -3
  390. package/lib/screenplay/interactions/SelectBuilder.js.map +0 -1
  391. package/lib/screenplay/interactions/Wait.d.ts +0 -143
  392. package/lib/screenplay/interactions/Wait.js +0 -238
  393. package/lib/screenplay/interactions/Wait.js.map +0 -1
  394. package/lib/screenplay/interactions/WaitBuilder.d.ts +0 -32
  395. package/lib/screenplay/interactions/WaitBuilder.js.map +0 -1
  396. package/lib/screenplay/models/ModalDialog.d.ts +0 -9
  397. package/lib/screenplay/models/ModalDialog.js +0 -14
  398. package/lib/screenplay/models/ModalDialog.js.map +0 -1
  399. package/lib/screenplay/questions/ElementQuestion.d.ts +0 -33
  400. package/lib/screenplay/questions/ElementQuestion.js +0 -53
  401. package/lib/screenplay/questions/ElementQuestion.js.map +0 -1
  402. package/src/expectations/ElementExpectation.ts +0 -108
  403. package/src/input/index.ts +0 -1
  404. package/src/screenplay/abilities/BrowserCapabilities.ts +0 -5
  405. package/src/screenplay/interactions/EnterBuilder.ts +0 -28
  406. package/src/screenplay/interactions/PressBuilder.ts +0 -29
  407. package/src/screenplay/interactions/SelectBuilder.ts +0 -36
  408. package/src/screenplay/interactions/Wait.ts +0 -260
  409. package/src/screenplay/interactions/WaitBuilder.ts +0 -34
  410. package/src/screenplay/models/ModalDialog.ts +0 -19
  411. package/src/screenplay/questions/ElementQuestion.ts +0 -58
  412. package/tsconfig.eslint.json +0 -10
  413. /package/lib/screenplay/{abilities → models}/BrowserCapabilities.js +0 -0
@@ -1,96 +1,197 @@
1
- import { LogicError } from '@serenity-js/core';
1
+ import { ConfigurationError, LogicError } from '@serenity-js/core';
2
2
  import { ActivityFinished, ActivityStarts, DomainEvent } from '@serenity-js/core/lib/events';
3
3
  import { Stage, StageCrewMember } from '@serenity-js/core/lib/stage';
4
4
 
5
- import { PhotoTakingStrategy } from './strategies';
5
+ import * as strategies from './strategies';
6
6
 
7
7
  /**
8
- * @desc
9
- * The Photographer is a {@link @serenity-js/core/lib/stage~StageCrewMember} who takes screenshots
10
- * of the web browser that the {@link @serenity-js/core/lib/screenplay/actor~Actor} in the spotlight is using.
8
+ * The Photographer is a {@apilink StageCrewMember} who takes screenshots
9
+ * using the web browser associated with the {@apilink Actor} that is currently {@apilink actorInTheSpotlight|in the spotlight}.
11
10
  *
12
- * @example <caption>Assigning the Photographer to the Stage</caption>
11
+ * ## Programmatically assigning the `Photographer` to the {@apilink Stage}
12
+ *
13
+ * ```ts
14
+ * import { configure, ArtifactArchiver } from '@serenity-js/core'
15
+ * import { Photographer, TakePhotosOfFailures } from '@serenity-js/web'
16
+ *
17
+ * configure({
18
+ * crew: [
19
+ * ArtifactArchiver.storingArtifactsAt(process.cwd(), 'target/site/serenity'),
20
+ * Photographer.whoWill(TakePhotosOfFailures),
21
+ * ]
22
+ * })
23
+ * ```
24
+ *
25
+ * ## Using `Photographer` with WebdriverIO
26
+ *
27
+ * ```ts
13
28
  * // wdio.conf.ts
14
- * import { ArtifactArchiver } from '@serenity-js/core';
15
- * import { Photographer, TakePhotosOfFailures } from '@serenity-js/webdriverio';
29
+ * import { ArtifactArchiver } from '@serenity-js/core'
30
+ * import { Photographer, TakePhotosOfFailures } from '@serenity-js/web'
31
+ * import { WebdriverIOConfig } from '@serenity-js/webdriverio'
32
+ *
33
+ * export const config: WebdriverIOConfig= {
34
+ *
35
+ * // Tell WebdriverIO to use Serenity/JS framework
36
+ * framework: '@serenity-js/webdriverio',
37
+ *
38
+ * serenity: {
39
+ * // Configure Serenity/JS to use an appropriate test runner adapter
40
+ * runner: 'cucumber',
41
+ * // runner: 'mocha',
42
+ * // runner: 'jasmine',
43
+ *
44
+ * // register custom Actors class to configure your Serenity/JS actors
45
+ * actors: new Actors(),
16
46
  *
17
- * export const config = {
47
+ * // Register StageCrewMembers we've imported at the top of this file
48
+ * crew: [
49
+ * ArtifactArchiver.storingArtifactsAt(process.cwd(), 'target/site/serenity'),
50
+ * Photographer.whoWill(TakePhotosOfFailures),
51
+ * ]
52
+ * },
18
53
  *
19
- * serenity: {
54
+ * // ... rest of the config omitted for brevity
55
+ * }
56
+ * ```
57
+ *
58
+ * ## Using `Photographer` with Playwright Test
59
+ *
60
+ * ```ts
61
+ * // playwright.config.ts
62
+ * import type { PlaywrightTestConfig } from '@serenity-js/playwright-test'
63
+ *
64
+ * const config: PlaywrightTestConfig = {
65
+ * use: {
20
66
  * crew: [
21
- * ArtifactArchiver.storingArtifactsAt(process.cwd(), 'target/site/serenity'),
67
+ * [ '@serenity-js/web:Photographer', { strategy: 'TakePhotosOfFailures' } ] // or 'TakePhotosOfInteractions'
68
+ * ],
69
+ * },
70
+ * };
71
+ * export default config;
72
+ * ```
73
+ *
74
+ * #### Learn more
75
+ * - {@apilink SerenityOptions}
76
+ *
77
+ * ## Using `Photographer` with Protractor
78
+ *
79
+ * ```ts
80
+ * // protractor.conf.js
81
+ * const { ArtifactArchiver } = require('@serenity-js/core')
82
+ * const { Photographer, TakePhotosOfFailures } = require('@serenity-js/web')
83
+ *
84
+ * exports.config = {
85
+ *
86
+ * // Tell Protractor to use the Serenity/JS framework Protractor Adapter
87
+ * framework: 'custom',
88
+ * frameworkPath: require.resolve('@serenity-js/protractor/adapter'),
89
+ *
90
+ * serenity: {
91
+ * runner: 'jasmine',
92
+ * // runner: 'cucumber',
93
+ * // runner: 'mocha',
94
+ * crew: [
95
+ * ArtifactArchiver.storingArtifactsAt('./target/site/serenity'),
22
96
  * Photographer.whoWill(TakePhotosOfFailures),
23
97
  * ]
24
98
  * },
25
99
  *
26
100
  * // ... rest of the config omitted for brevity
27
- * };
101
+ * }
102
+ * ```
28
103
  *
29
- * @example <caption>Taking photos upon failures only</caption>
104
+ * ## Taking photos only upon failures only
30
105
  *
31
- * import { Photographer, TakePhotosOfFailures } from '@serenity-js/webdriverio';
106
+ * ```ts
107
+ * import { Photographer, TakePhotosOfFailures } from '@serenity-js/web'
32
108
  *
33
109
  * Photographer.whoWill(TakePhotosOfFailures)
110
+ * ```
34
111
  *
35
- * @example <caption>Taking photos of all the interactions</caption>
112
+ * ## Taking photos of all the interactions
36
113
  *
37
- * import { Photographer, TakePhotosOfInteractions } from '@serenity-js/webdriverio';
114
+ * ```ts
115
+ * import { Photographer, TakePhotosOfInteractions } from '@serenity-js/web'
38
116
  *
39
117
  * Photographer.whoWill(TakePhotosOfInteractions)
118
+ * ```
40
119
  *
41
- * @example <caption>Taking photos before and after all the interactions</caption>
120
+ * ## Taking photos before and after all the interactions
42
121
  *
43
- * import { Photographer, TakePhotosBeforeAndAfterInteractions } from '@serenity-js/webdriverio';
122
+ * ```ts
123
+ * import { Photographer, TakePhotosBeforeAndAfterInteractions } from '@serenity-js/web'
44
124
  *
45
125
  * Photographer.whoWill(TakePhotosBeforeAndAfterInteractions)
126
+ * ```
127
+ *
128
+ * ## Learn more
129
+ * - {@apilink Stage}
130
+ * - {@apilink StageCrewMember}
131
+ * - {@apilink TakePhotosBeforeAndAfterInteractions}
132
+ * - {@apilink TakePhotosOfFailures}
133
+ * - {@apilink TakePhotosOfInteractions}
46
134
  *
47
- * @see {@link @serenity-js/core/lib/stage~Stage}
48
- * @see {@link TakePhotosBeforeAndAfterInteractions}
49
- * @see {@link TakePhotosOfFailures}
50
- * @see {@link TakePhotosOfInteractions}
135
+ * @group Stage
51
136
  */
52
137
  export class Photographer implements StageCrewMember {
53
138
 
54
139
  /**
55
- * @desc
56
- * Instantiates a new {@link Photographer} configured to take photos (screenshots)
57
- * as per the specified {@link PhotoTakingStrategy}.
140
+ * Instantiates a new {@apilink Photographer} configured to take photos (screenshots)
141
+ * as per the specified {@apilink PhotoTakingStrategy}.
58
142
  *
59
- * @param {Function} strategy - A no-arg constructor function that instantiates a {@link PhotoTakingStrategy}.
60
- * @returns {StageCrewMember}
143
+ * @param strategy
144
+ * A no-arg constructor function that instantiates a {@apilink PhotoTakingStrategy}
61
145
  */
62
- static whoWill(strategy: new () => PhotoTakingStrategy): StageCrewMember {
146
+ static whoWill(strategy: new () => strategies.PhotoTakingStrategy): StageCrewMember {
63
147
  return new Photographer(new strategy());
64
148
  }
65
149
 
66
150
  /**
67
- * @param {PhotoTakingStrategy} photoTakingStrategy
68
- * @param {Stage} stage
151
+ * Instantiates a new {@apilink Photographer} configured to take photos (screenshots)
152
+ * as per the specified {@apilink PhotoTakingStrategy}.
153
+ *
154
+ * @param config
69
155
  */
156
+ static fromJSON(config?: { strategy?: Omit<keyof typeof strategies, 'PhotoTakingStrategy'> }): StageCrewMember {
157
+ if (config && config.strategy) {
158
+ const availableStrategies = Object.keys(strategies).filter(strategy => strategy !== strategies.PhotoTakingStrategy.name) // not the abstract class
159
+
160
+ if (availableStrategies.includes(config.strategy as string)) {
161
+ return new Photographer(new strategies[config.strategy as string]());
162
+ }
163
+
164
+ throw new ConfigurationError(
165
+ `'${ config.strategy }' is not an available PhotoTakingStrategy. ` +
166
+ `Available strategies: ${ availableStrategies.join(', ') }.`
167
+ );
168
+ }
169
+
170
+ return new Photographer(new strategies.TakePhotosOfFailures());
171
+ }
172
+
70
173
  constructor(
71
- private readonly photoTakingStrategy: PhotoTakingStrategy,
174
+ private readonly photoTakingStrategy: strategies.PhotoTakingStrategy,
72
175
  private stage?: Stage,
73
176
  ) {
74
177
  }
75
178
 
76
179
  /**
77
- * @desc
78
- * Creates a new instance of this {@link StageCrewMember} and assigns it to a given {@link Stage}.
180
+ * Assigns this {@apilink StageCrewMember} to a given {@apilink Stage}.
79
181
  *
80
- * @param {Stage} stage - An instance of a {@link Stage} this {@link StageCrewMember} will be assigned to
81
- * @returns {StageCrewMember} - A new instance of this {@link StageCrewMember}
182
+ * @param stage
183
+ * An instance of a {@apilink Stage} this {@apilink StageCrewMember} will be assigned to
82
184
  */
83
185
  assignedTo(stage: Stage): StageCrewMember {
84
- return new Photographer(this.photoTakingStrategy, stage);
186
+ this.stage = stage;
187
+ return this;
85
188
  }
86
189
 
87
190
  /**
88
- * @desc
89
- * Handles {@link DomainEvent} objects emitted by the {@link Stage}
90
- * this {@link StageCrewMember} is assigned to.
191
+ * Handles {@apilink DomainEvent} objects emitted by the {@apilink Stage}
192
+ * this {@apilink StageCrewMember} is assigned to.
91
193
  *
92
- * @param {DomainEvent} event
93
- * @returns {void}
194
+ * @param event
94
195
  */
95
196
  notifyOf(event: DomainEvent): void {
96
197
  if (! this.stage) {
@@ -1,29 +1,29 @@
1
- import { Stage } from '@serenity-js/core';
2
- import { ActivityFinished, ActivityRelatedArtifactGenerated, ActivityStarts, AsyncOperationAttempted, AsyncOperationCompleted, AsyncOperationFailed, DomainEvent } from '@serenity-js/core/lib/events';
1
+ import { LogicError, Stage } from '@serenity-js/core';
2
+ import { ActivityFinished, ActivityRelatedArtifactGenerated, ActivityStarts, AsyncOperationAborted, AsyncOperationAttempted, AsyncOperationCompleted, AsyncOperationFailed, DomainEvent } from '@serenity-js/core/lib/events';
3
3
  import { CorrelationId, Description, Name, Photo } from '@serenity-js/core/lib/model';
4
4
 
5
5
  import { BrowseTheWeb } from '../../../../screenplay';
6
6
 
7
7
  /**
8
- * @desc
9
- * Configures the {@link Photographer} to take photos (a.k.a. screenshots)
10
- * of the {@link @serenity-js/core/lib/screenplay~Activity} performed
11
- * by the {@link @serenity-js/core/lib/screenplay/actor~Actor} in the spotlight
12
- * under specific conditions.
8
+ * Configures the {@apilink Photographer} to take {@apilink Photo|photos}, a.k.a. screenshots,
9
+ * of the {@apilink Activity} performed by the {@apilink Actor} in the {@apilink actorInTheSpotlight|spotlight}
10
+ * when desired conditions are met.
13
11
  *
14
- * @abstract
12
+ * @group Stage
15
13
  */
16
14
  export abstract class PhotoTakingStrategy {
17
15
 
18
16
  /**
19
- * @desc
20
- * Takes a photo of the web browser held by the {@link @serenity-js/core/lib/screenplay/actor~Actor} in the spotlight.
17
+ * Takes a photo of the web browser used by the {@apilink Actor} in the {@apilink actorInTheSpotlight|spotlight}.
21
18
  *
22
- * @param {@serenity-js/core/lib/events~ActivityStarts | @serenity-js/core/lib/events~ActivityFinished} event
23
- * @param {@serenity-js/core/lib/stage~Stage} stage - the Stage that holds reference to the Actor in the spotlight
24
- * @returns {void}
19
+ * #### Learn more
20
+ * - {@apilink ActivityStarts}
21
+ * - {@apilink ActivityFinished}
22
+ * - {@apilink Stage}
25
23
  *
26
- * @see {@link @serenity-js/core/lib/stage~Stage#theActorInTheSpotlight}
24
+ * @param event
25
+ * @param stage
26
+ * The Stage that holds reference to the Actor in the spotlight
27
27
  */
28
28
  async considerTakingPhoto(event: ActivityStarts | ActivityFinished, stage: Stage): Promise<void> {
29
29
  if (! this.shouldTakeAPhotoOf(event)) {
@@ -44,28 +44,16 @@ export abstract class PhotoTakingStrategy {
44
44
  nameSuffix = this.photoNameFor(event);
45
45
 
46
46
  stage.announce(new AsyncOperationAttempted(
47
- new Description(`[Photographer:${ this.constructor.name }] Taking screenshot of '${ nameSuffix }'...`),
47
+ new Name(`Photographer:${ this.constructor.name }`),
48
+ new Description(`Taking screenshot of '${ nameSuffix }'...`),
48
49
  id,
50
+ stage.currentTime(),
49
51
  ));
50
52
 
51
- let dialogIsPresent: boolean;
52
-
53
- try {
54
- dialogIsPresent = await browseTheWeb.modalDialog().then(dialog => dialog.isPresent());
55
-
56
- if (dialogIsPresent) {
57
- return stage.announce(new AsyncOperationCompleted(
58
- new Description(`[${ this.constructor.name }] Aborted taking screenshot of '${ nameSuffix }' because of a modal dialog obstructing the view`),
59
- id,
60
- ));
61
- }
62
- } catch (error) {
63
- return stage.announce(new AsyncOperationFailed(error, id));
64
- }
65
-
66
53
  try {
67
54
  const capabilities = await browseTheWeb.browserCapabilities();
68
- const screenshot = await browseTheWeb.takeScreenshot();
55
+ const page = await browseTheWeb.currentPage();
56
+ const screenshot = await page.takeScreenshot();
69
57
 
70
58
  const
71
59
  context = [ capabilities.platformName, capabilities.browserName, capabilities.browserVersion ],
@@ -76,22 +64,24 @@ export abstract class PhotoTakingStrategy {
76
64
  event.activityId,
77
65
  photoName,
78
66
  Photo.fromBase64(screenshot),
67
+ stage.currentTime(),
79
68
  ));
80
69
 
81
70
  return stage.announce(new AsyncOperationCompleted(
82
- new Description(`[${ this.constructor.name }] Took screenshot of '${ nameSuffix }' on ${ context }`),
83
71
  id,
72
+ stage.currentTime(),
84
73
  ));
85
74
  }
86
75
  catch (error) {
87
76
  if (this.shouldIgnore(error)) {
88
- stage.announce(new AsyncOperationCompleted(
89
- new Description(`[${ this.constructor.name }] Aborted taking screenshot of '${ nameSuffix }' because of ${ error.constructor && error.constructor.name }`),
77
+ stage.announce(new AsyncOperationAborted(
78
+ new Description(`Aborted taking screenshot of '${ nameSuffix }' because of ${ error.constructor && error.constructor.name }`),
90
79
  id,
80
+ stage.currentTime(),
91
81
  ));
92
82
  }
93
83
  else {
94
- stage.announce(new AsyncOperationFailed(error, id));
84
+ stage.announce(new AsyncOperationFailed(error, id, stage.currentTime()));
95
85
  }
96
86
  }
97
87
  }
@@ -105,12 +95,7 @@ export abstract class PhotoTakingStrategy {
105
95
  }
106
96
 
107
97
  private shouldIgnore(error: Error) {
108
- return error.name && (
109
- error.name === 'NoSuchSessionError' ||
110
- (error.name === 'ProtocolError' && error.message.includes('Target closed'))
111
- );
112
- // todo: add SauceLabs
113
- // [0-0] 2021-12-02T01:32:36.402Z ERROR webdriver: Request failed with status 404 due to no such window: no such window: target window already closed
114
- // [0-0] from unknown error: web view not found
98
+ return error instanceof LogicError
99
+ || (error.name && error.name === LogicError.name);
115
100
  }
116
101
  }
@@ -3,16 +3,15 @@ import { DomainEvent, InteractionFinished, InteractionStarts } from '@serenity-j
3
3
  import { PhotoTakingStrategy } from './PhotoTakingStrategy';
4
4
 
5
5
  /**
6
- * @desc
7
- * Configures the {@link Photographer} to take photos (a.k.a. screenshots) both before and after
8
- * every single {@link @serenity-js/core/lib/screenplay~Interaction} performed
9
- * by the {@link @serenity-js/core/lib/screenplay/actor~Actor} in the spotlight.
6
+ * Configures the {@apilink Photographer} to take photos (a.k.a. screenshots) **both before and after**
7
+ * every single {@apilink Interaction} performed
8
+ * by the {@apilink Actor} in the {@apilink actorInTheSpotlight|spotlight}.
10
9
  *
11
- * *Please note* that this strategy will result in _a lot_ of screenshots being taken,
12
- * which will seriously affect the performance of your tests.
13
- * For this reason, it's best to use it only for debugging purposes.
10
+ * **Please note** that this strategy will result in _a lot_ of screenshots being taken,
11
+ * which will seriously affect the performance of your tests.
12
+ * For this reason, it's best to use it only for debugging purposes.
14
13
  *
15
- * @extends {PhotoTakingStrategy}
14
+ * @group Stage
16
15
  */
17
16
  export class TakePhotosBeforeAndAfterInteractions extends PhotoTakingStrategy {
18
17
  protected shouldTakeAPhotoOf(event: DomainEvent): boolean {
@@ -4,15 +4,15 @@ import { ImplementationPending } from '@serenity-js/core/lib/model';
4
4
  import { PhotoTakingStrategy } from './PhotoTakingStrategy';
5
5
 
6
6
  /**
7
- * @desc
8
- * Configures the {@link Photographer} to take photos (a.k.a. screenshots) when
9
- * the {@link @serenity-js/core/lib/screenplay~Interaction} performed
10
- * by the {@link @serenity-js/core/lib/screenplay/actor~Actor} in the spotlight results in an error.
7
+ * Configures the {@apilink Photographer} to take photos (a.k.a. screenshots)
8
+ * when then {@apilink Interaction} performed
9
+ * by the {@apilink Actor} in the {@apilink actorInTheSpotlight|spotlight}
10
+ * results in an error.
11
11
  *
12
- * This strategy works best when you are interested in the screenshots only when
13
- * a scenario fails.
12
+ * This strategy works best when you are interested in the screenshots only when
13
+ * a scenario fails.
14
14
  *
15
- * @extends {PhotoTakingStrategy}
15
+ * @group Stage
16
16
  */
17
17
  export class TakePhotosOfFailures extends PhotoTakingStrategy {
18
18
  protected shouldTakeAPhotoOf(event: DomainEvent): boolean {
@@ -3,17 +3,16 @@ import { DomainEvent, InteractionFinished } from '@serenity-js/core/lib/events';
3
3
  import { PhotoTakingStrategy } from './PhotoTakingStrategy';
4
4
 
5
5
  /**
6
- * @desc
7
- * Configures the {@link Photographer} to take photos (a.k.a. screenshots) when
8
- * the the {@link @serenity-js/core/lib/screenplay/actor~Actor} in the spotlight
9
- * performs any {@link @serenity-js/core/lib/screenplay~Interaction}.
6
+ * Configures the {@apilink Photographer} to take photos (a.k.a. screenshots)
7
+ * when then {@apilink Actor} in the {@apilink actorInTheSpotlight|spotlight}
8
+ * performs any {@apilink Interaction}.
10
9
  *
11
- * This strategy works best when you want the results of your automated tests
12
- * to become comprehensive living documentation of your system.
10
+ * This strategy works best when you want the results of your automated tests
11
+ * to become comprehensive living documentation of your system.
13
12
  *
14
- * *Please note* that taking screenshots affects the performance of your tests.
13
+ * *Please note* that taking screenshots affects the performance of your tests.
15
14
  *
16
- * @extends {PhotoTakingStrategy}
15
+ * @group Stage
17
16
  */
18
17
  export class TakePhotosOfInteractions extends PhotoTakingStrategy {
19
18
  protected shouldTakeAPhotoOf(event: DomainEvent): boolean {
@@ -0,0 +1,14 @@
1
+ {
2
+ "extends": "../../tsconfig.build.json",
3
+ "compilerOptions": {
4
+ "outDir": "lib",
5
+ "rootDir": "src",
6
+ "lib": [
7
+ "es2019",
8
+ "dom"
9
+ ]
10
+ },
11
+ "include": [
12
+ "src/**/*.ts"
13
+ ]
14
+ }
@@ -1,83 +0,0 @@
1
- import { Expectation } from '@serenity-js/core';
2
- import { PageElement } from '../screenplay';
3
- /**
4
- * @desc
5
- * A convenience method to create a custom {@link PageElement}-related {@link @serenity-js/core/lib/screenplay/questions~Expectation}
6
- *
7
- * @example <caption>Defining an expectation</caption>
8
- * import { Expectation } from '@serenity-js/core';
9
- * import { ElementExpectation, PageElement } from '@serenity-js/web';
10
- *
11
- * export function isPresent(): Expectation<boolean, PageElement> {
12
- * return ElementExpectation.forElementTo('become present', actual => actual.isPresent());
13
- * }
14
- *
15
- * @example <caption>Using an expectation in an assertion</caption>
16
- * import { Ensure } from '@serenity-js/assertions';
17
- * import { actorCalled } from '@serenity-js/core';
18
- * import { By, PageElement } from '@serenity-js/web';
19
- *
20
- * const submitButton = () =>
21
- * PageElement.located(By.css('.submit')).describedAs('submit button');
22
- *
23
- * actorCalled('Izzy').attemptsTo(
24
- * Ensure.that(submitButton(), isPresent())
25
- * );
26
- *
27
- * @example <caption>Using an expectation in a synchronisation statement</caption>
28
- * import { actorCalled, Duration } from '@serenity-js/core';
29
- * import { By, PageElement, Wait } from '@serenity-js/web';
30
- *
31
- * const submitButton = () =>
32
- * PageElement.located(By.css('.submit')).describedAs('submit button');
33
- *
34
- * actorCalled('Izzy').attemptsTo(
35
- * Wait.upTo(Duration.ofSeconds(2)).until(submitButton(), isPresent())
36
- * );
37
- *
38
- * @public
39
- * @extends {@serenity-js/core/lib/screenplay/questions~Expectation}
40
- */
41
- export declare class ElementExpectation extends Expectation<PageElement> {
42
- private readonly fn;
43
- /**
44
- * @desc
45
- * Creates an {@link @serenity-js/core/lib/screenplay/questions~Expectation}
46
- *
47
- * @example <caption>Defining an expectation</caption>
48
- * import { Expectation } from '@serenity-js/core';
49
- * import { ElementExpectation, PageElement } from '@serenity-js/web';
50
- *
51
- * export function isPresent(): Expectation<boolean, PageElement> {
52
- * return ElementExpectation.forElementTo('become present', actual => actual.isPresent());
53
- * }
54
- *
55
- * @param {string} description
56
- * A description of the expectation.
57
- * Please note that Serenity/JS will use it to describe your expectation in sentences like these:
58
- * - `actor ensures that <something> does <description>`
59
- * - `actor ensures that <something> does not <description>`
60
- * - `actor waits until <something> does <description>`
61
- * - `actor waits until <something> does not <description>`
62
- *
63
- * To work with the above templates, the description should be similar to
64
- * - `become present`,
65
- * - `become active`,
66
- * - `equal X`,
67
- * - `has value greater than Y`.
68
- *
69
- * Descriptions like "is present", "is active", "equals X", "is greater than Y" WILL NOT work well.
70
- *
71
- * @param {function(actual: PageElement): Promise<boolean>} fn
72
- * An asynchronous callback function that receives a {@link PageElement} and returns a {@link Promise}
73
- * that should resolve to `true` when the expectation is met, and `false` otherwise.
74
- *
75
- * @returns {ElementExpectation<any, PageElement>}
76
- */
77
- static forElementTo(description: string, fn: (actual: PageElement) => Promise<boolean>): Expectation<PageElement>;
78
- /**
79
- * @param {string} description
80
- * @param {function(actual: PageElement): Promise<boolean>} fn
81
- */
82
- constructor(description: string, fn: (actual: PageElement) => Promise<boolean>);
83
- }
@@ -1,102 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ElementExpectation = void 0;
4
- const core_1 = require("@serenity-js/core");
5
- /**
6
- * @desc
7
- * A convenience method to create a custom {@link PageElement}-related {@link @serenity-js/core/lib/screenplay/questions~Expectation}
8
- *
9
- * @example <caption>Defining an expectation</caption>
10
- * import { Expectation } from '@serenity-js/core';
11
- * import { ElementExpectation, PageElement } from '@serenity-js/web';
12
- *
13
- * export function isPresent(): Expectation<boolean, PageElement> {
14
- * return ElementExpectation.forElementTo('become present', actual => actual.isPresent());
15
- * }
16
- *
17
- * @example <caption>Using an expectation in an assertion</caption>
18
- * import { Ensure } from '@serenity-js/assertions';
19
- * import { actorCalled } from '@serenity-js/core';
20
- * import { By, PageElement } from '@serenity-js/web';
21
- *
22
- * const submitButton = () =>
23
- * PageElement.located(By.css('.submit')).describedAs('submit button');
24
- *
25
- * actorCalled('Izzy').attemptsTo(
26
- * Ensure.that(submitButton(), isPresent())
27
- * );
28
- *
29
- * @example <caption>Using an expectation in a synchronisation statement</caption>
30
- * import { actorCalled, Duration } from '@serenity-js/core';
31
- * import { By, PageElement, Wait } from '@serenity-js/web';
32
- *
33
- * const submitButton = () =>
34
- * PageElement.located(By.css('.submit')).describedAs('submit button');
35
- *
36
- * actorCalled('Izzy').attemptsTo(
37
- * Wait.upTo(Duration.ofSeconds(2)).until(submitButton(), isPresent())
38
- * );
39
- *
40
- * @public
41
- * @extends {@serenity-js/core/lib/screenplay/questions~Expectation}
42
- */
43
- class ElementExpectation extends core_1.Expectation {
44
- /**
45
- * @param {string} description
46
- * @param {function(actual: PageElement): Promise<boolean>} fn
47
- */
48
- constructor(description, fn) {
49
- super(description, async (actor, actual) => {
50
- const pageElement = await actor.answer(actual);
51
- try {
52
- const result = await fn(pageElement);
53
- return result
54
- ? new core_1.ExpectationMet(this.toString(), undefined, pageElement)
55
- : new core_1.ExpectationNotMet(this.toString(), undefined, pageElement);
56
- }
57
- catch (error) {
58
- return new core_1.ExpectationNotMet(`${description} (${error.message})`, undefined, pageElement);
59
- }
60
- });
61
- this.fn = fn;
62
- }
63
- /**
64
- * @desc
65
- * Creates an {@link @serenity-js/core/lib/screenplay/questions~Expectation}
66
- *
67
- * @example <caption>Defining an expectation</caption>
68
- * import { Expectation } from '@serenity-js/core';
69
- * import { ElementExpectation, PageElement } from '@serenity-js/web';
70
- *
71
- * export function isPresent(): Expectation<boolean, PageElement> {
72
- * return ElementExpectation.forElementTo('become present', actual => actual.isPresent());
73
- * }
74
- *
75
- * @param {string} description
76
- * A description of the expectation.
77
- * Please note that Serenity/JS will use it to describe your expectation in sentences like these:
78
- * - `actor ensures that <something> does <description>`
79
- * - `actor ensures that <something> does not <description>`
80
- * - `actor waits until <something> does <description>`
81
- * - `actor waits until <something> does not <description>`
82
- *
83
- * To work with the above templates, the description should be similar to
84
- * - `become present`,
85
- * - `become active`,
86
- * - `equal X`,
87
- * - `has value greater than Y`.
88
- *
89
- * Descriptions like "is present", "is active", "equals X", "is greater than Y" WILL NOT work well.
90
- *
91
- * @param {function(actual: PageElement): Promise<boolean>} fn
92
- * An asynchronous callback function that receives a {@link PageElement} and returns a {@link Promise}
93
- * that should resolve to `true` when the expectation is met, and `false` otherwise.
94
- *
95
- * @returns {ElementExpectation<any, PageElement>}
96
- */
97
- static forElementTo(description, fn) {
98
- return new ElementExpectation(description, fn);
99
- }
100
- }
101
- exports.ElementExpectation = ElementExpectation;
102
- //# sourceMappingURL=ElementExpectation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ElementExpectation.js","sourceRoot":"","sources":["../../src/expectations/ElementExpectation.ts"],"names":[],"mappings":";;;AAAA,4CAAiH;AAIjH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAa,kBAAmB,SAAQ,kBAAwB;IAwC5D;;;OAGG;IACH,YACI,WAAmB,EACF,EAA6C;QAE9D,KAAK,CACD,WAAW,EACX,KAAK,EAAE,KAAuB,EAAE,MAA+B,EAAE,EAAE;YAC/D,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE/C,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC;gBAErC,OAAO,MAAM;oBACT,CAAC,CAAC,IAAI,qBAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC;oBAC7D,CAAC,CAAC,IAAI,wBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;aACxE;YAAC,OAAM,KAAK,EAAE;gBACX,OAAO,IAAI,wBAAiB,CAAC,GAAI,WAAY,KAAM,KAAK,CAAC,OAAQ,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;aACjG;QACL,CAAC,CACJ,CAAC;QAjBe,OAAE,GAAF,EAAE,CAA2C;IAkBlE,CAAC;IA9DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,MAAM,CAAC,YAAY,CAAC,WAAmB,EAAE,EAA6C;QAClF,OAAO,IAAI,kBAAkB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;CA2BJ;AAjED,gDAiEC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Key.js","sourceRoot":"","sources":["../../src/input/Key.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export * from './Key';
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAAsB"}