@serenity-js/web 3.0.0-rc.8 → 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 +336 -73
  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,93 +1,138 @@
1
- import { Answerable, AnswersQuestions, MetaQuestion, Question, UsesAbilities } from '@serenity-js/core';
1
+ import { Answerable, AnswersQuestions, MetaQuestion, Question, QuestionAdapter, UsesAbilities } from '@serenity-js/core';
2
2
  import { PageElement } from '../models';
3
- import { ElementQuestion } from './ElementQuestion';
4
3
  /**
5
- * @desc
6
- * Resolves to an array of [CSS classes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-class)
7
- * of a given {@link WebElement}, represented by Answerable<{@link @wdio/types~Element}>.
8
- *
9
- * @example <caption>Example widget</caption>
10
- * <ul id="shopping-list" class="active favourite">
11
- * <li class="bought">Coffee<li>
12
- * <li class="buy">Honey<li>
13
- * <li class="buy">Chocolate<li>
14
- * </ul>
15
- *
16
- * @example <caption>Retrieve CSS classes of a given WebElement</caption>
17
- * import { actorCalled } from '@serenity-js/core';
18
- * import { Ensure, equals } from '@serenity-js/assertions';
19
- * import { BrowseTheWeb, by, CssClasses, Target } from '@serenity-js/webdriverio';
20
- *
21
- * const shoppingList = () =>
22
- * Target.the('shopping list').located(by.id('shopping-list'))
23
- *
24
- * actorCalled('Lisa')
25
- * .whoCan(BrowseTheWeb.using(browser))
26
- * .attemptsTo(
27
- * Ensure.that(CssClasses.of(shoppingList()), equals([ 'active', 'favourite' ])),
28
- * )
29
- *
30
- * @example <caption>Find WebElements with a given class</caption>
31
- * import { actorCalled } from '@serenity-js/core';
32
- * import { Ensure, contain } from '@serenity-js/assertions';
33
- * import { BrowseTheWeb, by, CssClasses, Target } from '@serenity-js/webdriverio';
34
- *
35
- * class ShoppingList {
36
- * static items = () =>
37
- * Target.all('items')
38
- * .located(by.css('#shopping-list li'))
39
- *
40
- * static outstandingItems = () =>
41
- * ShoppingList.items
42
- * .where(CssClasses, contain('buy'))
43
- * }
44
- *
45
- * actorCalled('Lisa')
46
- * .whoCan(BrowseTheWeb.using(browser))
47
- * .attemptsTo(
48
- * Ensure.that(
49
- * Text.ofAll(ShoppingList.outstandingItems()),
50
- * equals([ 'Honey', 'Chocolate' ])
51
- * ),
52
- * )
53
- *
54
- * @extends {ElementQuestion}
55
- * @implements {@serenity-js/core/lib/screenplay/questions~MetaQuestion}
4
+ * Uses the {@apilink Actor|actor's} {@apilink Ability|ability} to {@apilink BrowseTheWeb} to retrieve
5
+ * a list of [CSS classes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-class)
6
+ * of a given {@apilink PageElement}.
7
+ *
8
+ * ## Example widget
9
+ *
10
+ * ```html
11
+ * <ul id="shopping-list" class="active favourite">
12
+ * <li class="bought">Coffee<li>
13
+ * <li class="buy">Honey<li>
14
+ * <li class="buy">Chocolate<li>
15
+ * </ul>
16
+ * ```
17
+ *
18
+ * ## Retrieve CSS classes of a given {@apilink PageElement}
19
+ *
20
+ * ```ts
21
+ * import { actorCalled } from '@serenity-js/core'
22
+ * import { Ensure, equals } from '@serenity-js/assertions'
23
+ * import { By, CssClasses, PageElement } from '@serenity-js/web'
24
+ *
25
+ * const shoppingList = () =>
26
+ * PageElement.located(By.css('#shopping-list'))
27
+ * .describedAs('shopping list')
28
+ *
29
+ * await actorCalled('Lisa')
30
+ * .attemptsTo(
31
+ * Ensure.that(
32
+ * CssClasses.of(shoppingList()),
33
+ * equals([ 'active', 'favourite' ])
34
+ * ),
35
+ * )
36
+ * ```
37
+ *
38
+ * ## Using CssClasses as {@apilink QuestionAdapter}
39
+ *
40
+ * ```ts
41
+ * import { actorCalled } from '@serenity-js/core'
42
+ * import { Ensure, equals } from '@serenity-js/assertions'
43
+ * import { By, CssClasses, PageElement } from '@serenity-js/web'
44
+ *
45
+ * const shoppingList = () =>
46
+ * PageElement.located(By.css('#shopping-list'))
47
+ * .describedAs('shopping list')
48
+ *
49
+ * await actorCalled('Lisa')
50
+ * .attemptsTo(
51
+ * Ensure.that(
52
+ * CssClasses.of(shoppingList()).length,
53
+ * equals(2)
54
+ * ),
55
+ * Ensure.that(
56
+ * CssClasses.of(shoppingList())[0],
57
+ * equals('active')
58
+ * ),
59
+ * )
60
+ * ```
61
+ *
62
+ * ## Using as filter in {@apilink PageElements|Page Element Query Language}
63
+ *
64
+ * ```ts
65
+ * import { actorCalled } from '@serenity-js/core'
66
+ * import { Ensure, contain } from '@serenity-js/assertions'
67
+ * import { By, CssClasses, PageElement } from '@serenity-js/web'
68
+ *
69
+ * class ShoppingList {
70
+ * static items = () =>
71
+ * PageElements.located(By.css('#shopping-list li'))
72
+ * .describedAs('items')
73
+ *
74
+ * static outstandingItems = () =>
75
+ * ShoppingList.items()
76
+ * .where(CssClasses, contain('buy'))
77
+ * }
78
+ *
79
+ * await actorCalled('Lisa')
80
+ * .attemptsTo(
81
+ * Ensure.that(
82
+ * Text.ofAll(ShoppingList.outstandingItems()),
83
+ * equals([ 'Honey', 'Chocolate' ])
84
+ * ),
85
+ * )
86
+ * ```
87
+ *
88
+ * ## Learn more
89
+ * - {@apilink BrowseTheWeb}
90
+ * - {@apilink MetaQuestion}
91
+ * - {@apilink QuestionAdapter}
92
+ * - {@apilink Question}
93
+ *
94
+ * @group Questions
56
95
  */
