@serenity-js/protractor 2.32.2 → 3.0.0-rc.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 (333) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/lib/index.d.ts +0 -2
  3. package/lib/index.js +0 -2
  4. package/lib/index.js.map +1 -1
  5. package/lib/screenplay/abilities/{BrowseTheWeb.d.ts → BrowseTheWebWithProtractor.d.ts} +52 -160
  6. package/lib/screenplay/abilities/{BrowseTheWeb.js → BrowseTheWebWithProtractor.js} +169 -218
  7. package/lib/screenplay/abilities/BrowseTheWebWithProtractor.js.map +1 -0
  8. package/lib/screenplay/abilities/index.d.ts +1 -1
  9. package/lib/screenplay/abilities/index.js +1 -1
  10. package/lib/screenplay/abilities/index.js.map +1 -1
  11. package/lib/screenplay/index.d.ts +1 -0
  12. package/lib/screenplay/index.js +1 -0
  13. package/lib/screenplay/index.js.map +1 -1
  14. package/lib/screenplay/interactions/UseAngular.js +2 -2
  15. package/lib/screenplay/interactions/UseAngular.js.map +1 -1
  16. package/lib/screenplay/interactions/index.d.ts +0 -19
  17. package/lib/screenplay/interactions/index.js +0 -19
  18. package/lib/screenplay/interactions/index.js.map +1 -1
  19. package/lib/screenplay/models/ProtractorCookie.d.ts +11 -0
  20. package/lib/screenplay/models/ProtractorCookie.js +39 -0
  21. package/lib/screenplay/models/ProtractorCookie.js.map +1 -0
  22. package/lib/screenplay/models/ProtractorModalDialog.d.ts +11 -0
  23. package/lib/screenplay/models/ProtractorModalDialog.js +43 -0
  24. package/lib/screenplay/models/ProtractorModalDialog.js.map +1 -0
  25. package/lib/screenplay/models/ProtractorNativeElementRoot.d.ts +5 -0
  26. package/lib/screenplay/{interactions/EnterBuilder.js → models/ProtractorNativeElementRoot.js} +1 -1
  27. package/lib/screenplay/models/ProtractorNativeElementRoot.js.map +1 -0
  28. package/lib/screenplay/models/ProtractorPage.d.ts +24 -0
  29. package/lib/screenplay/models/ProtractorPage.js +92 -0
  30. package/lib/screenplay/models/ProtractorPage.js.map +1 -0
  31. package/lib/screenplay/models/ProtractorPageElement.d.ts +23 -0
  32. package/lib/screenplay/models/ProtractorPageElement.js +112 -0
  33. package/lib/screenplay/models/ProtractorPageElement.js.map +1 -0
  34. package/lib/screenplay/models/ProtractorPageElements.d.ts +16 -0
  35. package/lib/screenplay/models/ProtractorPageElements.js +62 -0
  36. package/lib/screenplay/models/ProtractorPageElements.js.map +1 -0
  37. package/lib/screenplay/models/index.d.ts +6 -0
  38. package/lib/{expectations → screenplay/models}/index.js +6 -6
  39. package/lib/screenplay/models/index.js.map +1 -0
  40. package/lib/{promiseOf.d.ts → screenplay/promised.d.ts} +1 -1
  41. package/lib/{promiseOf.js → screenplay/promised.js} +4 -4
  42. package/lib/screenplay/promised.js.map +1 -0
  43. package/lib/screenplay/promisedWebElement.d.ts +11 -0
  44. package/lib/screenplay/promisedWebElement.js +27 -0
  45. package/lib/screenplay/promisedWebElement.js.map +1 -0
  46. package/lib/screenplay/questions/ProtractorParam.d.ts +24 -29
  47. package/lib/screenplay/questions/ProtractorParam.js +26 -33
  48. package/lib/screenplay/questions/ProtractorParam.js.map +1 -1
  49. package/lib/screenplay/questions/index.d.ts +0 -13
  50. package/lib/screenplay/questions/index.js +0 -16
  51. package/lib/screenplay/questions/index.js.map +1 -1
  52. package/package.json +20 -22
  53. package/src/index.ts +0 -2
  54. package/src/screenplay/abilities/{BrowseTheWeb.ts → BrowseTheWebWithProtractor.ts} +216 -241
  55. package/src/screenplay/abilities/index.ts +1 -1
  56. package/src/screenplay/index.ts +1 -0
  57. package/src/screenplay/interactions/UseAngular.ts +3 -3
  58. package/src/screenplay/interactions/index.ts +0 -19
  59. package/src/screenplay/models/ProtractorCookie.ts +41 -0
  60. package/src/screenplay/models/ProtractorModalDialog.ts +49 -0
  61. package/src/screenplay/models/ProtractorNativeElementRoot.ts +6 -0
  62. package/src/screenplay/models/ProtractorPage.ts +116 -0
  63. package/src/screenplay/models/ProtractorPageElement.ts +167 -0
  64. package/src/screenplay/models/ProtractorPageElements.ts +86 -0
  65. package/src/screenplay/models/index.ts +7 -0
  66. package/src/{promiseOf.ts → screenplay/promised.ts} +1 -1
  67. package/src/screenplay/promisedWebElement.ts +28 -0
  68. package/src/screenplay/questions/ProtractorParam.ts +29 -38
  69. package/src/screenplay/questions/index.ts +0 -13
  70. package/lib/expectations/ElementFinderExpectation.d.ts +0 -11
  71. package/lib/expectations/ElementFinderExpectation.js +0 -24
  72. package/lib/expectations/ElementFinderExpectation.js.map +0 -1
  73. package/lib/expectations/index.d.ts +0 -6
  74. package/lib/expectations/index.js.map +0 -1
  75. package/lib/expectations/isActive.d.ts +0 -13
  76. package/lib/expectations/isActive.js +0 -19
  77. package/lib/expectations/isActive.js.map +0 -1
  78. package/lib/expectations/isClickable.d.ts +0 -13
  79. package/lib/expectations/isClickable.js +0 -22
  80. package/lib/expectations/isClickable.js.map +0 -1
  81. package/lib/expectations/isEnabled.d.ts +0 -13
  82. package/lib/expectations/isEnabled.js +0 -19
  83. package/lib/expectations/isEnabled.js.map +0 -1
  84. package/lib/expectations/isPresent.d.ts +0 -14
  85. package/lib/expectations/isPresent.js +0 -20
  86. package/lib/expectations/isPresent.js.map +0 -1
  87. package/lib/expectations/isSelected.d.ts +0 -13
  88. package/lib/expectations/isSelected.js +0 -22
  89. package/lib/expectations/isSelected.js.map +0 -1
  90. package/lib/expectations/isVisible.d.ts +0 -13
  91. package/lib/expectations/isVisible.js +0 -25
  92. package/lib/expectations/isVisible.js.map +0 -1
  93. package/lib/promiseOf.js.map +0 -1
  94. package/lib/screenplay/abilities/BrowseTheWeb.js.map +0 -1
  95. package/lib/screenplay/interactions/Accept.d.ts +0 -81
  96. package/lib/screenplay/interactions/Accept.js +0 -95
  97. package/lib/screenplay/interactions/Accept.js.map +0 -1
  98. package/lib/screenplay/interactions/Clear.d.ts +0 -88
  99. package/lib/screenplay/interactions/Clear.js +0 -121
  100. package/lib/screenplay/interactions/Clear.js.map +0 -1
  101. package/lib/screenplay/interactions/Click.d.ts +0 -81
  102. package/lib/screenplay/interactions/Click.js +0 -95
  103. package/lib/screenplay/interactions/Click.js.map +0 -1
  104. package/lib/screenplay/interactions/Close.d.ts +0 -89
  105. package/lib/screenplay/interactions/Close.js +0 -169
  106. package/lib/screenplay/interactions/Close.js.map +0 -1
  107. package/lib/screenplay/interactions/DeleteCookies.d.ts +0 -72
  108. package/lib/screenplay/interactions/DeleteCookies.js +0 -149
  109. package/lib/screenplay/interactions/DeleteCookies.js.map +0 -1
  110. package/lib/screenplay/interactions/Dismiss.d.ts +0 -85
  111. package/lib/screenplay/interactions/Dismiss.js +0 -99
  112. package/lib/screenplay/interactions/Dismiss.js.map +0 -1
  113. package/lib/screenplay/interactions/DoubleClick.d.ts +0 -99
  114. package/lib/screenplay/interactions/DoubleClick.js +0 -121
  115. package/lib/screenplay/interactions/DoubleClick.js.map +0 -1
  116. package/lib/screenplay/interactions/Enter.d.ts +0 -81
  117. package/lib/screenplay/interactions/Enter.js +0 -96
  118. package/lib/screenplay/interactions/Enter.js.map +0 -1
  119. package/lib/screenplay/interactions/EnterBuilder.d.ts +0 -27
  120. package/lib/screenplay/interactions/EnterBuilder.js.map +0 -1
  121. package/lib/screenplay/interactions/ExecuteScript.d.ts +0 -171
  122. package/lib/screenplay/interactions/ExecuteScript.js +0 -291
  123. package/lib/screenplay/interactions/ExecuteScript.js.map +0 -1
  124. package/lib/screenplay/interactions/Hover.d.ts +0 -86
  125. package/lib/screenplay/interactions/Hover.js +0 -103
  126. package/lib/screenplay/interactions/Hover.js.map +0 -1
  127. package/lib/screenplay/interactions/Navigate.d.ts +0 -149
  128. package/lib/screenplay/interactions/Navigate.js +0 -345
  129. package/lib/screenplay/interactions/Navigate.js.map +0 -1
  130. package/lib/screenplay/interactions/Press.d.ts +0 -90
  131. package/lib/screenplay/interactions/Press.js +0 -127
  132. package/lib/screenplay/interactions/Press.js.map +0 -1
  133. package/lib/screenplay/interactions/PressBuilder.d.ts +0 -27
  134. package/lib/screenplay/interactions/PressBuilder.js +0 -3
  135. package/lib/screenplay/interactions/PressBuilder.js.map +0 -1
  136. package/lib/screenplay/interactions/ResizeBrowserWindow.d.ts +0 -69
  137. package/lib/screenplay/interactions/ResizeBrowserWindow.js +0 -144
  138. package/lib/screenplay/interactions/ResizeBrowserWindow.js.map +0 -1
  139. package/lib/screenplay/interactions/RightClick.d.ts +0 -97
  140. package/lib/screenplay/interactions/RightClick.js +0 -113
  141. package/lib/screenplay/interactions/RightClick.js.map +0 -1
  142. package/lib/screenplay/interactions/Scroll.d.ts +0 -83
  143. package/lib/screenplay/interactions/Scroll.js +0 -98
  144. package/lib/screenplay/interactions/Scroll.js.map +0 -1
  145. package/lib/screenplay/interactions/Select.d.ts +0 -212
  146. package/lib/screenplay/interactions/Select.js +0 -342
  147. package/lib/screenplay/interactions/Select.js.map +0 -1
  148. package/lib/screenplay/interactions/SelectBuilder.d.ts +0 -33
  149. package/lib/screenplay/interactions/SelectBuilder.js +0 -3
  150. package/lib/screenplay/interactions/SelectBuilder.js.map +0 -1
  151. package/lib/screenplay/interactions/Switch.d.ts +0 -210
  152. package/lib/screenplay/interactions/Switch.js +0 -345
  153. package/lib/screenplay/interactions/Switch.js.map +0 -1
  154. package/lib/screenplay/interactions/TakeScreenshot.d.ts +0 -67
  155. package/lib/screenplay/interactions/TakeScreenshot.js +0 -86
  156. package/lib/screenplay/interactions/TakeScreenshot.js.map +0 -1
  157. package/lib/screenplay/interactions/Wait.d.ts +0 -147
  158. package/lib/screenplay/interactions/Wait.js +0 -247
  159. package/lib/screenplay/interactions/Wait.js.map +0 -1
  160. package/lib/screenplay/interactions/WaitBuilder.d.ts +0 -33
  161. package/lib/screenplay/interactions/WaitBuilder.js +0 -3
  162. package/lib/screenplay/interactions/WaitBuilder.js.map +0 -1
  163. package/lib/screenplay/questions/Attribute.d.ts +0 -29
  164. package/lib/screenplay/questions/Attribute.js +0 -56
  165. package/lib/screenplay/questions/Attribute.js.map +0 -1
  166. package/lib/screenplay/questions/Browser.d.ts +0 -47
  167. package/lib/screenplay/questions/Browser.js +0 -55
  168. package/lib/screenplay/questions/Browser.js.map +0 -1
  169. package/lib/screenplay/questions/CSSClasses.d.ts +0 -94
  170. package/lib/screenplay/questions/CSSClasses.js +0 -118
  171. package/lib/screenplay/questions/CSSClasses.js.map +0 -1
  172. package/lib/screenplay/questions/Cookie.d.ts +0 -9
  173. package/lib/screenplay/questions/Cookie.js +0 -65
  174. package/lib/screenplay/questions/Cookie.js.map +0 -1
  175. package/lib/screenplay/questions/LastScriptExecution.d.ts +0 -14
  176. package/lib/screenplay/questions/LastScriptExecution.js +0 -22
  177. package/lib/screenplay/questions/LastScriptExecution.js.map +0 -1
  178. package/lib/screenplay/questions/ModalDialog.d.ts +0 -120
  179. package/lib/screenplay/questions/ModalDialog.js +0 -142
  180. package/lib/screenplay/questions/ModalDialog.js.map +0 -1
  181. package/lib/screenplay/questions/Pick.d.ts +0 -72
  182. package/lib/screenplay/questions/Pick.js +0 -254
  183. package/lib/screenplay/questions/Pick.js.map +0 -1
  184. package/lib/screenplay/questions/Selected.d.ts +0 -185
  185. package/lib/screenplay/questions/Selected.js +0 -254
  186. package/lib/screenplay/questions/Selected.js.map +0 -1
  187. package/lib/screenplay/questions/Value.d.ts +0 -47
  188. package/lib/screenplay/questions/Value.js +0 -67
  189. package/lib/screenplay/questions/Value.js.map +0 -1
  190. package/lib/screenplay/questions/Website.d.ts +0 -15
  191. package/lib/screenplay/questions/Website.js +0 -25
  192. package/lib/screenplay/questions/Website.js.map +0 -1
  193. package/lib/screenplay/questions/Window.d.ts +0 -23
  194. package/lib/screenplay/questions/Window.js +0 -28
  195. package/lib/screenplay/questions/Window.js.map +0 -1
  196. package/lib/screenplay/questions/lists/ElementArrayFinderListAdapter.d.ts +0 -89
  197. package/lib/screenplay/questions/lists/ElementArrayFinderListAdapter.js +0 -138
  198. package/lib/screenplay/questions/lists/ElementArrayFinderListAdapter.js.map +0 -1
  199. package/lib/screenplay/questions/lists/index.d.ts +0 -1
  200. package/lib/screenplay/questions/lists/index.js +0 -14
  201. package/lib/screenplay/questions/lists/index.js.map +0 -1
  202. package/lib/screenplay/questions/targets/Target.d.ts +0 -168
  203. package/lib/screenplay/questions/targets/Target.js +0 -190
  204. package/lib/screenplay/questions/targets/Target.js.map +0 -1
  205. package/lib/screenplay/questions/targets/TargetElement.d.ts +0 -50
  206. package/lib/screenplay/questions/targets/TargetElement.js +0 -62
  207. package/lib/screenplay/questions/targets/TargetElement.js.map +0 -1
  208. package/lib/screenplay/questions/targets/TargetElements.d.ts +0 -102
  209. package/lib/screenplay/questions/targets/TargetElements.js +0 -124
  210. package/lib/screenplay/questions/targets/TargetElements.js.map +0 -1
  211. package/lib/screenplay/questions/targets/TargetNestedElement.d.ts +0 -49
  212. package/lib/screenplay/questions/targets/TargetNestedElement.js +0 -61
  213. package/lib/screenplay/questions/targets/TargetNestedElement.js.map +0 -1
  214. package/lib/screenplay/questions/targets/TargetNestedElements.d.ts +0 -101
  215. package/lib/screenplay/questions/targets/TargetNestedElements.js +0 -123
  216. package/lib/screenplay/questions/targets/TargetNestedElements.js.map +0 -1
  217. package/lib/screenplay/questions/targets/builders.d.ts +0 -8
  218. package/lib/screenplay/questions/targets/builders.js +0 -3
  219. package/lib/screenplay/questions/targets/builders.js.map +0 -1
  220. package/lib/screenplay/questions/targets/index.d.ts +0 -5
  221. package/lib/screenplay/questions/targets/index.js +0 -18
  222. package/lib/screenplay/questions/targets/index.js.map +0 -1
  223. package/lib/screenplay/questions/targets/override.d.ts +0 -7
  224. package/lib/screenplay/questions/targets/override.js +0 -21
  225. package/lib/screenplay/questions/targets/override.js.map +0 -1
  226. package/lib/screenplay/questions/text/Text.d.ts +0 -41
  227. package/lib/screenplay/questions/text/Text.js +0 -50
  228. package/lib/screenplay/questions/text/Text.js.map +0 -1
  229. package/lib/screenplay/questions/text/TextOfMultipleElements.d.ts +0 -23
  230. package/lib/screenplay/questions/text/TextOfMultipleElements.js +0 -37
  231. package/lib/screenplay/questions/text/TextOfMultipleElements.js.map +0 -1
  232. package/lib/screenplay/questions/text/TextOfSingleElement.d.ts +0 -23
  233. package/lib/screenplay/questions/text/TextOfSingleElement.js +0 -35
  234. package/lib/screenplay/questions/text/TextOfSingleElement.js.map +0 -1
  235. package/lib/screenplay/questions/text/index.d.ts +0 -1
  236. package/lib/screenplay/questions/text/index.js +0 -14
  237. package/lib/screenplay/questions/text/index.js.map +0 -1
  238. package/lib/screenplay/withAnswerOf.d.ts +0 -8
  239. package/lib/screenplay/withAnswerOf.js +0 -18
  240. package/lib/screenplay/withAnswerOf.js.map +0 -1
  241. package/lib/stage/crew/index.d.ts +0 -1
  242. package/lib/stage/crew/index.js +0 -14
  243. package/lib/stage/crew/index.js.map +0 -1
  244. package/lib/stage/crew/photographer/Photographer.d.ts +0 -83
  245. package/lib/stage/crew/photographer/Photographer.js +0 -102
  246. package/lib/stage/crew/photographer/Photographer.js.map +0 -1
  247. package/lib/stage/crew/photographer/index.d.ts +0 -2
  248. package/lib/stage/crew/photographer/index.js +0 -15
  249. package/lib/stage/crew/photographer/index.js.map +0 -1
  250. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.d.ts +0 -28
  251. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js +0 -65
  252. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js.map +0 -1
  253. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.d.ts +0 -18
  254. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.js +0 -30
  255. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.js.map +0 -1
  256. package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.d.ts +0 -17
  257. package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.js +0 -28
  258. package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.js.map +0 -1
  259. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.d.ts +0 -19
  260. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.js +0 -28
  261. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.js.map +0 -1
  262. package/lib/stage/crew/photographer/strategies/index.d.ts +0 -4
  263. package/lib/stage/crew/photographer/strategies/index.js +0 -17
  264. package/lib/stage/crew/photographer/strategies/index.js.map +0 -1
  265. package/lib/stage/index.d.ts +0 -1
  266. package/lib/stage/index.js +0 -14
  267. package/lib/stage/index.js.map +0 -1
  268. package/src/expectations/ElementFinderExpectation.ts +0 -29
  269. package/src/expectations/index.ts +0 -6
  270. package/src/expectations/isActive.ts +0 -24
  271. package/src/expectations/isClickable.ts +0 -20
  272. package/src/expectations/isEnabled.ts +0 -18
  273. package/src/expectations/isPresent.ts +0 -19
  274. package/src/expectations/isSelected.ts +0 -23
  275. package/src/expectations/isVisible.ts +0 -27
  276. package/src/screenplay/interactions/Accept.ts +0 -95
  277. package/src/screenplay/interactions/Clear.ts +0 -130
  278. package/src/screenplay/interactions/Click.ts +0 -96
  279. package/src/screenplay/interactions/Close.ts +0 -184
  280. package/src/screenplay/interactions/DeleteCookies.ts +0 -154
  281. package/src/screenplay/interactions/Dismiss.ts +0 -99
  282. package/src/screenplay/interactions/DoubleClick.ts +0 -124
  283. package/src/screenplay/interactions/Enter.ts +0 -104
  284. package/src/screenplay/interactions/EnterBuilder.ts +0 -29
  285. package/src/screenplay/interactions/ExecuteScript.ts +0 -325
  286. package/src/screenplay/interactions/Hover.ts +0 -106
  287. package/src/screenplay/interactions/Navigate.ts +0 -363
  288. package/src/screenplay/interactions/Press.ts +0 -137
  289. package/src/screenplay/interactions/PressBuilder.ts +0 -29
  290. package/src/screenplay/interactions/ResizeBrowserWindow.ts +0 -148
  291. package/src/screenplay/interactions/RightClick.ts +0 -114
  292. package/src/screenplay/interactions/Scroll.ts +0 -99
  293. package/src/screenplay/interactions/Select.ts +0 -402
  294. package/src/screenplay/interactions/SelectBuilder.ts +0 -35
  295. package/src/screenplay/interactions/Switch.ts +0 -393
  296. package/src/screenplay/interactions/TakeScreenshot.ts +0 -89
  297. package/src/screenplay/interactions/Wait.ts +0 -267
  298. package/src/screenplay/interactions/WaitBuilder.ts +0 -35
  299. package/src/screenplay/questions/Attribute.ts +0 -67
  300. package/src/screenplay/questions/Browser.ts +0 -55
  301. package/src/screenplay/questions/CSSClasses.ts +0 -121
  302. package/src/screenplay/questions/Cookie.ts +0 -70
  303. package/src/screenplay/questions/LastScriptExecution.ts +0 -21
  304. package/src/screenplay/questions/ModalDialog.ts +0 -149
  305. package/src/screenplay/questions/Pick.ts +0 -334
  306. package/src/screenplay/questions/Selected.ts +0 -268
  307. package/src/screenplay/questions/Value.ts +0 -73
  308. package/src/screenplay/questions/Website.ts +0 -27
  309. package/src/screenplay/questions/Window.ts +0 -29
  310. package/src/screenplay/questions/lists/ElementArrayFinderListAdapter.ts +0 -158
  311. package/src/screenplay/questions/lists/index.ts +0 -1
  312. package/src/screenplay/questions/targets/Target.ts +0 -198
  313. package/src/screenplay/questions/targets/TargetElement.ts +0 -70
  314. package/src/screenplay/questions/targets/TargetElements.ts +0 -142
  315. package/src/screenplay/questions/targets/TargetNestedElement.ts +0 -71
  316. package/src/screenplay/questions/targets/TargetNestedElements.ts +0 -142
  317. package/src/screenplay/questions/targets/builders.ts +0 -10
  318. package/src/screenplay/questions/targets/index.ts +0 -5
  319. package/src/screenplay/questions/targets/override.ts +0 -17
  320. package/src/screenplay/questions/text/Text.ts +0 -55
  321. package/src/screenplay/questions/text/TextOfMultipleElements.ts +0 -40
  322. package/src/screenplay/questions/text/TextOfSingleElement.ts +0 -37
  323. package/src/screenplay/questions/text/index.ts +0 -1
  324. package/src/screenplay/withAnswerOf.ts +0 -19
  325. package/src/stage/crew/index.ts +0 -1
  326. package/src/stage/crew/photographer/Photographer.ts +0 -108
  327. package/src/stage/crew/photographer/index.ts +0 -2
  328. package/src/stage/crew/photographer/strategies/PhotoTakingStrategy.ts +0 -102
  329. package/src/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.ts +0 -28
  330. package/src/stage/crew/photographer/strategies/TakePhotosOfFailures.ts +0 -26
  331. package/src/stage/crew/photographer/strategies/TakePhotosOfInteractions.ts +0 -26
  332. package/src/stage/crew/photographer/strategies/index.ts +0 -4
  333. package/src/stage/index.ts +0 -1
