@serenity-js/web 3.0.0-rc.3 → 3.0.0-rc.31

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 (426) hide show
  1. package/CHANGELOG.md +269 -10
  2. package/README.md +1 -1
  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/ElementExpectation.d.ts +119 -6
  20. package/lib/expectations/ElementExpectation.d.ts.map +1 -0
  21. package/lib/expectations/ElementExpectation.js +124 -14
  22. package/lib/expectations/ElementExpectation.js.map +1 -1
  23. package/lib/expectations/index.d.ts +2 -1
  24. package/lib/expectations/index.d.ts.map +1 -0
  25. package/lib/expectations/index.js +6 -2
  26. package/lib/expectations/index.js.map +1 -1
  27. package/lib/expectations/isActive.d.ts +15 -9
  28. package/lib/expectations/isActive.d.ts.map +1 -0
  29. package/lib/expectations/isActive.js +16 -10
  30. package/lib/expectations/isActive.js.map +1 -1
  31. package/lib/expectations/isClickable.d.ts +15 -14
  32. package/lib/expectations/isClickable.d.ts.map +1 -0
  33. package/lib/expectations/isClickable.js +14 -16
  34. package/lib/expectations/isClickable.js.map +1 -1
  35. package/lib/expectations/isEnabled.d.ts +15 -8
  36. package/lib/expectations/isEnabled.d.ts.map +1 -0
  37. package/lib/expectations/isEnabled.js +16 -8
  38. package/lib/expectations/isEnabled.js.map +1 -1
  39. package/lib/expectations/isSelected.d.ts +15 -8
  40. package/lib/expectations/isSelected.d.ts.map +1 -0
  41. package/lib/expectations/isSelected.js +14 -9
  42. package/lib/expectations/isSelected.js.map +1 -1
  43. package/lib/expectations/isVisible.d.ts +15 -8
  44. package/lib/expectations/isVisible.d.ts.map +1 -0
  45. package/lib/expectations/isVisible.js +16 -8
  46. package/lib/expectations/isVisible.js.map +1 -1
  47. package/lib/index.d.ts +1 -1
  48. package/lib/index.d.ts.map +1 -0
  49. package/lib/index.js +5 -2
  50. package/lib/index.js.map +1 -1
  51. package/lib/screenplay/abilities/BrowseTheWeb.d.ts +94 -43
  52. package/lib/screenplay/abilities/BrowseTheWeb.d.ts.map +1 -0
  53. package/lib/screenplay/abilities/BrowseTheWeb.js +96 -6
  54. package/lib/screenplay/abilities/BrowseTheWeb.js.map +1 -1
  55. package/lib/screenplay/abilities/index.d.ts +1 -1
  56. package/lib/screenplay/abilities/index.d.ts.map +1 -0
  57. package/lib/screenplay/abilities/index.js +5 -2
  58. package/lib/screenplay/abilities/index.js.map +1 -1
  59. package/lib/screenplay/index.d.ts +1 -0
  60. package/lib/screenplay/index.d.ts.map +1 -0
  61. package/lib/screenplay/index.js +5 -1
  62. package/lib/screenplay/index.js.map +1 -1
  63. package/lib/screenplay/interactions/Clear.d.ts +50 -55
  64. package/lib/screenplay/interactions/Clear.d.ts.map +1 -0
  65. package/lib/screenplay/interactions/Clear.js +67 -60
  66. package/lib/screenplay/interactions/Clear.js.map +1 -1
  67. package/lib/screenplay/interactions/Click.d.ts +41 -50
  68. package/lib/screenplay/interactions/Click.d.ts.map +1 -0
  69. package/lib/screenplay/interactions/Click.js +42 -52
  70. package/lib/screenplay/interactions/Click.js.map +1 -1
  71. package/lib/screenplay/interactions/DoubleClick.d.ts +64 -67
  72. package/lib/screenplay/interactions/DoubleClick.d.ts.map +1 -0
  73. package/lib/screenplay/interactions/DoubleClick.js +67 -71
  74. package/lib/screenplay/interactions/DoubleClick.js.map +1 -1
  75. package/lib/screenplay/interactions/Enter.d.ts +42 -51
  76. package/lib/screenplay/interactions/Enter.d.ts.map +1 -0
  77. package/lib/screenplay/interactions/Enter.js +38 -48
  78. package/lib/screenplay/interactions/Enter.js.map +1 -1
  79. package/lib/screenplay/interactions/ExecuteScript.d.ts +144 -148
  80. package/lib/screenplay/interactions/ExecuteScript.d.ts.map +1 -0
  81. package/lib/screenplay/interactions/ExecuteScript.js +163 -185
  82. package/lib/screenplay/interactions/ExecuteScript.js.map +1 -1
  83. package/lib/screenplay/interactions/Hover.d.ts +40 -50
  84. package/lib/screenplay/interactions/Hover.d.ts.map +1 -0
  85. package/lib/screenplay/interactions/Hover.js +43 -54
  86. package/lib/screenplay/interactions/Hover.js.map +1 -1
  87. package/lib/screenplay/interactions/Navigate.d.ts +106 -113
  88. package/lib/screenplay/interactions/Navigate.d.ts.map +1 -0
  89. package/lib/screenplay/interactions/Navigate.js +124 -146
  90. package/lib/screenplay/interactions/Navigate.js.map +1 -1
  91. package/lib/screenplay/interactions/PageElementInteraction.d.ts +12 -28
  92. package/lib/screenplay/interactions/PageElementInteraction.d.ts.map +1 -0
  93. package/lib/screenplay/interactions/PageElementInteraction.js +12 -33
  94. package/lib/screenplay/interactions/PageElementInteraction.js.map +1 -1
  95. package/lib/screenplay/interactions/Press.d.ts +61 -55
  96. package/lib/screenplay/interactions/Press.d.ts.map +1 -0
  97. package/lib/screenplay/interactions/Press.js +74 -64
  98. package/lib/screenplay/interactions/Press.js.map +1 -1
  99. package/lib/screenplay/interactions/RightClick.d.ts +59 -65
  100. package/lib/screenplay/interactions/RightClick.d.ts.map +1 -0
  101. package/lib/screenplay/interactions/RightClick.js +62 -69
  102. package/lib/screenplay/interactions/RightClick.js.map +1 -1
  103. package/lib/screenplay/interactions/Scroll.d.ts +46 -64
  104. package/lib/screenplay/interactions/Scroll.d.ts.map +1 -0
  105. package/lib/screenplay/interactions/Scroll.js +48 -70
  106. package/lib/screenplay/interactions/Scroll.js.map +1 -1
  107. package/lib/screenplay/interactions/Select.d.ts +217 -193
  108. package/lib/screenplay/interactions/Select.d.ts.map +1 -0
  109. package/lib/screenplay/interactions/Select.js +215 -242
  110. package/lib/screenplay/interactions/Select.js.map +1 -1
  111. package/lib/screenplay/interactions/Switch.d.ts +105 -128
  112. package/lib/screenplay/interactions/Switch.d.ts.map +1 -0
  113. package/lib/screenplay/interactions/Switch.js +121 -172
  114. package/lib/screenplay/interactions/Switch.js.map +1 -1
  115. package/lib/screenplay/interactions/TakeScreenshot.d.ts +28 -50
  116. package/lib/screenplay/interactions/TakeScreenshot.d.ts.map +1 -0
  117. package/lib/screenplay/interactions/TakeScreenshot.js +29 -54
  118. package/lib/screenplay/interactions/TakeScreenshot.js.map +1 -1
  119. package/lib/screenplay/interactions/index.d.ts +2 -3
  120. package/lib/screenplay/interactions/index.d.ts.map +1 -0
  121. package/lib/screenplay/interactions/index.js +6 -4
  122. package/lib/screenplay/interactions/index.js.map +1 -1
  123. package/lib/screenplay/models/BrowserCapabilities.d.ts +24 -0
  124. package/lib/screenplay/models/BrowserCapabilities.d.ts.map +1 -0
  125. package/lib/screenplay/{abilities → models}/BrowserCapabilities.js +0 -0
  126. package/lib/screenplay/models/BrowserCapabilities.js.map +1 -0
  127. package/lib/screenplay/models/BrowsingSession.d.ts +69 -0
  128. package/lib/screenplay/models/BrowsingSession.d.ts.map +1 -0
  129. package/lib/screenplay/models/BrowsingSession.js +101 -0
  130. package/lib/screenplay/models/BrowsingSession.js.map +1 -0
  131. package/lib/screenplay/models/Cookie.d.ts +44 -65
  132. package/lib/screenplay/models/Cookie.d.ts.map +1 -0
  133. package/lib/screenplay/models/Cookie.js +43 -53
  134. package/lib/screenplay/models/Cookie.js.map +1 -1
  135. package/lib/screenplay/models/CookieData.d.ts +20 -58
  136. package/lib/screenplay/models/CookieData.d.ts.map +1 -0
  137. package/lib/{input → screenplay/models}/Key.d.ts +13 -9
  138. package/lib/screenplay/models/Key.d.ts.map +1 -0
  139. package/lib/{input → screenplay/models}/Key.js +12 -9
  140. package/lib/screenplay/models/Key.js.map +1 -0
  141. package/lib/screenplay/models/Locator.d.ts +32 -0
  142. package/lib/screenplay/models/Locator.d.ts.map +1 -0
  143. package/lib/screenplay/models/Locator.js +37 -0
  144. package/lib/screenplay/models/Locator.js.map +1 -0
  145. package/lib/screenplay/models/Page.d.ts +403 -41
  146. package/lib/screenplay/models/Page.d.ts.map +1 -0
  147. package/lib/screenplay/models/Page.js +211 -11
  148. package/lib/screenplay/models/Page.js.map +1 -1
  149. package/lib/screenplay/models/PageElement.d.ts +81 -11
  150. package/lib/screenplay/models/PageElement.d.ts.map +1 -0
  151. package/lib/screenplay/models/PageElement.js +31 -16
  152. package/lib/screenplay/models/PageElement.js.map +1 -1
  153. package/lib/screenplay/models/PageElements.d.ts +20 -9
  154. package/lib/screenplay/models/PageElements.d.ts.map +1 -0
  155. package/lib/screenplay/models/PageElements.js +44 -30
  156. package/lib/screenplay/models/PageElements.js.map +1 -1
  157. package/lib/screenplay/models/RootLocator.d.ts +22 -0
  158. package/lib/screenplay/models/RootLocator.d.ts.map +1 -0
  159. package/lib/screenplay/models/RootLocator.js +22 -0
  160. package/lib/screenplay/models/RootLocator.js.map +1 -0
  161. package/lib/screenplay/models/SelectOption.d.ts +25 -0
  162. package/lib/screenplay/models/SelectOption.d.ts.map +1 -0
  163. package/lib/screenplay/models/SelectOption.js +37 -0
  164. package/lib/screenplay/models/SelectOption.js.map +1 -0
  165. package/lib/screenplay/models/Switchable.d.ts +23 -0
  166. package/lib/screenplay/models/Switchable.d.ts.map +1 -0
  167. package/lib/screenplay/{interactions/WaitBuilder.js → models/Switchable.js} +1 -1
  168. package/lib/screenplay/models/Switchable.js.map +1 -0
  169. package/lib/screenplay/models/SwitchableOrigin.d.ts +18 -0
  170. package/lib/screenplay/models/SwitchableOrigin.d.ts.map +1 -0
  171. package/lib/screenplay/{interactions/EnterBuilder.js → models/SwitchableOrigin.js} +1 -1
  172. package/lib/screenplay/models/SwitchableOrigin.js.map +1 -0
  173. package/lib/screenplay/models/dialogs/AbsentModalDialog.d.ts +15 -0
  174. package/lib/screenplay/models/dialogs/AbsentModalDialog.d.ts.map +1 -0
  175. package/lib/screenplay/models/dialogs/AbsentModalDialog.js +24 -0
  176. package/lib/screenplay/models/dialogs/AbsentModalDialog.js.map +1 -0
  177. package/lib/screenplay/models/dialogs/AcceptedModalDialog.d.ts +17 -0
  178. package/lib/screenplay/models/dialogs/AcceptedModalDialog.d.ts.map +1 -0
  179. package/lib/screenplay/models/dialogs/AcceptedModalDialog.js +29 -0
  180. package/lib/screenplay/models/dialogs/AcceptedModalDialog.js.map +1 -0
  181. package/lib/screenplay/models/dialogs/DismissedModalDialog.d.ts +17 -0
  182. package/lib/screenplay/models/dialogs/DismissedModalDialog.d.ts.map +1 -0
  183. package/lib/screenplay/models/dialogs/DismissedModalDialog.js +29 -0
  184. package/lib/screenplay/models/dialogs/DismissedModalDialog.js.map +1 -0
  185. package/lib/screenplay/models/dialogs/ModalDialog.d.ts +168 -0
  186. package/lib/screenplay/models/dialogs/ModalDialog.d.ts.map +1 -0
  187. package/lib/screenplay/models/dialogs/ModalDialog.js +174 -0
  188. package/lib/screenplay/models/dialogs/ModalDialog.js.map +1 -0
  189. package/lib/screenplay/models/dialogs/ModalDialogHandler.d.ts +38 -0
  190. package/lib/screenplay/models/dialogs/ModalDialogHandler.d.ts.map +1 -0
  191. package/lib/screenplay/models/dialogs/ModalDialogHandler.js +30 -0
  192. package/lib/screenplay/models/dialogs/ModalDialogHandler.js.map +1 -0
  193. package/lib/screenplay/models/dialogs/index.d.ts +6 -0
  194. package/lib/screenplay/models/dialogs/index.d.ts.map +1 -0
  195. package/lib/screenplay/models/dialogs/index.js +22 -0
  196. package/lib/screenplay/models/dialogs/index.js.map +1 -0
  197. package/lib/screenplay/models/index.d.ts +10 -3
  198. package/lib/screenplay/models/index.d.ts.map +1 -0
  199. package/lib/screenplay/models/index.js +14 -4
  200. package/lib/screenplay/models/index.js.map +1 -1
  201. package/lib/screenplay/models/selectors/By.d.ts +38 -0
  202. package/lib/screenplay/models/selectors/By.d.ts.map +1 -0
  203. package/lib/screenplay/models/selectors/By.js +48 -6
  204. package/lib/screenplay/models/selectors/By.js.map +1 -1
  205. package/lib/screenplay/models/selectors/ByCss.d.ts +11 -1
  206. package/lib/screenplay/models/selectors/ByCss.d.ts.map +1 -0
  207. package/lib/screenplay/models/selectors/ByCss.js +11 -0
  208. package/lib/screenplay/models/selectors/ByCss.js.map +1 -1
  209. package/lib/screenplay/models/selectors/ByCssContainingText.d.ts +12 -2
  210. package/lib/screenplay/models/selectors/ByCssContainingText.d.ts.map +1 -0
  211. package/lib/screenplay/models/selectors/ByCssContainingText.js +11 -2
  212. package/lib/screenplay/models/selectors/ByCssContainingText.js.map +1 -1
  213. package/lib/screenplay/models/selectors/ByDeepCss.d.ts +14 -0
  214. package/lib/screenplay/models/selectors/ByDeepCss.d.ts.map +1 -0
  215. package/lib/screenplay/models/selectors/ByDeepCss.js +20 -0
  216. package/lib/screenplay/models/selectors/ByDeepCss.js.map +1 -0
  217. package/lib/screenplay/models/selectors/ById.d.ts +11 -1
  218. package/lib/screenplay/models/selectors/ById.d.ts.map +1 -0
  219. package/lib/screenplay/models/selectors/ById.js +11 -0
  220. package/lib/screenplay/models/selectors/ById.js.map +1 -1
  221. package/lib/screenplay/models/selectors/ByTagName.d.ts +11 -1
  222. package/lib/screenplay/models/selectors/ByTagName.d.ts.map +1 -0
  223. package/lib/screenplay/models/selectors/ByTagName.js +11 -0
  224. package/lib/screenplay/models/selectors/ByTagName.js.map +1 -1
  225. package/lib/screenplay/models/selectors/ByXPath.d.ts +11 -1
  226. package/lib/screenplay/models/selectors/ByXPath.d.ts.map +1 -0
  227. package/lib/screenplay/models/selectors/ByXPath.js +11 -0
  228. package/lib/screenplay/models/selectors/ByXPath.js.map +1 -1
  229. package/lib/screenplay/models/selectors/Selector.d.ts +7 -3
  230. package/lib/screenplay/models/selectors/Selector.d.ts.map +1 -0
  231. package/lib/screenplay/models/selectors/Selector.js +7 -6
  232. package/lib/screenplay/models/selectors/Selector.js.map +1 -1
  233. package/lib/screenplay/models/selectors/index.d.ts +2 -0
  234. package/lib/screenplay/models/selectors/index.d.ts.map +1 -0
  235. package/lib/screenplay/models/selectors/index.js +6 -1
  236. package/lib/screenplay/models/selectors/index.js.map +1 -1
  237. package/lib/screenplay/questions/Attribute.d.ts +115 -67
  238. package/lib/screenplay/questions/Attribute.d.ts.map +1 -0
  239. package/lib/screenplay/questions/Attribute.js +125 -71
  240. package/lib/screenplay/questions/Attribute.js.map +1 -1
  241. package/lib/screenplay/questions/CssClasses.d.ts +124 -79
  242. package/lib/screenplay/questions/CssClasses.d.ts.map +1 -0
  243. package/lib/screenplay/questions/CssClasses.js +132 -83
  244. package/lib/screenplay/questions/CssClasses.js.map +1 -1
  245. package/lib/screenplay/questions/LastScriptExecution.d.ts +44 -8
  246. package/lib/screenplay/questions/LastScriptExecution.d.ts.map +1 -0
  247. package/lib/screenplay/questions/LastScriptExecution.js +45 -7
  248. package/lib/screenplay/questions/LastScriptExecution.js.map +1 -1
  249. package/lib/screenplay/questions/Selected.d.ts +202 -171
  250. package/lib/screenplay/questions/Selected.d.ts.map +1 -0
  251. package/lib/screenplay/questions/Selected.js +225 -186
  252. package/lib/screenplay/questions/Selected.js.map +1 -1
  253. package/lib/screenplay/questions/Text.d.ts +103 -86
  254. package/lib/screenplay/questions/Text.d.ts.map +1 -0
  255. package/lib/screenplay/questions/Text.js +147 -95
  256. package/lib/screenplay/questions/Text.js.map +1 -1
  257. package/lib/screenplay/questions/Value.d.ts +77 -44
  258. package/lib/screenplay/questions/Value.d.ts.map +1 -0
  259. package/lib/screenplay/questions/Value.js +83 -46
  260. package/lib/screenplay/questions/Value.js.map +1 -1
  261. package/lib/screenplay/questions/index.d.ts +1 -0
  262. package/lib/screenplay/questions/index.d.ts.map +1 -0
  263. package/lib/screenplay/questions/index.js +5 -1
  264. package/lib/screenplay/questions/index.js.map +1 -1
  265. package/lib/scripts/index.d.ts +2 -0
  266. package/lib/scripts/index.d.ts.map +1 -0
  267. package/lib/{input → scripts}/index.js +6 -2
  268. package/lib/scripts/index.js.map +1 -0
  269. package/lib/scripts/isVisible.d.ts +2 -0
  270. package/lib/scripts/isVisible.d.ts.map +1 -0
  271. package/lib/scripts/isVisible.js +96 -0
  272. package/lib/scripts/isVisible.js.map +1 -0
  273. package/lib/stage/crew/index.d.ts +1 -0
  274. package/lib/stage/crew/index.d.ts.map +1 -0
  275. package/lib/stage/crew/index.js +5 -1
  276. package/lib/stage/crew/index.js.map +1 -1
  277. package/lib/stage/crew/photographer/Photographer.d.ts +97 -38
  278. package/lib/stage/crew/photographer/Photographer.d.ts.map +1 -0
  279. package/lib/stage/crew/photographer/Photographer.js +98 -39
  280. package/lib/stage/crew/photographer/Photographer.js.map +1 -1
  281. package/lib/stage/crew/photographer/index.d.ts +1 -0
  282. package/lib/stage/crew/photographer/index.d.ts.map +1 -0
  283. package/lib/stage/crew/photographer/index.js +5 -1
  284. package/lib/stage/crew/photographer/index.js.map +1 -1
  285. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.d.ts +13 -12
  286. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.d.ts.map +1 -0
  287. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js +17 -28
  288. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js.map +1 -1
  289. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.d.ts +8 -8
  290. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.d.ts.map +1 -0
  291. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.js +7 -8
  292. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.js.map +1 -1
  293. package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.d.ts +8 -7
  294. package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.d.ts.map +1 -0
  295. package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.js +7 -7
  296. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.d.ts +8 -8
  297. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.d.ts.map +1 -0
  298. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.js +7 -8
  299. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.js.map +1 -1
  300. package/lib/stage/crew/photographer/strategies/index.d.ts +1 -0
  301. package/lib/stage/crew/photographer/strategies/index.d.ts.map +1 -0
  302. package/lib/stage/crew/photographer/strategies/index.js +5 -1
  303. package/lib/stage/crew/photographer/strategies/index.js.map +1 -1
  304. package/lib/stage/index.d.ts +1 -0
  305. package/lib/stage/index.d.ts.map +1 -0
  306. package/lib/stage/index.js +5 -1
  307. package/lib/stage/index.js.map +1 -1
  308. package/package.json +18 -42
  309. package/src/errors/BrowserWindowClosedError.ts +17 -0
  310. package/src/errors/CookieMissingError.ts +10 -0
  311. package/src/errors/ModalDialogObstructsScreenshotError.ts +17 -0
  312. package/src/errors/index.ts +2 -0
  313. package/src/expectations/ElementExpectation.ts +131 -19
  314. package/src/expectations/index.ts +1 -1
  315. package/src/expectations/isActive.ts +19 -12
  316. package/src/expectations/isClickable.ts +17 -20
  317. package/src/expectations/isEnabled.ts +19 -9
  318. package/src/expectations/isSelected.ts +16 -11
  319. package/src/expectations/isVisible.ts +19 -9
  320. package/src/index.ts +0 -1
  321. package/src/screenplay/abilities/BrowseTheWeb.ts +101 -68
  322. package/src/screenplay/abilities/index.ts +0 -1
  323. package/src/screenplay/interactions/Clear.ts +75 -63
  324. package/src/screenplay/interactions/Click.ts +43 -54
  325. package/src/screenplay/interactions/DoubleClick.ts +66 -71
  326. package/src/screenplay/interactions/Enter.ts +41 -53
  327. package/src/screenplay/interactions/ExecuteScript.ts +207 -220
  328. package/src/screenplay/interactions/Hover.ts +42 -54
  329. package/src/screenplay/interactions/Navigate.ts +129 -156
  330. package/src/screenplay/interactions/PageElementInteraction.ts +14 -34
  331. package/src/screenplay/interactions/Press.ts +78 -70
  332. package/src/screenplay/interactions/RightClick.ts +61 -69
  333. package/src/screenplay/interactions/Scroll.ts +48 -71
  334. package/src/screenplay/interactions/Select.ts +226 -266
  335. package/src/screenplay/interactions/Switch.ts +123 -179
  336. package/src/screenplay/interactions/TakeScreenshot.ts +31 -57
  337. package/src/screenplay/interactions/index.ts +1 -3
  338. package/src/screenplay/models/BrowserCapabilities.ts +26 -0
  339. package/src/screenplay/models/BrowsingSession.ts +115 -0
  340. package/src/screenplay/models/Cookie.ts +53 -72
  341. package/src/screenplay/models/CookieData.ts +20 -58
  342. package/src/{input → screenplay/models}/Key.ts +12 -9
  343. package/src/screenplay/models/Locator.ts +54 -0
  344. package/src/screenplay/models/Page.ts +448 -50
  345. package/src/screenplay/models/PageElement.ts +97 -28
  346. package/src/screenplay/models/PageElements.ts +47 -39
  347. package/src/screenplay/models/RootLocator.ts +26 -0
  348. package/src/screenplay/models/SelectOption.ts +38 -0
  349. package/src/screenplay/models/Switchable.ts +24 -0
  350. package/src/screenplay/models/SwitchableOrigin.ts +18 -0
  351. package/src/screenplay/models/dialogs/AbsentModalDialog.ts +22 -0
  352. package/src/screenplay/models/dialogs/AcceptedModalDialog.ts +27 -0
  353. package/src/screenplay/models/dialogs/DismissedModalDialog.ts +27 -0
  354. package/src/screenplay/models/dialogs/ModalDialog.ts +200 -0
  355. package/src/screenplay/models/dialogs/ModalDialogHandler.ts +50 -0
  356. package/src/screenplay/models/dialogs/index.ts +5 -0
  357. package/src/screenplay/models/index.ts +9 -3
  358. package/src/screenplay/models/selectors/By.ts +46 -3
  359. package/src/screenplay/models/selectors/ByCss.ts +11 -1
  360. package/src/screenplay/models/selectors/ByCssContainingText.ts +11 -3
  361. package/src/screenplay/models/selectors/ByDeepCss.ts +15 -0
  362. package/src/screenplay/models/selectors/ById.ts +11 -1
  363. package/src/screenplay/models/selectors/ByTagName.ts +11 -1
  364. package/src/screenplay/models/selectors/ByXPath.ts +11 -1
  365. package/src/screenplay/models/selectors/Selector.ts +8 -8
  366. package/src/screenplay/models/selectors/index.ts +1 -0
  367. package/src/screenplay/questions/Attribute.ts +137 -76
  368. package/src/screenplay/questions/CssClasses.ts +135 -83
  369. package/src/screenplay/questions/LastScriptExecution.ts +47 -10
  370. package/src/screenplay/questions/Selected.ts +237 -191
  371. package/src/screenplay/questions/Text.ts +178 -105
  372. package/src/screenplay/questions/Value.ts +88 -48
  373. package/src/scripts/index.ts +1 -0
  374. package/src/scripts/isVisible.ts +113 -0
  375. package/src/stage/crew/photographer/Photographer.ts +98 -39
  376. package/src/stage/crew/photographer/strategies/PhotoTakingStrategy.ts +17 -36
  377. package/src/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.ts +7 -8
  378. package/src/stage/crew/photographer/strategies/TakePhotosOfFailures.ts +7 -7
  379. package/src/stage/crew/photographer/strategies/TakePhotosOfInteractions.ts +7 -8
  380. package/tsconfig.build.json +14 -0
  381. package/lib/expectations/isPresent.d.ts +0 -15
  382. package/lib/expectations/isPresent.js +0 -22
  383. package/lib/expectations/isPresent.js.map +0 -1
  384. package/lib/input/Key.js.map +0 -1
  385. package/lib/input/index.d.ts +0 -1
  386. package/lib/input/index.js.map +0 -1
  387. package/lib/screenplay/abilities/BrowserCapabilities.d.ts +0 -5
  388. package/lib/screenplay/abilities/BrowserCapabilities.js.map +0 -1
  389. package/lib/screenplay/interactions/EnterBuilder.d.ts +0 -25
  390. package/lib/screenplay/interactions/EnterBuilder.js.map +0 -1
  391. package/lib/screenplay/interactions/PressBuilder.d.ts +0 -26
  392. package/lib/screenplay/interactions/PressBuilder.js +0 -3
  393. package/lib/screenplay/interactions/PressBuilder.js.map +0 -1
  394. package/lib/screenplay/interactions/SelectBuilder.d.ts +0 -33
  395. package/lib/screenplay/interactions/SelectBuilder.js +0 -3
  396. package/lib/screenplay/interactions/SelectBuilder.js.map +0 -1
  397. package/lib/screenplay/interactions/Wait.d.ts +0 -143
  398. package/lib/screenplay/interactions/Wait.js +0 -242
  399. package/lib/screenplay/interactions/Wait.js.map +0 -1
  400. package/lib/screenplay/interactions/WaitBuilder.d.ts +0 -32
  401. package/lib/screenplay/interactions/WaitBuilder.js.map +0 -1
  402. package/lib/screenplay/models/ModalDialog.d.ts +0 -9
  403. package/lib/screenplay/models/ModalDialog.js +0 -14
  404. package/lib/screenplay/models/ModalDialog.js.map +0 -1
  405. package/lib/screenplay/models/NativeElementLocator.d.ts +0 -5
  406. package/lib/screenplay/models/NativeElementLocator.js +0 -3
  407. package/lib/screenplay/models/NativeElementLocator.js.map +0 -1
  408. package/lib/screenplay/models/PassThroughNativeElementLocator.d.ts +0 -9
  409. package/lib/screenplay/models/PassThroughNativeElementLocator.js +0 -17
  410. package/lib/screenplay/models/PassThroughNativeElementLocator.js.map +0 -1
  411. package/lib/screenplay/questions/ElementQuestion.d.ts +0 -33
  412. package/lib/screenplay/questions/ElementQuestion.js +0 -53
  413. package/lib/screenplay/questions/ElementQuestion.js.map +0 -1
  414. package/src/expectations/isPresent.ts +0 -21
  415. package/src/input/index.ts +0 -1
  416. package/src/screenplay/abilities/BrowserCapabilities.ts +0 -5
  417. package/src/screenplay/interactions/EnterBuilder.ts +0 -28
  418. package/src/screenplay/interactions/PressBuilder.ts +0 -29
  419. package/src/screenplay/interactions/SelectBuilder.ts +0 -36
  420. package/src/screenplay/interactions/Wait.ts +0 -264
  421. package/src/screenplay/interactions/WaitBuilder.ts +0 -34
  422. package/src/screenplay/models/ModalDialog.ts +0 -19
  423. package/src/screenplay/models/NativeElementLocator.ts +0 -6
  424. package/src/screenplay/models/PassThroughNativeElementLocator.ts +0 -18
  425. package/src/screenplay/questions/ElementQuestion.ts +0 -58
  426. package/tsconfig.eslint.json +0 -10