57
- export declare class CssClasses extends ElementQuestion<Promise<string[]>> implements MetaQuestion<Answerable<PageElement>, Promise<string[]>> {
58
- private readonly target;
96
+ export declare class CssClasses extends Question<Promise<string[]>> implements MetaQuestion<Answerable<PageElement>, Promise<string[]>> {
97
+ private readonly pageElement;
98
+ private subject;
59
99
  /**
60
- * @param {Question<PageElement> | PageElement} target
61
- * @returns {CssClasses}
62
- */
63
- static of(target: Answerable<PageElement>): CssClasses;
64
- /**
65
- * @param {Question<PageElement> | PageElement} target
100
+ * Instantiates a {@apilink Question} that uses
101
+ * the {@apilink Actor|actor's} {@apilink Ability|ability} to {@apilink BrowseTheWeb} to retrieve
102
+ * a list of [CSS classes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-class)
103
+ * of a given {@apilink PageElement}.
104
+ *
105
+ * #### Learn more
106
+ * - {@apilink MetaQuestion}
107
+ *
108
+ * @param pageElement
66
109
  */
67
- constructor(target: Answerable<PageElement>);
110
+ static of(pageElement: Answerable<PageElement>): QuestionAdapter<string[]> & MetaQuestion<Answerable<PageElement>, Promise<string[]>>;
111
+ protected constructor(pageElement: Answerable<PageElement>);
68
112
  /**
69
- * @desc
70
- * Resolves to an array of CSS classes of the `target` element,
71
- * located in the context of a `parent` element.
113
+ * Instantiates a {@apilink Question} that uses
114
+ * the {@apilink Actor|actor's} {@apilink Ability|ability} to {@apilink BrowseTheWeb} to retrieve
115
+ * a list of [CSS classes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-class)
116
+ * of a given {@apilink PageElement},
117
+ * located in a given `parent` element.
72
118
  *
73
- * @param {@serenity-js/core/lib/screenplay~Answerable<Element>} parent
74
- * @returns {Question<Promise<string[]>>}
119
+ * #### Learn more
120
+ * - {@apilink MetaQuestion}
75
121
  *
76
- * @see {@link Target.all}
77
- * @see {@link @serenity-js/core/lib/screenplay/questions~MetaQuestion}
122
+ * @param parent
78
123
  */
79
124
  of(parent: Answerable<PageElement>): Question<Promise<string[]>>;
80
125
  /**
81
- * @desc
82
- * Makes the provided {@link @serenity-js/core/lib/screenplay/actor~Actor}
83
- * answer this {@link @serenity-js/core/lib/screenplay~Question}.
84
- *
85
- * @param {AnswersQuestions & UsesAbilities} actor
86
- * @returns {Promise<void>}
87
- *
88
- * @see {@link @serenity-js/core/lib/screenplay/actor~Actor}
89
- * @see {@link @serenity-js/core/lib/screenplay/actor~AnswersQuestions}
90
- * @see {@link @serenity-js/core/lib/screenplay/actor~UsesAbilities}
126
+ * @inheritDoc
91
127
  */
92
128
  answeredBy(actor: AnswersQuestions & UsesAbilities): Promise<string[]>;
129
+ /**
130
+ * @inheritDoc
131
+ */
132
+ describedAs(subject: string): this;
133
+ /**
134
+ * @inheritDoc
135
+ */
136
+ toString(): string;
93
137
  }
138
+ //# sourceMappingURL=CssClasses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CssClasses.d.ts","sourceRoot":"","sources":["../../../src/screenplay/questions/CssClasses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAK,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5H,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AACH,qBAAa,UACT,SAAQ,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAClC,YAAW,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAmB7C,OAAO,CAAC,QAAQ,CAAC,WAAW;IAjBlD,OAAO,CAAC,OAAO,CAAS;IAExB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAIrI,SAAS,aAA8B,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC;IAK3E;;;;;;;;;;;OAWG;IACH,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAIhE;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAa5E;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlC;;OAEG;IACH,QAAQ,IAAI,MAAM;CAGrB"}
@@ -1,105 +1,141 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CssClasses = void 0;
4
- const io_1 = require("@serenity-js/core/lib/io");
4
+ const core_1 = require("@serenity-js/core");
5
5
  const models_1 = require("../models");
6
- const ElementQuestion_1 = require("./ElementQuestion");
7
6
  /**
8
- * @desc
9
- * Resolves to an array of [CSS classes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-class)
10
- * of a given {@link WebElement}, represented by Answerable<{@link @wdio/types~Element}>.
11
- *
12
- * @example <caption>Example widget</caption>
13
- * <ul id="shopping-list" class="active favourite">
14
- * <li class="bought">Coffee<li>
15
- * <li class="buy">Honey<li>
16
- * <li class="buy">Chocolate<li>
17
- * </ul>
18
- *
19
- * @example <caption>Retrieve CSS classes of a given WebElement</caption>
20
- * import { actorCalled } from '@serenity-js/core';
21
- * import { Ensure, equals } from '@serenity-js/assertions';
22
- * import { BrowseTheWeb, by, CssClasses, Target } from '@serenity-js/webdriverio';
23
- *
24
- * const shoppingList = () =>
25
- * Target.the('shopping list').located(by.id('shopping-list'))
26
- *
27
- * actorCalled('Lisa')
28
- * .whoCan(BrowseTheWeb.using(browser))
29
- * .attemptsTo(
30
- * Ensure.that(CssClasses.of(shoppingList()), equals([ 'active', 'favourite' ])),
31
- * )
32
- *
33
- * @example <caption>Find WebElements with a given class</caption>
34
- * import { actorCalled } from '@serenity-js/core';
35
- * import { Ensure, contain } from '@serenity-js/assertions';
36
- * import { BrowseTheWeb, by, CssClasses, Target } from '@serenity-js/webdriverio';
37
- *
38
- * class ShoppingList {
39
- * static items = () =>
40
- * Target.all('items')
41
- * .located(by.css('#shopping-list li'))
42
- *
43
- * static outstandingItems = () =>
44
- * ShoppingList.items
45
- * .where(CssClasses, contain('buy'))
46
- * }
47
- *
48
- * actorCalled('Lisa')
49
- * .whoCan(BrowseTheWeb.using(browser))
50
- * .attemptsTo(
51
- * Ensure.that(
52
- * Text.ofAll(ShoppingList.outstandingItems()),
53
- * equals([ 'Honey', 'Chocolate' ])
54
- * ),
55
- * )
56
- *
57
- * @extends {ElementQuestion}
58
- * @implements {@serenity-js/core/lib/screenplay/questions~MetaQuestion}
7
+ * Uses the {@apilink Actor|actor's} {@apilink Ability|ability} to {@apilink BrowseTheWeb} to retrieve
8
+ * a list of [CSS classes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-class)
9
+ * of a given {@apilink PageElement}.
10
+ *
11
+ * ## Example widget
12
+ *
13
+ * ```html
14
+ * <ul id="shopping-list" class="active favourite">
15
+ * <li class="bought">Coffee<li>
16
+ * <li class="buy">Honey<li>
17
+ * <li class="buy">Chocolate<li>
18
+ * </ul>
19
+ * ```
20
+ *
21
+ * ## Retrieve CSS classes of a given {@apilink PageElement}
22
+ *
23
+ * ```ts
24
+ * import { actorCalled } from '@serenity-js/core'
25
+ * import { Ensure, equals } from '@serenity-js/assertions'
26
+ * import { By, CssClasses, PageElement } from '@serenity-js/web'
27
+ *
28
+ * const shoppingList = () =>
29
+ * PageElement.located(By.css('#shopping-list'))
30
+ * .describedAs('shopping list')
31
+ *
32
+ * await actorCalled('Lisa')
33
+ * .attemptsTo(
34
+ * Ensure.that(
35
+ * CssClasses.of(shoppingList()),
36
+ * equals([ 'active', 'favourite' ])
37
+ * ),
38
+ * )
39
+ * ```
40
+ *
41
+ * ## Using CssClasses as {@apilink QuestionAdapter}
42
+ *
43
+ * ```ts
44
+ * import { actorCalled } from '@serenity-js/core'
45
+ * import { Ensure, equals } from '@serenity-js/assertions'
46
+ * import { By, CssClasses, PageElement } from '@serenity-js/web'
47
+ *
48
+ * const shoppingList = () =>
49
+ * PageElement.located(By.css('#shopping-list'))
50
+ * .describedAs('shopping list')
51
+ *
52
+ * await actorCalled('Lisa')
53
+ * .attemptsTo(
54
+ * Ensure.that(
55
+ * CssClasses.of(shoppingList()).length,
56
+ * equals(2)
57
+ * ),
58
+ * Ensure.that(
59
+ * CssClasses.of(shoppingList())[0],
60
+ * equals('active')
61
+ * ),
62
+ * )
63
+ * ```
64
+ *
65
+ * ## Using as filter in {@apilink PageElements|Page Element Query Language}
66
+ *
67
+ * ```ts
68
+ * import { actorCalled } from '@serenity-js/core'
69
+ * import { Ensure, contain } from '@serenity-js/assertions'
70
+ * import { By, CssClasses, PageElement } from '@serenity-js/web'
71
+ *
72
+ * class ShoppingList {
73
+ * static items = () =>
74
+ * PageElements.located(By.css('#shopping-list li'))
75
+ * .describedAs('items')
76
+ *
77
+ * static outstandingItems = () =>
78
+ * ShoppingList.items()
79
+ * .where(CssClasses, contain('buy'))
80
+ * }
81
+ *
82
+ * await actorCalled('Lisa')
83
+ * .attemptsTo(
84
+ * Ensure.that(
85
+ * Text.ofAll(ShoppingList.outstandingItems()),
86
+ * equals([ 'Honey', 'Chocolate' ])
87
+ * ),
88
+ * )
89
+ * ```
90
+ *
91
+ * ## Learn more
92
+ * - {@apilink BrowseTheWeb}
93
+ * - {@apilink MetaQuestion}
94
+ * - {@apilink QuestionAdapter}
95
+ * - {@apilink Question}
96
+ *
97
+ * @group Questions
59
98
  */
60
- class CssClasses extends ElementQuestion_1.ElementQuestion {
99
+ class CssClasses extends core_1.Question {
61
100
  /**
62
- * @param {Question<PageElement> | PageElement} target
101
+ * Instantiates a {@apilink Question} that uses
102
+ * the {@apilink Actor|actor's} {@apilink Ability|ability} to {@apilink BrowseTheWeb} to retrieve
103
+ * a list of [CSS classes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-class)
104
+ * of a given {@apilink PageElement}.
105
+ *
106
+ * #### Learn more
107
+ * - {@apilink MetaQuestion}
108
+ *
109
+ * @param pageElement
63
110
  */
64
- constructor(target) {
65
- super((0, io_1.formatted) `CSS classes of ${target}`);
66
- this.target = target;
111
+ static of(pageElement) {
112
+ return core_1.Question.createAdapter(new CssClasses(pageElement));
67
113
  }
68
- /**
69
- * @param {Question<PageElement> | PageElement} target
70
- * @returns {CssClasses}
71
- */
72
- static of(target) {
73
- return new CssClasses(target);
114
+ constructor(pageElement) {
115
+ super();
116
+ this.pageElement = pageElement;
117
+ this.subject = (0, core_1.d) `CSS classes of ${pageElement}`;
74
118
  }
75
119
  /**
76
- * @desc
77
- * Resolves to an array of CSS classes of the `target` element,
78
- * located in the context of a `parent` element.
120
+ * Instantiates a {@apilink Question} that uses
121
+ * the {@apilink Actor|actor's} {@apilink Ability|ability} to {@apilink BrowseTheWeb} to retrieve
122
+ * a list of [CSS classes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-class)
123
+ * of a given {@apilink PageElement},
124
+ * located in a given `parent` element.
79
125
  *
80
- * @param {@serenity-js/core/lib/screenplay~Answerable<Element>} parent
81
- * @returns {Question<Promise<string[]>>}
126
+ * #### Learn more
127
+ * - {@apilink MetaQuestion}
82
128
  *
83
- * @see {@link Target.all}
84
- * @see {@link @serenity-js/core/lib/screenplay/questions~MetaQuestion}
129
+ * @param parent
85
130
  */
86
131
  of(parent) {
87
- return new CssClasses(models_1.PageElement.of(this.target, parent));
132
+ return new CssClasses(models_1.PageElement.of(this.pageElement, parent));
88
133
  }
89
134
  /**
90
- * @desc
91
- * Makes the provided {@link @serenity-js/core/lib/screenplay/actor~Actor}
92
- * answer this {@link @serenity-js/core/lib/screenplay~Question}.
93
- *
94
- * @param {AnswersQuestions & UsesAbilities} actor
95
- * @returns {Promise<void>}
96
- *
97
- * @see {@link @serenity-js/core/lib/screenplay/actor~Actor}
98
- * @see {@link @serenity-js/core/lib/screenplay/actor~AnswersQuestions}
99
- * @see {@link @serenity-js/core/lib/screenplay/actor~UsesAbilities}
135
+ * @inheritDoc
100
136
  */
101
137
  async answeredBy(actor) {
102
- const element = await this.resolve(actor, this.target);
138
+ const element = await actor.answer(this.pageElement);
103
139
  return element.attribute('class')
104
140
  .then(attribute => attribute !== null && attribute !== void 0 ? attribute : '')
105
141
  .then(attribute => attribute
@@ -108,6 +144,19 @@ class CssClasses extends ElementQuestion_1.ElementQuestion {
108
144
  .split(' ')
109
145
  .filter(cssClass => !!cssClass));
110
146
  }
147
+ /**
148
+ * @inheritDoc
149
+ */
150
+ describedAs(subject) {
151
+ this.subject = subject;
152
+ return this;
153
+ }
154
+ /**
155
+ * @inheritDoc
156
+ */
157
+ toString() {
158
+ return this.subject;
159
+ }
111
160
  }
112
161
  exports.CssClasses = CssClasses;
113
162
  //# sourceMappingURL=CssClasses.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CssClasses.js","sourceRoot":"","sources":["../../../src/screenplay/questions/CssClasses.ts"],"names":[],"mappings":";;;AACA,iDAAqD;AAErD,sCAAwC;AACxC,uDAAoD;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAa,UACT,SAAQ,iCAAkC;IAW1C;;OAEG;IACH,YAA6B,MAA+B;QACxD,KAAK,CAAC,IAAA,cAAS,EAAC,kBAAmB,MAAM,EAAE,CAAC,CAAC;QADpB,WAAM,GAAN,MAAM,CAAyB;IAE5D,CAAC;IAbD;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,MAA+B;QACrC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IASD;;;;;;;;;;OAUG;IACH,EAAE,CAAC,MAA+B;QAC9B,OAAO,IAAI,UAAU,CAAC,oBAAW,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,UAAU,CAAC,KAAuC;QACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEvD,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;aAC5B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC;aAClC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS;aACvB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,IAAI,EAAE;aACN,KAAK,CAAC,GAAG,CAAC;aACV,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAE,QAAQ,CAAC,CACnC,CAAC;IACV,CAAC;CACJ;AA1DD,gCA0DC"}
1
+ {"version":3,"file":"CssClasses.js","sourceRoot":"","sources":["../../../src/screenplay/questions/CssClasses.ts"],"names":[],"mappings":";;;AAAA,4CAA4H;AAE5H,sCAAwC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AACH,MAAa,UACT,SAAQ,eAA2B;IAKnC;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,CAAC,WAAoC;QAC1C,OAAO,eAAQ,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAyF,CAAC;IACvJ,CAAC;IAED,YAAuC,WAAoC;QACvE,KAAK,EAAE,CAAC;QAD2B,gBAAW,GAAX,WAAW,CAAyB;QAEvE,IAAI,CAAC,OAAO,GAAG,IAAA,QAAC,EAAA,kBAAmB,WAAW,EAAE,CAAC;IACrD,CAAC;IAED;;;;;;;;;;;OAWG;IACH,EAAE,CAAC,MAA+B;QAC9B,OAAO,IAAI,UAAU,CAAC,oBAAW,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAuC;QACpD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAErD,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;aAC5B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC;aAClC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS;aACvB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,IAAI,EAAE;aACN,KAAK,CAAC,GAAG,CAAC;aACV,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAE,QAAQ,CAAC,CACnC,CAAC;IACV,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAe;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ;AAxED,gCAwEC"}
@@ -1,14 +1,50 @@
1
1
  import { QuestionAdapter } from '@serenity-js/core';
2
2
  /**
3
- * @desc
4
- * Returns the result of last script executed via {@link ExecuteScript}
3
+ * Uses the {@apilink Actor|actor's} {@apilink Ability|ability} to {@apilink BrowseTheWeb} to retrieve
4
+ * a returns the result of the last script executed via {@apilink ExecuteScript}.
5
+ *
6
+ * ## Executing a script and reading the result
7
+ *
8
+ * ```ts
9
+ * import { actorCalled } from '@serenity-js/core'
10
+ * import { ExecuteScript, LastScriptExecution } from '@serenity-js/web'
11
+ * import { Ensure, includes } from '@serenity-js/assertions'
12
+ *
13
+ * await actorCalled('Joseph')
14
+ * .attemptsTo(
15
+ * ExecuteScript.sync(() => navigator.userAgent),
16
+ * Ensure.that(LastScriptExecution.result<string>(), includes('Chrome')),
17
+ * )
18
+ * ```
19
+ *
20
+ * ## Using LastScriptExecution as {@apilink QuestionAdapter}
21
+ *
22
+ * ```ts
23
+ * import { actorCalled } from '@serenity-js/core'
24
+ * import { ExecuteScript, LastScriptExecution } from '@serenity-js/web'
25
+ * import { Ensure, includes } from '@serenity-js/assertions'
26
+ *
27
+ * await actorCalled('Joseph')
28
+ * .attemptsTo(
29
+ * ExecuteScript.sync(() => navigator.userAgent),
30
+ * Ensure.that(
31
+ * LastScriptExecution.result<string>().toLocaleLowerCase(),
32
+ * includes('chrome')
33
+ * ),
34
+ * )
35
+ * ```
36
+ *
37
+ * ## Learn more
38
+ * - {@apilink ExecuteScript}
39
+ * - {@apilink BrowseTheWeb}
40
+ * - {@apilink QuestionAdapter}
41
+ *
42
+ * @group Questions
5
43
  */
6
44
  export declare class LastScriptExecution {
7
45
  /**
8
- * @desc
9
- * Enables asserting on the result of a function executed via {@link ExecuteScript}.
10
- *
11
- * @returns {Question<R>}
46
+ * Enables asserting on the result of a function executed via {@apilink ExecuteScript}.
12
47
  */
13
48
  static result<R>(): QuestionAdapter<R>;
14
49
  }
50
+ //# sourceMappingURL=LastScriptExecution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LastScriptExecution.d.ts","sourceRoot":"","sources":["../../../src/screenplay/questions/LastScriptExecution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAI9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,qBAAa,mBAAmB;IAE5B;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC;CAMzC"}
@@ -4,18 +4,56 @@ exports.LastScriptExecution = void 0;
4
4
  const core_1 = require("@serenity-js/core");
5
5
  const abilities_1 = require("../abilities");
6
6
  /**
7
- * @desc
8
- * Returns the result of last script executed via {@link ExecuteScript}
7
+ * Uses the {@apilink Actor|actor's} {@apilink Ability|ability} to {@apilink BrowseTheWeb} to retrieve
8
+ * a returns the result of the last script executed via {@apilink ExecuteScript}.
9
+ *
10
+ * ## Executing a script and reading the result
11
+ *
12
+ * ```ts
13
+ * import { actorCalled } from '@serenity-js/core'
14
+ * import { ExecuteScript, LastScriptExecution } from '@serenity-js/web'
15
+ * import { Ensure, includes } from '@serenity-js/assertions'
16
+ *
17
+ * await actorCalled('Joseph')
18
+ * .attemptsTo(
19
+ * ExecuteScript.sync(() => navigator.userAgent),
20
+ * Ensure.that(LastScriptExecution.result<string>(), includes('Chrome')),
21
+ * )
22
+ * ```
23
+ *
24
+ * ## Using LastScriptExecution as {@apilink QuestionAdapter}
25
+ *
26
+ * ```ts
27
+ * import { actorCalled } from '@serenity-js/core'
28
+ * import { ExecuteScript, LastScriptExecution } from '@serenity-js/web'
29
+ * import { Ensure, includes } from '@serenity-js/assertions'
30
+ *
31
+ * await actorCalled('Joseph')
32
+ * .attemptsTo(
33
+ * ExecuteScript.sync(() => navigator.userAgent),
34
+ * Ensure.that(
35
+ * LastScriptExecution.result<string>().toLocaleLowerCase(),
36
+ * includes('chrome')
37
+ * ),
38
+ * )
39
+ * ```
40
+ *
41
+ * ## Learn more
42
+ * - {@apilink ExecuteScript}
43
+ * - {@apilink BrowseTheWeb}
44
+ * - {@apilink QuestionAdapter}
45
+ *
46
+ * @group Questions
9
47
  */
10
48
  class LastScriptExecution {
11
49
  /**
12
- * @desc
13
- * Enables asserting on the result of a function executed via {@link ExecuteScript}.
14
- *
15
- * @returns {Question<R>}
50
+ * Enables asserting on the result of a function executed via {@apilink ExecuteScript}.
16
51
  */
17
52
  static result() {
18
- return core_1.Question.about(`last script execution result`, actor => abilities_1.BrowseTheWeb.as(actor).lastScriptExecutionResult());
53
+ return core_1.Question.about(`last script execution result`, async (actor) => {
54
+ const page = await abilities_1.BrowseTheWeb.as(actor).currentPage();
55
+ return page.lastScriptExecutionResult();
56
+ });
19
57
  }
20
58
  }
21
59
  exports.LastScriptExecution = LastScriptExecution;
@@ -1 +1 @@
1
- {"version":3,"file":"LastScriptExecution.js","sourceRoot":"","sources":["../../../src/screenplay/questions/LastScriptExecution.ts"],"names":[],"mappings":";;;AAAA,4CAA8D;AAE9D,4CAA4C;AAE5C;;;GAGG;AACH,MAAa,mBAAmB;IAE5B;;;;;OAKG;IACH,MAAM,CAAC,MAAM;QACT,OAAO,eAAQ,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,EAAE,CAC1D,wBAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAC5D,CAAC;CACJ;AAZD,kDAYC"}
1
+ {"version":3,"file":"LastScriptExecution.js","sourceRoot":"","sources":["../../../src/screenplay/questions/LastScriptExecution.ts"],"names":[],"mappings":";;;AAAA,4CAA8D;AAE9D,4CAA4C;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAa,mBAAmB;IAE5B;;OAEG;IACH,MAAM,CAAC,MAAM;QACT,OAAO,eAAQ,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;YAChE,MAAM,IAAI,GAAG,MAAM,wBAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,yBAAyB,EAAK,CAAC;QAC/C,CAAC,CAAC,CAAA;IACN,CAAC;CACJ;AAXD,kDAWC"}