@@ -1,8 +1,10 @@
1
- import { Ability, ConfigurationError, LogicError, UsesAbilities } from '@serenity-js/core';
2
- import { ActionSequence, ElementArrayFinder, ElementFinder, Locator, ProtractorBrowser } from 'protractor';
3
- import { AlertPromise, Capabilities, Navigation, Options, WebElement, WebElementPromise } from 'selenium-webdriver';
1
+ import { ConfigurationError, Duration, LogicError, UsesAbilities } from '@serenity-js/core';
2
+ import { BrowserCapabilities, BrowseTheWeb, Cookie, CookieData, Key, ModalDialog, Page, PageElement, PageElements } from '@serenity-js/web';
3
+ import { by, ElementArrayFinder, ElementFinder, ProtractorBrowser, WebElementPromise } from 'protractor';
4
+ import { Capabilities } from 'selenium-webdriver';
4
5
 
5
- import { promiseOf } from '../../promiseOf';
6
+ import { ProtractorCookie, ProtractorModalDialog, ProtractorNativeElementRoot, ProtractorPage, ProtractorPageElement, ProtractorPageElements } from '../models';
7
+ import { promised } from '../promised';
6
8
 
7
9
  /**
8
10
  * @desc
@@ -33,288 +35,269 @@ import { promiseOf } from '../../promiseOf';
33
35
  * @implements {@serenity-js/core/lib/screenplay~Ability}
34
36
  * @see {@link @serenity-js/core/lib/screenplay/actor~Actor}
35
37
  */