package/CHANGELOG.md CHANGED
@@ -3,6 +3,275 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.0.0-rc.31](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.30...v3.0.0-rc.31) (2022-10-07)
7
+
8
+
9
+ ### Features
10
+
11
+ * **web:** accept Answerable as argument of ExecuteScript.from(sourceUrl) ([0b06703](https://github.com/serenity-js/serenity-js/commit/0b06703cd832bf64dbb2636ef955ecba7b8b430c))
12
+
13
+
14
+
15
+
16
+
17
+ # [3.0.0-rc.30](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.29...v3.0.0-rc.30) (2022-10-05)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **web:** all web modules now correctly support handling iframe context for the current page ([bcb8672](https://github.com/serenity-js/serenity-js/commit/bcb86722dfcaa023613e63fb8bd2e14d6d546efd)), closes [#1310](https://github.com/serenity-js/serenity-js/issues/1310)
23
+ * **web:** corrected interaction to Clear to avoid issues with elements that have no value attribute ([37ae809](https://github.com/serenity-js/serenity-js/commit/37ae8092a36091db528024b99695905982ef8284)), closes [#1306](https://github.com/serenity-js/serenity-js/issues/1306)
24
+ * **web:** interaction to Clear now supports "contenteditable" elements ([d090458](https://github.com/serenity-js/serenity-js/commit/d090458845c23af59561d74421c16160ccc4ff64)), closes [#1306](https://github.com/serenity-js/serenity-js/issues/1306)
25
+
26
+
27
+ ### Features
28
+
29
+ * **web:** interaction to Clear works with "contenteditable" elements across all the web tools ([c53b00d](https://github.com/serenity-js/serenity-js/commit/c53b00dac512977c00e5eadc101e281997f8e0de)), closes [#1306](https://github.com/serenity-js/serenity-js/issues/1306)
30
+
31
+
32
+
33
+
34
+
35
+ # [3.0.0-rc.29](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.28...v3.0.0-rc.29) (2022-10-01)
36
+
37
+ **Note:** Version bump only for package @serenity-js/web
38
+
39
+
40
+
41
+
42
+
43
+ # [3.0.0-rc.28](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.27...v3.0.0-rc.28) (2022-09-30)
44
+
45
+
46
+ ### Bug Fixes
47
+
48
+ * **core:** activity is now able to detect invocation location on Node 14 ([41f4776](https://github.com/serenity-js/serenity-js/commit/41f4776736620bc32d474d9b66f69c742f8eca96)), closes [#1240](https://github.com/serenity-js/serenity-js/issues/1240)
49
+ * **playwright:** corrected not(isPresent()) for PlaywrightPageElement ([0693b2f](https://github.com/serenity-js/serenity-js/commit/0693b2f2666a8de327c990c72ecf42fc3d7da498)), closes [#1240](https://github.com/serenity-js/serenity-js/issues/1240)
50
+ * **web:** question about Text.of(element) now trims newline and space characters ([c68bbe9](https://github.com/serenity-js/serenity-js/commit/c68bbe9bed082c84538983dd6233e684190c3c43))
51
+
52
+
53
+ ### Features
54
+
55
+ * **playwright-test:** improved Playwright Test reports ([6c6b537](https://github.com/serenity-js/serenity-js/commit/6c6b5379dfc324a4fb75d758daa7782109f1c5ab)), closes [#1240](https://github.com/serenity-js/serenity-js/issues/1240)
56
+
57
+
58
+ ### Reverts
59
+
60
+ * **web:** reverted the change to Text that would make it automatically trim the retrieved text ([f5a47b7](https://github.com/serenity-js/serenity-js/commit/f5a47b7e9e0be26522522b5a6647b24ffad6bee8))
61
+
62
+
63
+
64
+
65
+
66
+ # [3.0.0-rc.27](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.26...v3.0.0-rc.27) (2022-08-26)
67
+
68
+ **Note:** Version bump only for package @serenity-js/web
69
+
70
+
71
+
72
+
73
+
74
+ # [3.0.0-rc.26](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.25...v3.0.0-rc.26) (2022-08-15)
75
+
76
+ **Note:** Version bump only for package @serenity-js/web
77
+
78
+
79
+
80
+
81
+
82
+ # [3.0.0-rc.25](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.24...v3.0.0-rc.25) (2022-08-15)
83
+
84
+
85
+ ### Bug Fixes
86
+
87
+ * **core:** extracted common TypeScript configuration ([0108370](https://github.com/serenity-js/serenity-js/commit/0108370a6a7ebb4bcd71773482801d29f5660268))
88
+ * **deps:** updated TinyTypes to 1.19.0 ([f6d53e4](https://github.com/serenity-js/serenity-js/commit/f6d53e4dbbfcb81139bd888ac11441b6344e47f5))
89
+ * **web:** simplified isClickable so that it doesn't include visibility check ([33ad47e](https://github.com/serenity-js/serenity-js/commit/33ad47e448e73a26f337371fcc6f5566845b4c93))
90
+
91
+
92
+
93
+
94
+
95
+ # [3.0.0-rc.24](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.23...v3.0.0-rc.24) (2022-07-23)
96
+
97
+
98
+ ### Bug Fixes
99
+
100
+ * **web:** simplified the implementation of isClickable and isEnabled ([142eb86](https://github.com/serenity-js/serenity-js/commit/142eb861d95e08df7717e9fffc57153a62c88f66)), closes [#1255](https://github.com/serenity-js/serenity-js/issues/1255)
101
+
102
+
103
+ ### Features
104
+
105
+ * **web:** PageElement-releated expectations now also check if the element is present ([de4610c](https://github.com/serenity-js/serenity-js/commit/de4610c3199f7130fd56d2d6799a328cbd7540a2)), closes [#1255](https://github.com/serenity-js/serenity-js/issues/1255)
106
+
107
+
108
+
109
+
110
+
111
+ # [3.0.0-rc.23](https://github.com/serenity-js/serenity-js/compare/v2.33.10...v3.0.0-rc.23) (2022-07-19)
112
+
113
+
114
+ ### Bug Fixes
115
+
116
+ * **node:** support for Node 18 ([73212bc](https://github.com/serenity-js/serenity-js/commit/73212bc9deb1998d871b0720a6b437687b3ceddc)), closes [#1243](https://github.com/serenity-js/serenity-js/issues/1243)
117
+
118
+
119
+
120
+ # [3.0.0-rc.22](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.21...v3.0.0-rc.22) (2022-07-15)
121
+
122
+
123
+
124
+ # [3.0.0-rc.21](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.20...v3.0.0-rc.21) (2022-07-11)
125
+
126
+
127
+
128
+ # [3.0.0-rc.20](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.19...v3.0.0-rc.20) (2022-07-11)
129
+
130
+
131
+ ### Bug Fixes
132
+
133
+ * **protractor:** isVisible check for ProtractorPageElement returns false for non-existent elements ([e64eee3](https://github.com/serenity-js/serenity-js/commit/e64eee377af32909f25e7c1d88f45a484abb1514)), closes [#1236](https://github.com/serenity-js/serenity-js/issues/1236)
134
+ * **web:** improved JavaScript dialog-related error handling when taking screenshots ([3cd1149](https://github.com/serenity-js/serenity-js/commit/3cd1149ed74df95da17f1054cd4da93b095a4eed)), closes [puppeteer/puppeteer#2481](https://github.com/puppeteer/puppeteer/issues/2481) [#1156](https://github.com/serenity-js/serenity-js/issues/1156)
135
+ * **web:** renamed PagesContext to BrowsingSession to make the name more descriptive ([6b4e998](https://github.com/serenity-js/serenity-js/commit/6b4e9984d80f8f349f367e59bd0e615cd01703ec)), closes [#1236](https://github.com/serenity-js/serenity-js/issues/1236)
136
+
137
+
138
+ ### Features
139
+
140
+ * **core:** interactions to Wait.for and Wait.until are now browser-independent ([d115142](https://github.com/serenity-js/serenity-js/commit/d1151427bed96c1ebd0d1dcc4159c6aeedc605de)), closes [#1035](https://github.com/serenity-js/serenity-js/issues/1035) [#1236](https://github.com/serenity-js/serenity-js/issues/1236)
141
+ * **playwright:** configurable navigation waitUntil timeout ([2458fcb](https://github.com/serenity-js/serenity-js/commit/2458fcb22c946da41ab59cb21ac0d4cc48012da7)), closes [#1236](https://github.com/serenity-js/serenity-js/issues/1236)
142
+ * **playwright:** initial support for Playwright ([87e88a1](https://github.com/serenity-js/serenity-js/commit/87e88a16cdc06477ed25eb83f9597fd370fdc109)), closes [#493](https://github.com/serenity-js/serenity-js/issues/493) [#563](https://github.com/serenity-js/serenity-js/issues/563) [#911](https://github.com/serenity-js/serenity-js/issues/911)
143
+ * **playwright:** interaction to Select option(s) from a <select /> dropdown ([009041d](https://github.com/serenity-js/serenity-js/commit/009041d83e22ddf3fef14670e0e5fd6d11cdfc73)), closes [#1236](https://github.com/serenity-js/serenity-js/issues/1236)
144
+ * **playwright:** support for isVisible, plus consistent visibility checks across the board ([2c5c929](https://github.com/serenity-js/serenity-js/commit/2c5c929802f894f9fe59438a01f08b1b7bec3318)), closes [#1236](https://github.com/serenity-js/serenity-js/issues/1236)
145
+ * **playwright:** support for working with frames ([89d4621](https://github.com/serenity-js/serenity-js/commit/89d46212073a342fe812a3ad2638a2ad0c39b620)), closes [#1236](https://github.com/serenity-js/serenity-js/issues/1236)
146
+ * **web:** introduced PagesContext and implemented PlaywrightPage ([0045a72](https://github.com/serenity-js/serenity-js/commit/0045a726d540871333f644928218aed00bcd372c)), closes [#1236](https://github.com/serenity-js/serenity-js/issues/1236)
147
+ * **web:** new portable APIs to handle ModalDialog windows ([c94d0ec](https://github.com/serenity-js/serenity-js/commit/c94d0ec43d2bc8aa39f8824f5d0f1e1cbcf137a1)), closes [#1236](https://github.com/serenity-js/serenity-js/issues/1236) [#805](https://github.com/serenity-js/serenity-js/issues/805) [#1156](https://github.com/serenity-js/serenity-js/issues/1156)
148
+ * **web:** standardised support for deep CSS selectors across the Web integration modules ([e9e3f28](https://github.com/serenity-js/serenity-js/commit/e9e3f281191fc5c891841b6c8aab41213da3b0f5)), closes [#1238](https://github.com/serenity-js/serenity-js/issues/1238)
149
+
150
+
151
+
152
+ # [3.0.0-rc.19](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.18...v3.0.0-rc.19) (2022-06-11)
153
+
154
+
155
+
156
+ # [3.0.0-rc.18](https://github.com/serenity-js/serenity-js/compare/v2.33.9...v3.0.0-rc.18) (2022-06-06)
157
+
158
+
159
+ ### Bug Fixes
160
+
161
+ * **deps:** updated tiny-types ([f1951cf](https://github.com/serenity-js/serenity-js/commit/f1951cf753df3807b5778d116f8e8bc3f24830a7))
162
+ * **deps:** updated tiny-types to 1.18.2 ([83a651c](https://github.com/serenity-js/serenity-js/commit/83a651c4c2f3f8dbaabcdacba94c720efdff45dd))
163
+
164
+
165
+
166
+ # [3.0.0-rc.17](https://github.com/serenity-js/serenity-js/compare/v2.33.8...v3.0.0-rc.17) (2022-06-02)
167
+
168
+
169
+
170
+ # [3.0.0-rc.16](https://github.com/serenity-js/serenity-js/compare/v2.33.6...v3.0.0-rc.16) (2022-04-15)
171
+
172
+
173
+
174
+ # [3.0.0-rc.15](https://github.com/serenity-js/serenity-js/compare/v2.33.5...v3.0.0-rc.15) (2022-04-10)
175
+
176
+
177
+ ### Bug Fixes
178
+
179
+ * **web:** corrected an inefficient regular expression in By selector description generator ([1b537d2](https://github.com/serenity-js/serenity-js/commit/1b537d2de02f89760237816fc726f5e11c2bee0c))
180
+ * **web:** replaced legacy PromiseLike return types with native Promise types ([436b3cb](https://github.com/serenity-js/serenity-js/commit/436b3cba1793f63008a56633cc93669736155ce6))
181
+
182
+
183
+
184
+ # [3.0.0-rc.14](https://github.com/serenity-js/serenity-js/compare/v2.33.3...v3.0.0-rc.14) (2022-03-28)
185
+
186
+
187
+ ### Bug Fixes
188
+
189
+ * **web:** auto-generated descriptions of nested PageElements are easier to read ([5a51d91](https://github.com/serenity-js/serenity-js/commit/5a51d91f0abb1c32814c219a44da51d52df77f87))
190
+ * **web:** corrected return types of question about Selected page elements ([b32f280](https://github.com/serenity-js/serenity-js/commit/b32f2809b018d6791a37fd80a226ca16a822b9b6))
191
+
192
+
193
+ ### Features
194
+
195
+ * **web:** Attribute.called(name).of(pageElement) returns a QuestionAdapter ([e220665](https://github.com/serenity-js/serenity-js/commit/e220665de37f15d4cfc8ad570bfa7b804d71335b))
196
+ * **web:** CssClasses.of(pageElement) returns a QuestionAdapter ([0942887](https://github.com/serenity-js/serenity-js/commit/0942887eb8e726dce3b8d64a7f9162ec782e61b7))
197
+ * **web:** Value.of(pageElement) returns a QuestionAdapter ([c45b483](https://github.com/serenity-js/serenity-js/commit/c45b483be071d297dc41e6b098a03f5697d53050))
198
+
199
+
200
+
201
+ # [3.0.0-rc.13](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.12...v3.0.0-rc.13) (2022-03-02)
202
+
203
+
204
+ ### Features
205
+
206
+ * **web:** combined Frame and PageElement so they can be Switch-ed to ([1b7ab7c](https://github.com/serenity-js/serenity-js/commit/1b7ab7c828034a14ba801cbfa97acc203fd55adf)), closes [#82](https://github.com/serenity-js/serenity-js/issues/82) [#227](https://github.com/serenity-js/serenity-js/issues/227) [#233](https://github.com/serenity-js/serenity-js/issues/233) [#365](https://github.com/serenity-js/serenity-js/issues/365)
207
+
208
+
209
+
210
+ # [3.0.0-rc.12](https://github.com/serenity-js/serenity-js/compare/v2.33.2...v3.0.0-rc.12) (2022-02-23)
211
+
212
+
213
+
214
+ # [3.0.0-rc.11](https://github.com/serenity-js/serenity-js/compare/v2.33.1...v3.0.0-rc.11) (2022-02-13)
215
+
216
+
217
+ ### Bug Fixes
218
+
219
+ * **web:** made the constructor of BrowseTheWeb protected, since it's an abstract class ([dbfbed0](https://github.com/serenity-js/serenity-js/commit/dbfbed02923bc1c589e588429c163ffbc7b13a34))
220
+
221
+
222
+ ### Features
223
+
224
+ * **web:** support for working with frames and an interaction to Switch.to(frameOrPage) ([ef73ef2](https://github.com/serenity-js/serenity-js/commit/ef73ef273f8a17e48d396d5ef03f6b761b136c9a)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
225
+
226
+
227
+
228
+ # [3.0.0-rc.10](https://github.com/serenity-js/serenity-js/compare/v2.33.0...v3.0.0-rc.10) (2022-02-03)
229
+
230
+
231
+
232
+ # [3.0.0-rc.9](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.8...v3.0.0-rc.9) (2022-02-01)
233
+
234
+
235
+
236
+ # [3.0.0-rc.8](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.7...v3.0.0-rc.8) (2022-01-28)
237
+
238
+
239
+
240
+ # [3.0.0-rc.7](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.6...v3.0.0-rc.7) (2022-01-28)
241
+
242
+
243
+ ### Features
244
+
245
+ * **assertions:** isPresent works with any Optional ([cea75dc](https://github.com/serenity-js/serenity-js/commit/cea75dc1c728e45e06a87aaf9c1573a237334285)), closes [#1103](https://github.com/serenity-js/serenity-js/issues/1103)
246
+ * **core:** `f` and `d` question description formatters ([c9f3fad](https://github.com/serenity-js/serenity-js/commit/c9f3fadd86ec0196f2cdbf76d9628bbef0a3fcba))
247
+ * **core:** replaced `Adapter` with `QuestionAdapter` and introduced `Optional` ([8d84ad3](https://github.com/serenity-js/serenity-js/commit/8d84ad3863e3c726533d0f21934fb1e2fa8b3022)), closes [#1103](https://github.com/serenity-js/serenity-js/issues/1103)
248
+ * **core:** support for Optional chaining, expectation isPresent, refactored Expectations ([1841ee5](https://github.com/serenity-js/serenity-js/commit/1841ee5fc48cfa403ddc53358f75764d9a010c21)), closes [#1099](https://github.com/serenity-js/serenity-js/issues/1099) [#1099](https://github.com/serenity-js/serenity-js/issues/1099) [#1103](https://github.com/serenity-js/serenity-js/issues/1103)
249
+
250
+
251
+
252
+ # [3.0.0-rc.6](https://github.com/serenity-js/serenity-js/compare/v2.32.7...v3.0.0-rc.6) (2022-01-10)
253
+
254
+
255
+
256
+ # [3.0.0-rc.5](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.4...v3.0.0-rc.5) (2022-01-07)
257
+
258
+
259
+ ### Features
260
+
261
+ * **web:** support for advanced PageElement locator patterns ([c1ff8b7](https://github.com/serenity-js/serenity-js/commit/c1ff8b7539ebc1da8f79ea2b6d17bb01c42f443d)), closes [#1084](https://github.com/serenity-js/serenity-js/issues/1084)
262
+
263
+
264
+
265
+ # [3.0.0-rc.4](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.3...v3.0.0-rc.4) (2021-12-30)
266
+
267
+
268
+ ### Features
269
+
270
+ * **web:** ElementExpectation makes it easier to define custom PageElement-related Expectations ([92ebf7d](https://github.com/serenity-js/serenity-js/commit/92ebf7db720d0fe88ddbe17b9958fa993b1fd02e))
271
+ * **web:** Text.ofAll accepts mapped PageElements ([5314246](https://github.com/serenity-js/serenity-js/commit/5314246305fa3f62446d5ec718f36354152be68d))
272
+
273
+
274
+
6
275
  # [3.0.0-rc.3](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.2...v3.0.0-rc.3) (2021-12-29)
7
276
 
8
277
 
@@ -25,22 +294,12 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
25
294
 
26
295
 
27
296
 
28
-
29
-
30
297
  # [3.0.0-rc.2](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.1...v3.0.0-rc.2) (2021-12-09)
31
298
 
32
- **Note:** Version bump only for package @serenity-js/web
33
-
34
-
35
-
36
299
 
37
300
 
38
301
  # [3.0.0-rc.1](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.0...v3.0.0-rc.1) (2021-12-09)
39
302
 
40
- **Note:** Version bump only for package @serenity-js/web
41
-
42
-
43
-
44
303
 
45
304
 
46
305
  # [3.0.0-rc.0](https://github.com/serenity-js/serenity-js/compare/v2.32.5...v3.0.0-rc.0) (2021-12-08)
package/README.md CHANGED
@@ -8,7 +8,7 @@ and [API docs](https://serenity-js.org/modules/), and follow [@SerenityJS](https
8
8
 
9
9
  ### Learning Serenity/JS
10
10
 
11
- To learn more about Serenity/JS, check out the video below, read the [tutorial](https://serenity-js.org/handbook/thinking-in-serenity-js/index.html), review the [examples](https://github.com/serenity-js/serenity-js/tree/master/examples), and create your own test suite with [Serenity/JS template projects](https://github.com/serenity-js).
11
+ To learn more about Serenity/JS, check out the video below, read the [tutorial](https://serenity-js.org/handbook/thinking-in-serenity-js/index.html), review the [examples](https://github.com/serenity-js/serenity-js/tree/main/examples), and create your own test suite with [Serenity/JS template projects](https://github.com/serenity-js).
12
12
 
13
13
  If you have any questions, join us on [Serenity/JS Community Chat](https://gitter.im/serenity-js/Lobby).
14
14
 
@@ -0,0 +1,15 @@
1
+ import { LogicError } from '@serenity-js/core';
2
+ /**
3
+ * Thrown when you're trying to take a screenshot of a browser window
4
+ * that's already been closed.
5
+ *
6
+ * ## Learn more
7
+ * - {@apilink TakeScreenshot}
8
+ * - {@apilink Page.takeScreenshot}
9
+ *
10
+ * @group Errors
11
+ */
12
+ export declare class BrowserWindowClosedError extends LogicError {
13
+ constructor(message: string, cause?: Error);
14
+ }
15
+ //# sourceMappingURL=BrowserWindowClosedError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserWindowClosedError.d.ts","sourceRoot":"","sources":["../../src/errors/BrowserWindowClosedError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;;;;;;GASG;AACH,qBAAa,wBAAyB,SAAQ,UAAU;gBACxC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAG7C"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BrowserWindowClosedError = void 0;
4
+ const core_1 = require("@serenity-js/core");
5
+ /**
6
+ * Thrown when you're trying to take a screenshot of a browser window
7
+ * that's already been closed.
8
+ *
9
+ * ## Learn more
10
+ * - {@apilink TakeScreenshot}
11
+ * - {@apilink Page.takeScreenshot}
12
+ *
13
+ * @group Errors
14
+ */
15
+ class BrowserWindowClosedError extends core_1.LogicError {
16
+ constructor(message, cause) {
17
+ super(message, cause);
18
+ }
19
+ }
20
+ exports.BrowserWindowClosedError = BrowserWindowClosedError;
21
+ //# sourceMappingURL=BrowserWindowClosedError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserWindowClosedError.js","sourceRoot":"","sources":["../../src/errors/BrowserWindowClosedError.ts"],"names":[],"mappings":";;;AAAA,4CAA+C;AAE/C;;;;;;;;;GASG;AACH,MAAa,wBAAyB,SAAQ,iBAAU;IACpD,YAAY,OAAe,EAAE,KAAa;QACtC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC;CACJ;AAJD,4DAIC"}
@@ -1,4 +1,15 @@
1
1
  import { RuntimeError } from '@serenity-js/core';
2
+ /**
3
+ * Thrown when the [cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies)
4
+ * you're trying to retrieve has not been set yet.
5
+ *
6
+ * ## Learn more
7
+ * - {@apilink Cookie}
8
+ * - {@apilink RuntimeError}
9
+ *
10
+ * @group Errors
11
+ */
2
12
  export declare class CookieMissingError extends RuntimeError {
3
13
  constructor(message: string, cause?: Error);
4
14
  }
15
+ //# sourceMappingURL=CookieMissingError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieMissingError.d.ts","sourceRoot":"","sources":["../../src/errors/CookieMissingError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;gBACpC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAG7C"}
@@ -2,6 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CookieMissingError = void 0;
4
4
  const core_1 = require("@serenity-js/core");
5
+ /**
6
+ * Thrown when the [cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies)
7
+ * you're trying to retrieve has not been set yet.
8
+ *
9
+ * ## Learn more
10
+ * - {@apilink Cookie}
11
+ * - {@apilink RuntimeError}
12
+ *
13
+ * @group Errors
14
+ */
5
15
  class CookieMissingError extends core_1.RuntimeError {
6
16
  constructor(message, cause) {
7
17
  super(CookieMissingError, message, cause);
@@ -1 +1 @@
1
- {"version":3,"file":"CookieMissingError.js","sourceRoot":"","sources":["../../src/errors/CookieMissingError.ts"],"names":[],"mappings":";;;AAAA,4CAAiD;AAEjD,MAAa,kBAAmB,SAAQ,mBAAY;IAChD,YAAY,OAAe,EAAE,KAAa;QACtC,KAAK,CAAC,kBAAkB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;CACJ;AAJD,gDAIC"}
1
+ {"version":3,"file":"CookieMissingError.js","sourceRoot":"","sources":["../../src/errors/CookieMissingError.ts"],"names":[],"mappings":";;;AAAA,4CAAiD;AAEjD;;;;;;;;;GASG;AACH,MAAa,kBAAmB,SAAQ,mBAAY;IAChD,YAAY,OAAe,EAAE,KAAa;QACtC,KAAK,CAAC,kBAAkB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;CACJ;AAJD,gDAIC"}
@@ -0,0 +1,15 @@
1
+ import { LogicError } from '@serenity-js/core';
2
+ /**
3
+ * Thrown when the presence of a JavaScript dialog obstructs taking a screenshot.
4
+ *
5
+ * ## Learn more
6
+ * - {@apilink Photographer}
7
+ * - {@apilink LogicError}
8
+ * - {@apilink TakeScreenshot}
9
+ *
10
+ * @group Errors
11
+ */
12
+ export declare class ModalDialogObstructsScreenshotError extends LogicError {
13
+ constructor(message: string, cause?: Error);
14
+ }
15
+ //# sourceMappingURL=ModalDialogObstructsScreenshotError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalDialogObstructsScreenshotError.d.ts","sourceRoot":"","sources":["../../src/errors/ModalDialogObstructsScreenshotError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;;;;;;GASG;AACH,qBAAa,mCAAoC,SAAQ,UAAU;gBACnD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAG7C"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModalDialogObstructsScreenshotError = void 0;
4
+ const core_1 = require("@serenity-js/core");
5
+ /**
6
+ * Thrown when the presence of a JavaScript dialog obstructs taking a screenshot.
7
+ *
8
+ * ## Learn more
9
+ * - {@apilink Photographer}
10
+ * - {@apilink LogicError}
11
+ * - {@apilink TakeScreenshot}
12
+ *
13
+ * @group Errors
14
+ */
15
+ class ModalDialogObstructsScreenshotError extends core_1.LogicError {
16
+ constructor(message, cause) {
17
+ super(message, cause);
18
+ }
19
+ }
20
+ exports.ModalDialogObstructsScreenshotError = ModalDialogObstructsScreenshotError;
21
+ //# sourceMappingURL=ModalDialogObstructsScreenshotError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalDialogObstructsScreenshotError.js","sourceRoot":"","sources":["../../src/errors/ModalDialogObstructsScreenshotError.ts"],"names":[],"mappings":";;;AAAA,4CAA+C;AAE/C;;;;;;;;;GASG;AACH,MAAa,mCAAoC,SAAQ,iBAAU;IAC/D,YAAY,OAAe,EAAE,KAAa;QACtC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC;CACJ;AAJD,kFAIC"}
@@ -1 +1,4 @@
1
+ export * from './BrowserWindowClosedError';
1
2
  export * from './CookieMissingError';
3
+ export * from './ModalDialogObstructsScreenshotError';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uCAAuC,CAAC"}
@@ -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];
@@ -10,5 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
15
  };
12
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./BrowserWindowClosedError"), exports);
13
18
  __exportStar(require("./CookieMissingError"), exports);
19
+ __exportStar(require("./ModalDialogObstructsScreenshotError"), exports);
14
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,uDAAqC;AACrC,wEAAsD"}
@@ -1,11 +1,124 @@
1
- import { AnswersQuestions, Expectation, ExpectationOutcome } from '@serenity-js/core';
1
+ import { Expectation } from '@serenity-js/core';
2
2
  import { PageElement } from '../screenplay';
3
3
  /**
4
- * @access private
4
+ * A factory method to that makes defining custom {@apilink PageElement}-related {@apilink Expectation|expectations} easier
5
+ *
6
+ * ## Defining a custom expectation
7
+ *
8
+ * ```ts
9
+ * import { Expectation } from '@serenity-js/core'
10
+ * import { ElementExpectation, PageElement } from '@serenity-js/web'
11
+ *
12
+ * export function isEmpty(): Expectation<boolean, PageElement> {
13
+ * return ElementExpectation.forElementTo('have an empty value', async actual => {
14
+ * const value = await actual.value();
15
+ * return value.length === 0;
16
+ * })
17
+ * }
18
+ * ```
19
+ *
20
+ * ## Using an expectation in an assertion
21
+ *
22
+ * ```ts
23
+ * import { Ensure } from '@serenity-js/assertions'
24
+ * import { actorCalled } from '@serenity-js/core'
25
+ * import { By, Clear, PageElement } from '@serenity-js/web'
26
+ *
27
+ * const nameField = () =>
28
+ * PageElement.located(By.css('[data-test-id="name"]')).describedAs('name field');
29
+ *
30
+ * await actorCalled('Izzy').attemptsTo(
31
+ * Clear.the(nameField()),
32
+ * Ensure.that(nameField(), isEmpty())
33
+ * )
34
+ * ```
35
+ *
36
+ * ## Using an expectation in a control flow statement
37
+ *
38
+ * ```ts
39
+ * import { not } from '@serenity-js/assertions'
40
+ * import { actorCalled, Check, Duration, Wait } from '@serenity-js/core'
41
+ * import { By, PageElement } from '@serenity-js/web'
42
+ *
43
+ * const nameField = () =>
44
+ * PageElement.located(By.css('[data-test-id="name"]')).describedAs('name field');
45
+ *
46
+ * await actorCalled('Izzy').attemptsTo(
47
+ * Check.whether(nameField(), isEmpty())
48
+ * .andIfSo(
49
+ * Enter.theValue(actorInTheSpotlight().name).into(nameField()),
50
+ * ),
51
+ * )
52
+ * ```
53
+ *
54
+ * ## Using an expectation in a synchronisation statement
55
+ *
56
+ * ```ts
57
+ * import { not } from '@serenity-js/assertions'
58
+ * import { actorCalled, Duration, Wait } from '@serenity-js/core'
59
+ * import { By, PageElement } from '@serenity-js/web'
60
+ *
61
+ * const nameField = () =>
62
+ * PageElement.located(By.css('[data-test-id="name"]')).describedAs('name field');
63
+ *
64
+ * await actorCalled('Izzy').attemptsTo(
65
+ * Enter.theValue(actorInTheSpotlight().name).into(nameField()),
66
+ *
67
+ * Wait.upTo(Duration.ofSeconds(2))
68
+ * .until(nameField(), not(isEmpty())),
69
+ * )
70
+ * ```
71
+ *
72
+ * ## Learn more
73
+ * - {@apilink Expectation}
74
+ * - {@apilink Ensure}
75
+ * - {@apilink Check}
76
+ * - {@apilink Wait}
77
+ *
78
+ * @group Expectations
5
79
  */
6
- export declare class ElementExpectation extends Expectation<any, PageElement> {
80
+ export declare class ElementExpectation extends Expectation<PageElement> {
7
81
  private readonly fn;
8
- static forElementTo(message: string, fn: (actual: PageElement) => Promise<boolean>): Expectation<any, PageElement>;
9
- constructor(subject: string, fn: (actual: PageElement) => Promise<boolean>);
10
- answeredBy(actor: AnswersQuestions): (actual: PageElement) => Promise<ExpectationOutcome<boolean, PageElement>>;
82
+ /**
83
+ * Instantiates a custom {@apilink PageElement}-specific {@apilink Expectation}
84
+ *
85
+ * #### Defining a custom expectation
86
+ * ```ts
87
+ * import { Expectation } from '@serenity-js/core'
88
+ * import { ElementExpectation, PageElement } from '@serenity-js/web'
89
+ *
90
+ * export function isEmpty(): Expectation<boolean, PageElement> {
91
+ * return ElementExpectation.forElementTo('have an empty value', async actual => {
92
+ * const value = await actual.value();
93
+ * return value.length === 0;
94
+ * })
95
+ * }
96
+ * ```
97
+ *
98
+ * @param description
99
+ * A description of the expectation.
100
+ *
101
+ * Please note that Serenity/JS will use it to describe your expectation in sentences like these:
102
+ * - `actor ensures that <something> does <description>`
103
+ * - `actor ensures that <something> does not <description>`
104
+ * - `actor waits until <something> does <description>`
105
+ * - `actor waits until <something> does not <description>`
106
+ *
107
+ * To work with the above templates, the description should be similar to
108
+ * - `become present`,
109
+ * - `become active`,
110
+ * - `equal X`,
111
+ * - `have value greater than Y`,
112
+ * - `have an empty value`
113
+ *
114
+ * **DO NOT** use descriptions like "is present", "is active", "equals X", "is greater than Y"
115
+ * as they won't read well in your test reports.
116
+ *
117
+ * @param fn
118
+ * An asynchronous callback function that receives a {@apilink PageElement} and returns a {@apilink Promise}
119
+ * that should resolve to `true` when the expectation is met, or `false` otherwise.
120
+ */
121
+ static forElementTo(description: string, fn: (actual: PageElement) => Promise<boolean>): Expectation<PageElement>;
122
+ constructor(description: string, fn: (actual: PageElement) => Promise<boolean>);
11
123
  }
124
+ //# sourceMappingURL=ElementExpectation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElementExpectation.d.ts","sourceRoot":"","sources":["../../src/expectations/ElementExpectation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,WAAW,EAAqC,MAAM,mBAAmB,CAAC;AAEjH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EG;AACH,qBAAa,kBAAmB,SAAQ,WAAW,CAAC,WAAW,CAAC;IA+CxD,OAAO,CAAC,QAAQ,CAAC,EAAE;IA7CvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC;gBAK7G,WAAW,EAAE,MAAM,EACF,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC;CAerE"}