@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,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -13,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
17
  __exportStar(require("./By"), exports);
14
18
  __exportStar(require("./ByCss"), exports);
15
19
  __exportStar(require("./ByCssContainingText"), exports);
20
+ __exportStar(require("./ByDeepCss"), exports);
16
21
  __exportStar(require("./ById"), exports);
17
22
  __exportStar(require("./ByTagName"), exports);
18
23
  __exportStar(require("./ByXPath"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/screenplay/models/selectors/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uCAAqB;AACrB,0CAAwB;AACxB,wDAAsC;AACtC,yCAAuB;AACvB,8CAA4B;AAC5B,4CAA0B;AAC1B,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/screenplay/models/selectors/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uCAAqB;AACrB,0CAAwB;AACxB,wDAAsC;AACtC,8CAA4B;AAC5B,yCAAuB;AACvB,8CAA4B;AAC5B,4CAA0B;AAC1B,6CAA2B"}
@@ -1,83 +1,131 @@
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
- * Returns the value of the given HTML attribute of a given {@link WebElement},
7
- * represented by Answerable<{@link @wdio/types~Element}>
8
- *
9
- * @example <caption>Example widget</caption>
10
- * <ul id="shopping-list" data-items-left="2">
11
- * <li data-state="bought">Coffee<li>
12
- * <li data-state="buy">Honey<li>
13
- * <li data-state="buy">Chocolate<li>
14
- * </ul>
15
- *
16
- * @example <caption>Retrieve a HTML attribute of a given WebElement</caption>
17
- * import { actorCalled } from '@serenity-js/core';
18
- * import { Ensure, equals } from '@serenity-js/assertions';
19
- * import { Attribute, by, BrowseTheWeb, Target } from '@serenity-js/webdriverio';
4
+ * Uses the {@apilink Actor|actor's} {@apilink Ability|ability} to {@apilink BrowseTheWeb} to retrieve
5
+ * the value of the specified HTML attribute of a given {@apilink PageElement}.
6
+ *
7
+ * ## Example widget
8
+ *
9
+ * ```html
10
+ * <ul id="shopping-list" data-items-left="2">
11
+ * <li data-state="bought">Coffee<li>
12
+ * <li data-state="buy">Honey<li>
13
+ * <li data-state="buy">Chocolate<li>
14
+ * </ul>
15
+ * ```
16
+ *
17
+ * ## Retrieve an HTML attribute of a given {@apilink PageElement}
18
+ *
19
+ * ```ts
20
+ * import { actorCalled } from '@serenity-js/core'
21
+ * import { Ensure, equals } from '@serenity-js/assertions'
22
+ * import { Attribute, By, PageElement } from '@serenity-js/web'
20
23
  *
21
24
  * 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(Attribute.called('data-items-left').of(shoppingList()), equals('2')),
28
- * )
29
- *
30
- * @example <caption>Find WebElements with a given attribute</caption>
31
- * import { actorCalled } from '@serenity-js/core';
32
- * import { Ensure, includes } from '@serenity-js/assertions';
33
- * import { Attribute, BrowseTheWeb, by, 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(Attribute.called('data-state'), includes('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}
25
+ * PageElement.located(By.id('shopping-list'))
26
+ * .describedAs('shopping list')
27
+ *
28
+ * await actorCalled('Lisa')
29
+ * .attemptsTo(
30
+ * Ensure.that(
31
+ * Attribute.called('data-items-left').of(shoppingList()),
32
+ * equals('2')
33
+ * ),
34
+ * )
35
+ * ```
36
+ *
37
+ * ## Using `Attribute` as {@apilink QuestionAdapter}
38
+ *
39
+ * ```ts
40
+ * import { actorCalled } from '@serenity-js/core'
41
+ * import { Ensure, equals } from '@serenity-js/assertions'
42
+ * import { Attribute, By, PageElement } from '@serenity-js/web'
43
+ *
44
+ * const shoppingList = () =>
45
+ * PageElement.located(By.css('#shopping-list'))
46
+ * .describedAs('shopping list')
47
+ *
48
+ * await actorCalled('Lisa')
49
+ * .attemptsTo(
50
+ * Ensure.that(
51
+ * Attribute.called('id').of(shoppingList()).toLocaleUpperCase(),
52
+ * equals('SHOPPING-LIST')
53
+ * ),
54
+ * )
55
+ * ```
56
+ *
57
+ * ## Using as filter in {@apilink PageElements|Page Element Query Language}
58
+ *
59
+ * ```ts
60
+ * import { actorCalled } from '@serenity-js/core'
61
+ * import { Ensure, includes } from '@serenity-js/assertions'
62
+ * import { Attribute, By, PageElements } from '@serenity-js/web'
63
+ *
64
+ * class ShoppingList {
65
+ * static items = () =>
66
+ * PageElements.located(By.css('#shopping-list li'))
67
+ * .describedAs('items')
68
+ *
69
+ * static outstandingItems = () =>
70
+ * ShoppingList.items()
71
+ * .where(
72
+ * Attribute.called('data-state'),
73
+ * includes('buy')
74
+ * )
75
+ * }
76
+ *
77
+ * await actorCalled('Lisa')
78
+ * .whoCan(BrowseTheWebWithWebdriverIO.using(browser))
79
+ * .attemptsTo(
80
+ * Ensure.that(
81
+ * Text.ofAll(ShoppingList.outstandingItems()),
82
+ * equals([ 'Honey', 'Chocolate' ])
83
+ * ),
84
+ * )
85
+ * ```
86
+ *
87
+ * ## Learn more
88
+ * - {@apilink BrowseTheWeb}
89
+ * - {@apilink MetaQuestion}
90
+ * - {@apilink QuestionAdapter}
91
+ * - {@apilink Question}
92
+ *
93
+ * @group Questions
56
94
  */
57
- export declare class Attribute extends ElementQuestion<Promise<string>> implements MetaQuestion<Answerable<PageElement>, Promise<string>> {
95
+ export declare class Attribute extends Question<Promise<string>> implements MetaQuestion<Answerable<PageElement>, Promise<string>> {
58
96
  private readonly name;
59
97
  private readonly element?;
98
+ private subject;
60
99
  /**
61
- * @param {Answerable<string>} name
62
- * @returns {Attribute}
100
+ * Instantiates a {@apilink Question} that uses
101
+ * the {@apilink Actor|actor's} {@apilink Ability|ability} to {@apilink BrowseTheWeb} to retrieve
102
+ * the value of the specified HTML attribute of a given {@apilink PageElement}.
103
+ *
104
+ * @param name
105
+ * The name of the attribute to retrieve
63
106
  */
64
107
  static called(name: Answerable<string>): Attribute;
108
+ protected constructor(name: Answerable<string>, element?: Answerable<PageElement>);
65
109
  /**
66
- * @param {Answerable<string>} name
67
- * @param {@serenity-js/core/lib/screenplay~Answerable<Element>} [element]
68
- */
69
- constructor(name: Answerable<string>, element?: Answerable<PageElement>);
70
- /**
71
- * @desc
72
- * Resolves to the value of a HTML attribute of the `target` element,
73
- * located in the context of a `parent` element.
110
+ * Resolves to the value of an HTML attribute of the `pageElement`.
74
111
  *
75
- * @param {Answerable<PageElement>} parent
76
- * @returns {Question<Promise<string[]>>}
112
+ * #### Learn more
113
+ * - {@apilink MetaQuestion}
77
114
  *
78
- * @see {@link Target.all}
79
- * @see {@link @serenity-js/core/lib/screenplay/questions~MetaQuestion}
115
+ * @param pageElement
116
+ */
117
+ of(pageElement: Answerable<PageElement>): QuestionAdapter<string> & MetaQuestion<Answerable<PageElement>, Promise<string>>;
118
+ /**
119
+ * @inheritDoc
80
120
  */
81
- of(parent: Answerable<PageElement>): Question<Promise<string>>;
82
121
  answeredBy(actor: AnswersQuestions & UsesAbilities): Promise<string>;
122
+ /**
123
+ * @inheritDoc
124
+ */
125
+ describedAs(subject: string): this;
126
+ /**
127
+ * @inheritDoc
128
+ */
129
+ toString(): string;
83
130
  }
131
+ //# sourceMappingURL=Attribute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Attribute.d.ts","sourceRoot":"","sources":["../../../src/screenplay/questions/Attribute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAiB,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAExI,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FG;AACH,qBAAa,SACT,SAAQ,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAChC,YAAW,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAiB7D,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAhB7B,OAAO,CAAC,OAAO,CAAS;IAExB;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,SAAS;IAIlD,SAAS,aACY,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EACxB,OAAO,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC;IAQtD;;;;;;;OAOG;IACH,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAW1H;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAY1E;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlC;;OAEG;IACH,QAAQ,IAAI,MAAM;CAGrB"}
@@ -3,101 +3,155 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Attribute = void 0;
4
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
- * Returns the value of the given HTML attribute of a given {@link WebElement},
10
- * represented by Answerable<{@link @wdio/types~Element}>
11
- *
12
- * @example <caption>Example widget</caption>
13
- * <ul id="shopping-list" data-items-left="2">
14
- * <li data-state="bought">Coffee<li>
15
- * <li data-state="buy">Honey<li>
16
- * <li data-state="buy">Chocolate<li>
17
- * </ul>
18
- *
19
- * @example <caption>Retrieve a HTML attribute of a given WebElement</caption>
20
- * import { actorCalled } from '@serenity-js/core';
21
- * import { Ensure, equals } from '@serenity-js/assertions';
22
- * import { Attribute, by, BrowseTheWeb, Target } from '@serenity-js/webdriverio';
7
+ * Uses the {@apilink Actor|actor's} {@apilink Ability|ability} to {@apilink BrowseTheWeb} to retrieve
8
+ * the value of the specified HTML attribute of a given {@apilink PageElement}.
9
+ *
10
+ * ## Example widget
11
+ *
12
+ * ```html
13
+ * <ul id="shopping-list" data-items-left="2">
14
+ * <li data-state="bought">Coffee<li>
15
+ * <li data-state="buy">Honey<li>
16
+ * <li data-state="buy">Chocolate<li>
17
+ * </ul>
18
+ * ```
19
+ *
20
+ * ## Retrieve an HTML attribute of a given {@apilink PageElement}
21
+ *
22
+ * ```ts
23
+ * import { actorCalled } from '@serenity-js/core'
24
+ * import { Ensure, equals } from '@serenity-js/assertions'
25
+ * import { Attribute, By, PageElement } from '@serenity-js/web'
23
26
  *
24
27
  * 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(Attribute.called('data-items-left').of(shoppingList()), equals('2')),
31
- * )
32
- *
33
- * @example <caption>Find WebElements with a given attribute</caption>
34
- * import { actorCalled } from '@serenity-js/core';
35
- * import { Ensure, includes } from '@serenity-js/assertions';
36
- * import { Attribute, BrowseTheWeb, by, 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(Attribute.called('data-state'), includes('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}
28
+ * PageElement.located(By.id('shopping-list'))
29
+ * .describedAs('shopping list')
30
+ *
31
+ * await actorCalled('Lisa')
32
+ * .attemptsTo(
33
+ * Ensure.that(
34
+ * Attribute.called('data-items-left').of(shoppingList()),
35
+ * equals('2')
36
+ * ),
37
+ * )
38
+ * ```
39
+ *
40
+ * ## Using `Attribute` as {@apilink QuestionAdapter}
41
+ *
42
+ * ```ts
43
+ * import { actorCalled } from '@serenity-js/core'
44
+ * import { Ensure, equals } from '@serenity-js/assertions'
45
+ * import { Attribute, By, PageElement } from '@serenity-js/web'
46
+ *
47
+ * const shoppingList = () =>
48
+ * PageElement.located(By.css('#shopping-list'))
49
+ * .describedAs('shopping list')
50
+ *
51
+ * await actorCalled('Lisa')
52
+ * .attemptsTo(
53
+ * Ensure.that(
54
+ * Attribute.called('id').of(shoppingList()).toLocaleUpperCase(),
55
+ * equals('SHOPPING-LIST')
56
+ * ),
57
+ * )
58
+ * ```
59
+ *
60
+ * ## Using as filter in {@apilink PageElements|Page Element Query Language}
61
+ *
62
+ * ```ts
63
+ * import { actorCalled } from '@serenity-js/core'
64
+ * import { Ensure, includes } from '@serenity-js/assertions'
65
+ * import { Attribute, By, PageElements } from '@serenity-js/web'
66
+ *
67
+ * class ShoppingList {
68
+ * static items = () =>
69
+ * PageElements.located(By.css('#shopping-list li'))
70
+ * .describedAs('items')
71
+ *
72
+ * static outstandingItems = () =>
73
+ * ShoppingList.items()
74
+ * .where(
75
+ * Attribute.called('data-state'),
76
+ * includes('buy')
77
+ * )
78
+ * }
79
+ *
80
+ * await actorCalled('Lisa')
81
+ * .whoCan(BrowseTheWebWithWebdriverIO.using(browser))
82
+ * .attemptsTo(
83
+ * Ensure.that(
84
+ * Text.ofAll(ShoppingList.outstandingItems()),
85
+ * equals([ 'Honey', 'Chocolate' ])
86
+ * ),
87
+ * )
88
+ * ```
89
+ *
90
+ * ## Learn more
91
+ * - {@apilink BrowseTheWeb}
92
+ * - {@apilink MetaQuestion}
93
+ * - {@apilink QuestionAdapter}
94
+ * - {@apilink Question}
95
+ *
96
+ * @group Questions
59
97
  */
60
- class Attribute extends ElementQuestion_1.ElementQuestion {
98
+ class Attribute extends core_1.Question {
61
99
  /**
62
- * @param {Answerable<string>} name
63
- * @param {@serenity-js/core/lib/screenplay~Answerable<Element>} [element]
100
+ * Instantiates a {@apilink Question} that uses
101
+ * the {@apilink Actor|actor's} {@apilink Ability|ability} to {@apilink BrowseTheWeb} to retrieve
102
+ * the value of the specified HTML attribute of a given {@apilink PageElement}.
103
+ *
104
+ * @param name
105
+ * The name of the attribute to retrieve
64
106
  */
107
+ static called(name) {
108
+ return new Attribute(name);
109
+ }
65
110
  constructor(name, element) {
66
- super(`"${name}" attribute of ${element}`);
111
+ super();
67
112
  this.name = name;
68
113
  this.element = element;
114
+ this.subject = element
115
+ ? (0, core_1.d) `${name} attribute of ${element}`
116
+ : (0, core_1.d) `${name} attribute`;
69
117
  }
70
118
  /**
71
- * @param {Answerable<string>} name
72
- * @returns {Attribute}
73
- */
74
- static called(name) {
75
- return new Attribute(name);
76
- }
77
- /**
78
- * @desc
79
- * Resolves to the value of a HTML attribute of the `target` element,
80
- * located in the context of a `parent` element.
119
+ * Resolves to the value of an HTML attribute of the `pageElement`.
81
120
  *
82
- * @param {Answerable<PageElement>} parent
83
- * @returns {Question<Promise<string[]>>}
121
+ * #### Learn more
122
+ * - {@apilink MetaQuestion}
84
123
  *
85
- * @see {@link Target.all}
86
- * @see {@link @serenity-js/core/lib/screenplay/questions~MetaQuestion}
124
+ * @param pageElement
87
125
  */
88
- of(parent) {
89
- return new Attribute(this.name, this.element
90
- ? models_1.PageElement.of(this.element, parent)
91
- : parent);
126
+ of(pageElement) {
127
+ return core_1.Question.createAdapter(new Attribute(this.name, this.element
128
+ ? models_1.PageElement.of(this.element, pageElement)
129
+ : pageElement));
92
130
  }
131
+ /**
132
+ * @inheritDoc
133
+ */
93
134
  async answeredBy(actor) {
135
+ const name = await actor.answer(this.name);
94
136
  if (!this.element) {
95
- throw new core_1.LogicError(`Target not specified`); // todo: better error message?
137
+ throw new core_1.LogicError((0, core_1.d) `Couldn't read attribute ${name} of an unspecified page element.`);
96
138
  }
97
139
  const element = await actor.answer(this.element);
98
- const name = await actor.answer(this.name);
99
140
  return element.attribute(name);
100
141
  }
142
+ /**
143
+ * @inheritDoc
144
+ */
145
+ describedAs(subject) {
146
+ this.subject = subject;
147
+ return this;
148
+ }
149
+ /**
150
+ * @inheritDoc
151
+ */
152
+ toString() {
153
+ return this.subject;
154
+ }
101
155
  }
102
156
  exports.Attribute = Attribute;
103
157
  //# sourceMappingURL=Attribute.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Attribute.js","sourceRoot":"","sources":["../../../src/screenplay/questions/Attribute.ts"],"names":[],"mappings":";;;AAAA,4CAAoH;AAEpH,sCAAwC;AACxC,uDAAoD;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAa,SACT,SAAQ,iCAAgC;IAWxC;;;OAGG;IACH,YACqB,IAAwB,EACxB,OAAiC;QAElD,KAAK,CAAC,IAAK,IAAK,kBAAmB,OAAQ,EAAE,CAAC,CAAC;QAH9B,SAAI,GAAJ,IAAI,CAAoB;QACxB,YAAO,GAAP,OAAO,CAA0B;IAGtD,CAAC;IAjBD;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,IAAwB;QAClC,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAaD;;;;;;;;;;OAUG;IACH,EAAE,CAAC,MAA+B;QAC9B,OAAO,IAAI,SAAS,CAChB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO;YACR,CAAC,CAAC,oBAAW,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;YACtC,CAAC,CAAC,MAAM,CACf,CAAC;IACN,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAuC;QACpD,IAAI,CAAE,IAAI,CAAC,OAAO,EAAE;YAChB,MAAM,IAAI,iBAAU,CAAC,sBAAsB,CAAC,CAAC,CAAG,8BAA8B;SACjF;QAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,IAAI,GAAM,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE9C,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACJ;AArDD,8BAqDC"}
1
+ {"version":3,"file":"Attribute.js","sourceRoot":"","sources":["../../../src/screenplay/questions/Attribute.ts"],"names":[],"mappings":";;;AAAA,4CAAwI;AAExI,sCAAwC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FG;AACH,MAAa,SACT,SAAQ,eAAyB;IAKjC;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CAAC,IAAwB;QAClC,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,YACqB,IAAwB,EACxB,OAAiC;QAElD,KAAK,EAAE,CAAC;QAHS,SAAI,GAAJ,IAAI,CAAoB;QACxB,YAAO,GAAP,OAAO,CAA0B;QAGlD,IAAI,CAAC,OAAO,GAAG,OAAO;YAClB,CAAC,CAAC,IAAA,QAAC,EAAA,GAAI,IAAK,iBAAkB,OAAQ,EAAE;YACxC,CAAC,CAAC,IAAA,QAAC,EAAA,GAAI,IAAK,YAAY,CAAA;IAChC,CAAC;IAED;;;;;;;OAOG;IACH,EAAE,CAAC,WAAoC;QACnC,OAAO,eAAQ,CAAC,aAAa,CACzB,IAAI,SAAS,CACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO;YACR,CAAC,CAAC,oBAAW,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;YAC3C,CAAC,CAAC,WAAW,CACpB,CACgF,CAAC;IAC1F,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAuC;QACpD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAE,IAAI,CAAC,OAAO,EAAE;YAChB,MAAM,IAAI,iBAAU,CAAC,IAAA,QAAC,EAAA,2BAA4B,IAAK,kCAAkC,CAAC,CAAC;SAC9F;QAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjD,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,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;AA5ED,8BA4EC"}