36
- export class BrowseTheWeb implements Ability {
37
-
38
- /**
39
- * @private
40
- */
41
- private lastScriptExecutionSummary: LastScriptExecutionSummary;
42
-
43
- /**
44
- * @private
45
- */
46
- private originalWindowHandle: string;
38
+ export class BrowseTheWebWithProtractor extends BrowseTheWeb {
47
39
 
48
40
  /**
49
41
  * @desc
50
42
  * Ability to interact with web front-ends using a given protractor browser instance.
51
43
  *
52
44
  * @param {ProtractorBrowser} browser
53
- * @returns {BrowseTheWeb}
45
+ * @returns {BrowseTheWebWithProtractor}
54
46
  */
55
- static using(browser: ProtractorBrowser): BrowseTheWeb {
56
- return new BrowseTheWeb(browser);
47
+ static using(browser: ProtractorBrowser): BrowseTheWebWithProtractor {
48
+ return new BrowseTheWebWithProtractor(browser);
57
49
  }
58
50
 
59
51
  /**
60
52
  * @desc
61
- * Used to access the Actor's ability to {@link BrowseTheWeb} from within the {@link Interaction} classes,
53
+ * Used to access the Actor's ability to {@link BrowseTheWebWithProtractor} from within the {@link Interaction} classes,
62
54
  * such as {@link Navigate}.
63
55
  *
64
56
  * @param {UsesAbilities} actor
65
- * @return {BrowseTheWeb}
57
+ * @return {BrowseTheWebWithProtractor}
66
58
  */
67
- static as(actor: UsesAbilities): BrowseTheWeb {
68
- return actor.abilityTo(BrowseTheWeb);
59
+ static as(actor: UsesAbilities): BrowseTheWebWithProtractor {
60
+ return actor.abilityTo(BrowseTheWebWithProtractor);
69
61
  }
70
62
 
63
+ /**
64
+ * @private
65
+ */
66
+ private lastScriptExecutionSummary: LastScriptExecutionSummary;
67
+
71
68
  /**
72
69
  * @param {ProtractorBrowser} browser
73
70
  * An instance of a protractor browser
74
71
  */
75
72
  constructor(protected browser: ProtractorBrowser) {
73
+ super();
76
74
  }
77
75
 
78
- /**
79
- * @desc
80
- * Navigate to the given destination and loads mock modules before Angular.
81
- * Assumes that the page being loaded uses Angular.
82
- *
83
- * @param {string} destination
84
- * @param {number?} timeoutInMillis
85
- *
86
- * @returns {Promise<void>}
87
- */
88
- get(destination: string, timeoutInMillis?: number): Promise<void> {
89
- return promiseOf(this.browser.get(destination, timeoutInMillis)
90
- .then(() => this.browser.getWindowHandle())
91
- .then(handle => {
92
- this.originalWindowHandle = handle;
93
- }),
94
- );
76
+ async browserCapabilities(): Promise<BrowserCapabilities> {
77
+ const capabilities = await promised(this.browser.getCapabilities());
78
+
79
+ return {
80
+ platformName: capabilities.get('platform'),
81
+ browserName: capabilities.get('browserName'),
82
+ browserVersion: capabilities.get('version'),
83
+ };
95
84
  }
96
85
 
97
- /**
98
- * @desc
99
- * Interface for navigating back and forth in the browser history.
100
- *
101
- * @returns {Navigation}
102
- */
103
- navigate(): Navigation {
104
- return this.browser.navigate();
86
+ async cookie(name: string): Promise<Cookie> {
87
+ return new ProtractorCookie(this.browser, name);
105
88
  }
106
89
 
107
- /**
108
- * @desc
109
- * Interface for defining sequences of complex user interactions.
110
- * Each sequence will not be executed until `perform` is called.
111
- *
112
- * @returns {ActionSequence}
113
- *
114
- * @see https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/lib/actions.html
115
- */
116
- actions(): ActionSequence {
117
- return this.browser.actions();
90
+ async setCookie(cookieData: CookieData): Promise<void> {
91
+ return promised(this.browser.manage().addCookie({
92
+ name: cookieData.name,
93
+ value: cookieData.value,
94
+ path: cookieData.path,
95
+ domain: cookieData.domain,
96
+ secure: cookieData.secure,
97
+ httpOnly: cookieData.httpOnly,
98
+ expiry: cookieData.expiry
99
+ ? cookieData.expiry.toSeconds()
100
+ : undefined,
101
+ }));
118
102
  }
119
103
 
120
- /**
121
- * @desc
122
- * Interface for managing browser and driver state.
123
- *
124
- * @returns {Options}
125
- *
126
- * @see https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/lib/webdriver_exports_WebDriver.html#manage
127
- */
128
- manage(): Options {
129
- /*
130
- this.browser.manage().deleteCookie();
131
- this.browser.manage().deleteAllCookies();
132
- return this.browser.manage().getCookie('asd');
133
- */
104
+ deleteAllCookies(): Promise<void> {
105
+ return promised(this.browser.manage().deleteAllCookies());
106
+ }
134
107
 
135
- return this.browser.manage();
108
+ findByCss(selector: string): PageElement<any, any> {
109
+ return this.find(root => root.element(by.css(selector)));
136
110
  }
137
111
 
138
- /**
139
- * @desc
140
- * Changes focus to the active modal dialog,
141
- * such as those opened by
142
- * [`Window.alert()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/alert),
143
- * [`Window.prompt()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt), or
144
- * [`Window.confirm()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/confirm).
145
- *
146
- * The returned promise will be rejected with an [`error.NoSuchAlertError`](https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/lib/error_exports_NoSuchAlertError.html)
147
- * if there are no open alerts.
148
- *
149
- * @returns {AlertPromise}
150
- *
151
- * @see https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/lib/webdriver_exports_TargetLocator.html#alert
152
- */
153
- alert(): AlertPromise {
154
- return this.browser.switchTo().alert();
112
+ findByCssContainingText(selector: string, text: string): PageElement<any, any> {
113
+ return this.find(root => root.element(by.cssContainingText(selector, text)));
155
114
  }
156
115
 
157
- /**
158
- * @desc
159
- * Switches the focus to a [`frame`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame) or
160
- * [`iframe`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) identified by `elementOrIndexOrName`,
161
- * which can be specified either as {@link selenium-webdriver~WebElement}, the name of the frame, or its index.
162
- *
163
- * @param {number | string | WebElement} elementOrIndexOrName
164
- *
165
- * @returns {Promise<void>}
166
- */
167
- switchToFrame(elementOrIndexOrName: number | string | WebElement | WebElementPromise): Promise<void> {
168
- // incorrect type definition in selenium-webdriver prevents us from providing a string arg
169
- return promiseOf(this.browser.switchTo().frame(elementOrIndexOrName as any));
116
+ findById(selector: string): PageElement<any, any> {
117
+ return this.find(root => root.element(by.id(selector)));
170
118
  }
171
119
 
172
- /**
173
- * @desc
174
- * Switches the focus from any [`frame`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame) or
175
- * [`iframe`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) back to its parent iframe.
176
- *
177
- * @returns {Promise<void>}
178
- */
179
- switchToParentFrame(): Promise<void> {
180
- return promiseOf(this.browser.driver.switchToParentFrame());
120
+ findByTagName(selector: string): PageElement<any, any> {
121
+ return this.find(root => root.element(by.tagName(selector)));
181
122
  }
182
123
 
183
- /**
184
- * @desc
185
- * Switches the focus from any [`frame`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame)
186
- * or [`iframe`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) back to default content,
187
- * a.k.a. "the main window".
188
- *
189
- * @returns {Promise<void>}
190
- */
191
- switchToDefaultContent(): Promise<void> {
192
- return promiseOf(this.browser.switchTo().defaultContent());
124
+ findByXPath(selector: string): PageElement<any, any> {
125
+ return this.find(root => root.element(by.xpath(selector)));
193
126
  }
194
127
 
195
- /**
196
- * @desc
197
- * Switches browser window/tab to the one identified by `nameOrHandleOrIndex`,
198
- * which can be specified as the name of the window to switch to, its handle, or numeric index.
199
- *
200
- * @param {string | number} nameOrHandleOrIndex
201
- *
202
- * @returns {Promise<void>}
203
- */
204
- switchToWindow(nameOrHandleOrIndex: string | number): Promise<void> {
205
- return typeof nameOrHandleOrIndex === 'string'
206
- ? this.switchToWindowByNameOrHandle(nameOrHandleOrIndex)
207
- : this.switchToWindowByIndex(nameOrHandleOrIndex);
128
+ findAllByCss(selector: string): PageElements<any, any, any> {
129
+ return this.findAll(root => root.all(by.css(selector)));
208
130
  }
209
131
 
210
- /**
211
- * @param {string} nameOrHandle
212
- * @private
213
- */
214
- private switchToWindowByNameOrHandle(nameOrHandle: string): Promise<void> {
215
- return promiseOf(this.browser.switchTo().window(nameOrHandle));
132
+ findAllByTagName(selector: string): PageElements<any, any, any> {
133
+ return this.findAll(root => root.all(by.tagName(selector)));
216
134
  }
217
135
 
218
- /**
219
- * @param {number} index
220
- * @private
221
- */
222
- private switchToWindowByIndex(index: number): Promise<void> {
223
- return promiseOf(this.browser.getAllWindowHandles().then(handles => {
224
- const handle = handles[index];
136
+ findAllByXPath(selector: string): PageElements<any, any, any> {
137
+ return this.findAll(root => root.all(by.xpath(selector)));
138
+ }
225
139
 
226
- if (! handle) {
227
- throw new LogicError(`Window ${ index } doesn't exist`)
140
+ private find(locator: (root: ProtractorNativeElementRoot) => Promise<ElementFinder> | ElementFinder): ProtractorPageElement {
141
+ return new ProtractorPageElement(
142
+ () => ({
143
+ element: this.browser.element.bind(this.browser),
144
+ all: this.browser.element.all.bind(this.browser),
145
+ }),
146
+ locator,
147
+ );
148
+ }
149
+
150
+ private findAll(locator: (root: ProtractorNativeElementRoot) => Promise<ElementArrayFinder> | ElementArrayFinder): ProtractorPageElements {
151
+ return new ProtractorPageElements(
152
+ () => ({
153
+ element: this.browser.element.bind(this.browser),
154
+ all: this.browser.element.all.bind(this.browser),
155
+ }),
156
+ locator,
157
+ );
158
+ }
159
+
160
+ navigateTo(destination: string): Promise<void> {
161
+ return promised(this.browser.get(destination));
162
+ }
163
+
164
+ navigateBack(): Promise<void> {
165
+ return promised(this.browser.navigate().back());
166
+ }
167
+
168
+ navigateForward(): Promise<void> {
169
+ return promised(this.browser.navigate().forward());
170
+ }
171
+
172
+ reloadPage(): Promise<void> {
173
+ return promised(this.browser.navigate().refresh());
174
+ }
175
+
176
+ waitFor(duration: Duration): Promise<void> {
177
+ return promised(this.browser.sleep(duration.inMilliseconds()));
178
+ }
179
+
180
+ waitUntil(condition: () => boolean | Promise<boolean>, timeout: Duration): Promise<void> {
181
+ return promised(this.browser.wait(condition, timeout.inMilliseconds())) as unknown as Promise<void>;
182
+ }
183
+
184
+ async sendKeys(keys: (string | Key)[]): Promise<void> {
185
+ function isModifier(maybeKey: string | Key): boolean {
186
+ return Key.isKey(maybeKey) && maybeKey.isModifier;
187
+ }
188
+
189
+ function asCodePoint(maybeKey: string | Key): string {
190
+ if (! Key.isKey(maybeKey)) {
191
+ return maybeKey;
228
192
  }
229
193
 
230
- return this.browser.switchTo().window(handle);
231
- }));
194
+ return maybeKey.utf16codePoint;
195
+ }
196
+
197
+ // keyDown for any modifier keys and sendKeys otherwise
198
+ const keyDownActions = keys.reduce((actions, key) => {
199
+ return isModifier(key)
200
+ ? actions.keyDown(asCodePoint(key))
201
+ : actions.sendKeys(asCodePoint(key))
202
+ }, this.browser.actions());
203
+
204
+ // keyUp for any modifier keys, ignore for regular keys
205
+ const keyUpActions = keys.reduce((actions, key) => {
206
+ return isModifier(key)
207
+ ? actions.keyUp(asCodePoint(key))
208
+ : actions;
209
+ }, keyDownActions);
210
+
211
+ return promised(keyUpActions.perform());
232
212
  }
233
213
 
234
- /**
235
- * @desc
236
- * Switches the window back to the original one that was used to call {@link get}.
237
- *
238
- * @returns {Promise<void>}
239
- */
240
- switchToOriginalWindow(): Promise<void> {
241
- return this.originalWindowHandle
242
- ? promiseOf(this.browser.switchTo().window(this.originalWindowHandle))
243
- : Promise.resolve();
214
+ async modalDialog(): Promise<ModalDialog> {
215
+ return new ProtractorModalDialog(this.browser);
244
216
  }
245
217
 
246
218
  /**
247
219
  * @desc
248
- * Returns the handle of the browser window last used to navigate to a URL.
220
+ * Navigate to the given destination and loads mock modules before Angular.
221
+ * Assumes that the page being loaded uses Angular.
249
222
  *
250
- * @returns {Promise<string>}
251
- * A window handle
223
+ * @param {string} destination
224
+ * @param {number?} timeoutInMillis
252
225
  *
253
- * @see {@link get}
226
+ * @returns {Promise<void>}
254
227
  */
255
- getOriginalWindowHandle(): Promise<string> {
256
- return Promise.resolve(this.originalWindowHandle);
228
+ get(destination: string, timeoutInMillis?: number): Promise<void> {
229
+ return promised(this.browser.get(destination, timeoutInMillis));
257
230
  }
258
231
 
259
232
  /**
260
233
  * @desc
261
- * Returns the current window handle.
262
- * Please note that the current handle changes with each browser window you {@link Switch} to.
234
+ * Switches the focus to a [`frame`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame) or
235
+ * [`iframe`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) identified by `elementOrIndexOrName`,
236
+ * which can be specified either as {@link selenium-webdriver~WebElement}, the name of the frame, or its index.
263
237
  *
264
- * @returns {Promise<string>}
265
- * A window handle
238
+ * @param {number | string | WebElement} elementOrIndexOrName
266
239
  *
267
- * @see {@link get}
240
+ * @returns {Promise<void>}
268
241
  */
269
- getCurrentWindowHandle(): Promise<string> {
270
- return promiseOf(this.browser.getWindowHandle());
242
+ async switchToFrame(elementOrIndexOrName: number | string | PageElement): Promise<void> {
243
+ if (elementOrIndexOrName instanceof ProtractorPageElement) {
244
+ const nativeElement = await elementOrIndexOrName.nativeElement();
245
+ const webElement = await nativeElement.getWebElement() as unknown as WebElementPromise // https://github.com/angular/protractor/issues/1846#issuecomment-82634739;
246
+
247
+ return this.browser.switchTo().frame(webElement);
248
+ }
249
+
250
+ // incorrect type definition in selenium-webdriver prevents us from providing a string argument
251
+ return this.browser.switchTo().frame(elementOrIndexOrName as any);
271
252
  }
272
253
 
273
254
  /**
274
255
  * @desc
275
- * Returns the handles of all the available windows.
276
- *
277
- * Please note that while some browsers organise entries of this list in the same order
278
- * new windows have been spawned, other browsers order it alphabetically.
279
- * For this reason, you should not make any assumptions about how this list is ordered.
256
+ * Switches the focus from any [`frame`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame) or
257
+ * [`iframe`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) back to its parent iframe.
280
258
  *
281
- * @returns {Promise<string[]>}
282
- * A list of window handles
259
+ * @returns {Promise<void>}
283
260
  */
284
- getAllWindowHandles(): Promise<string[]> {
285
- return promiseOf(this.browser.getAllWindowHandles());
261
+ switchToParentFrame(): Promise<void> {
262
+ return promised(this.browser.driver.switchToParentFrame());
286
263
  }
287
264
 
288
265
  /**
289
266
  * @desc
290
- * Closes the currently active browser window/tab.
267
+ * Switches the focus from any [`frame`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame)
268
+ * or [`iframe`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) back to default content,
269
+ * a.k.a. "the main window".
291
270
  *
292
271
  * @returns {Promise<void>}
293
272
  */
294
- closeCurrentWindow(): Promise<void> {
295
- return promiseOf(this.browser.close());
273
+ switchToDefaultContent(): Promise<void> {
274
+ return promised(this.browser.switchTo().defaultContent());
296
275
  }
297
276
 
298
277
  /**
299
278
  * @desc
300
- * Locates a single element identified by the locator
279
+ * Returns a {@link Page} representing the currently active top-level browsing context.
301
280
  *
302
- * @param {Locator} locator
303
- * @returns {ElementFinder}
281
+ * @returns {Promise<Page>}
304
282
  */
305
- locate(locator: Locator): ElementFinder {
306
- return this.browser.element(locator);
283
+ async currentPage(): Promise<Page> {
284
+
285
+ const windowHandle = await this.browser.getWindowHandle();
286
+
287
+ return new ProtractorPage(this.browser, windowHandle);
307
288
  }
308
289
 
309
290
  /**
310
291
  * @desc
311
- * Locates all elements identified by the locator
292
+ * Returns an array of {@link Page} objects representing all the available
293
+ * top-level browsing context, e.g. all the open browser tabs.
312
294
  *
313
- * @param {Locator} locator
314
- * @returns {ElementArrayFinder}
295
+ * @returns {Promise<Array<Page>>}
315
296
  */
316
- locateAll(locator: Locator): ElementArrayFinder {
317
- return this.browser.element.all(locator);
297
+ async allPages(): Promise<Array<Page>> {
298
+ const windowHandles = await this.browser.getAllWindowHandles();
299
+
300
+ return windowHandles.map(windowHandle => new ProtractorPage(this.browser, windowHandle));
318
301
  }
319
302
 
320
303
  /**
@@ -343,7 +326,7 @@ export class BrowseTheWeb implements Ability {
343
326
  * @returns {Promise<boolean>}
344
327
  */
345
328
  enableAngularSynchronisation(enable: boolean): Promise<boolean> {
346
- return promiseOf(this.browser.waitForAngularEnabled(enable));
329
+ return promised(this.browser.waitForAngularEnabled(enable));
347
330
  }
348
331
 
349
332
  /**
@@ -380,7 +363,6 @@ export class BrowseTheWeb implements Ability {
380
363
  * @see https://www.protractortest.org/#/api?view=webdriver.WebDriver.prototype.executeScript
381
364
  * @see https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/JavascriptExecutor.html#executeScript-java.lang.String-java.lang.Object...-
382
365
  *
383
- * @param {string} description - useful for debugging
384
366
  * @param {string | Function} script
385
367
  * @param {any[]} args
386
368
  *
@@ -388,27 +370,34 @@ export class BrowseTheWeb implements Ability {
388
370
  *
389
371
  * @see {@link BrowseTheWeb#getLastScriptExecutionResult}
390
372
  */
391
- executeScript(description: string, script: string | Function, ...args: any[]): Promise<any> { // eslint-disable-line @typescript-eslint/ban-types
392
- return promiseOf(this.browser.executeScriptWithDescription(script, description, ...args))
373
+ async executeScript<Result, InnerArguments extends any[]>(
374
+ script: string | ((...parameters: InnerArguments) => Result),
375
+ ...args: InnerArguments
376
+ ): Promise<Result> {
377
+ const nativeArguments = await Promise.all(args.map(arg => arg instanceof ProtractorPageElement ? arg.nativeElement() : arg)) as InnerArguments;
378
+
379
+ return promised(this.browser.executeScript(script, ...nativeArguments))
393
380
  .then(result => {
394
381
  this.lastScriptExecutionSummary = new LastScriptExecutionSummary(
395
382
  result,
396
383
  );
397
384
  return result;
398
- });
385
+ }) as Promise<Result>;
399
386
  }
400
387
 
401
388
  /**
402
389
  * @desc
403
- * A simplified version of {@link BrowseTheWeb#executeScript} that doesn't affect {@link LastScriptExecution.result()}.
390
+ * A simplified version of {@link BrowseTheWebWithProtractor#executeScript} that doesn't affect {@link LastScriptExecution.result()}.
404
391
  *
405
392
  * @param {Function} fn
406
393
  * @param {Parameters<fn>} args
407
394
  *
408
395
  * @returns {Promise<ReturnType<fn>>}
409
396
  */
410
- executeFunction<F extends (...args: any[]) => any>(fn: F, ...args: Parameters<F>): Promise<ReturnType<F>> {
411
- return promiseOf(this.browser.executeScriptWithDescription(fn, fn.name, ...args));
397
+ async executeFunction<F extends (...args: any[]) => any>(fn: F, ...args: Parameters<F>): Promise<ReturnType<F>> {
398
+ const nativeArguments = await Promise.all(args.map(arg => arg instanceof ProtractorPageElement ? arg.nativeElement() : arg)) as Parameters<F>;
399
+
400
+ return promised(this.browser.executeScriptWithDescription(fn, fn.name, ...nativeArguments));
412
401
  }
413
402
 
414
403
  /**
@@ -423,7 +412,7 @@ export class BrowseTheWeb implements Ability {
423
412
  * Arrays and objects may also be used as script arguments as long as each item adheres
424
413
  * to the types previously mentioned.
425
414
  *
426
- * Unlike executing synchronous JavaScript with {@link BrowseTheWeb#executeScript},
415
+ * Unlike executing synchronous JavaScript with {@link BrowseTheWebWithProtractor#executeScript},
427
416
  * scripts executed with this function must explicitly signal they are finished by invoking the provided callback.
428
417
  *
429
418
  * This callback will always be injected into the executed function as the last argument,
@@ -463,15 +452,19 @@ export class BrowseTheWeb implements Ability {
463
452
  *
464
453
  * @see {@link BrowseTheWeb#getLastScriptExecutionResult}
465
454
  */
466
- executeAsyncScript(script: string | Function, ...args: any[]): Promise<any> { // eslint-disable-line @typescript-eslint/ban-types
467
- return promiseOf(this.browser.executeAsyncScript(script, ...args))
455
+ async executeAsyncScript<Result, Parameters extends any[]>(
456
+ script: string | ((...args: [...parameters: Parameters, callback: (result: Result) => void]) => void),
457
+ ...args: Parameters
458
+ ): Promise<Result> {
459
+ const nativeArguments = await Promise.all(args.map(arg => arg instanceof ProtractorPageElement ? arg.nativeElement() : arg)) as Parameters;
460
+
461
+ return promised(this.browser.executeAsyncScript(script, ...nativeArguments))
468
462
  .then(result => {
469
463
  this.lastScriptExecutionSummary = new LastScriptExecutionSummary(
470
464
  result,
471
465
  );
472
466
  return result;
473
- });
474
- // todo: should I wrap this an provide additional diagnostic information? execution time? error handling?
467
+ }) as Promise<Result>;
475
468
  }
476
469
 
477
470
  /**
@@ -487,29 +480,7 @@ export class BrowseTheWeb implements Ability {
487
480
  * @return {Promise<string>} A promise that will be resolved to a base64-encoded screenshot PNG
488
481
  */
489
482
  takeScreenshot(): Promise<string> {
490
- return promiseOf(this.browser.takeScreenshot());
491
- }
492
-
493
- /**
494
- * @desc
495
- * Returns the title of the current page.
496
- *
497
- * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title
498
- *
499
- * @returns {Promise<string>}
500
- */
501
- getTitle(): Promise<string> {
502
- return promiseOf(this.browser.getTitle());
503
- }
504
-
505
- /**
506
- * @desc
507
- * Returns the url of the current page.
508
- *
509
- * @returns {Promise<string>}
510
- */
511
- getCurrentUrl(): Promise<string> {
512
- return promiseOf(this.browser.getCurrentUrl());
483
+ return promised(this.browser.takeScreenshot());
513
484
  }
514
485
 
515
486
  /**
@@ -522,8 +493,8 @@ export class BrowseTheWeb implements Ability {
522
493
  *
523
494
  * @returns {Promise<Capabilities>} The actual capabilities of this browser.
524
495
  */
525
- getCapabilities(): Promise<Capabilities> {
526
- return promiseOf(this.browser.getCapabilities());
496
+ capabilities(): Promise<Capabilities> {
497
+ return promised(this.browser.getCapabilities());
527
498
  }
528
499
 
529
500
  /**
@@ -534,7 +505,7 @@ export class BrowseTheWeb implements Ability {
534
505
  * @returns {Promise<void>}
535
506
  */
536
507
  sleep(millis: number): Promise<void> {
537
- return promiseOf(this.browser.sleep(millis));
508
+ return promised(this.browser.sleep(millis));
538
509
  }
539
510
 
540
511
  /**
@@ -546,22 +517,26 @@ export class BrowseTheWeb implements Ability {
546
517
  * @returns {Promise<boolean>}
547
518
  */
548
519
  wait(condition: () => Promise<boolean>, timeoutInMillis: number): Promise<boolean> {
549
- return promiseOf(this.browser.wait(condition, timeoutInMillis));
520
+ return promised(this.browser.wait(condition, timeoutInMillis));
550
521
  }
551
522
 
552
523
  /**
553
524
  * @desc
554
- * Returns the last result of calling {@link BrowseTheWeb#executeAsyncScript}
555
- * or {@link BrowseTheWeb#executeScript}
525
+ * Returns the last result of calling {@link BrowseTheWebWithProtractor#executeAsyncScript}
526
+ * or {@link BrowseTheWebWithProtractor#executeScript}
556
527
  *
557
528
  * @returns {any}
558
529
  */
559
- getLastScriptExecutionResult(): any {
530
+ lastScriptExecutionResult(): any {
560
531
  if (! this.lastScriptExecutionSummary) {
561
532
  throw new LogicError(`Make sure to execute a script before checking on the result`);
562
533
  }
563
534
 
564
- return this.lastScriptExecutionSummary.result;
535
+ // Selenium 3 returns `null` when the script it executed returns `undefined`
536
+ // so we're mapping the result back.
537
+ return this.lastScriptExecutionSummary.result !== null
538
+ ? this.lastScriptExecutionSummary.result
539
+ : undefined;
565
540
  }
566
541
 
567
542
  /**
@@ -1 +1 @@
1
- export * from './BrowseTheWeb';
1
+ export * from './BrowseTheWebWithProtractor';
@@ -1,3 +1,4 @@
1
1
  export * from './abilities';
2
2
  export * from './interactions';
3
+ export * from './models';
3
4
  export * from './questions';