@serenity-js/web 3.0.0-rc.8 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +336 -73
- package/README.md +8 -12
- package/lib/errors/BrowserWindowClosedError.d.ts +15 -0
- package/lib/errors/BrowserWindowClosedError.d.ts.map +1 -0
- package/lib/errors/BrowserWindowClosedError.js +21 -0
- package/lib/errors/BrowserWindowClosedError.js.map +1 -0
- package/lib/errors/CookieMissingError.d.ts +11 -0
- package/lib/errors/CookieMissingError.d.ts.map +1 -0
- package/lib/errors/CookieMissingError.js +10 -0
- package/lib/errors/CookieMissingError.js.map +1 -1
- package/lib/errors/ModalDialogObstructsScreenshotError.d.ts +15 -0
- package/lib/errors/ModalDialogObstructsScreenshotError.d.ts.map +1 -0
- package/lib/errors/ModalDialogObstructsScreenshotError.js +21 -0
- package/lib/errors/ModalDialogObstructsScreenshotError.js.map +1 -0
- package/lib/errors/index.d.ts +3 -0
- package/lib/errors/index.d.ts.map +1 -0
- package/lib/errors/index.js +7 -1
- package/lib/errors/index.js.map +1 -1
- package/lib/expectations/index.d.ts +1 -1
- package/lib/expectations/index.d.ts.map +1 -0
- package/lib/expectations/index.js +5 -2
- package/lib/expectations/index.js.map +1 -1
- package/lib/expectations/isActive.d.ts +14 -8
- package/lib/expectations/isActive.d.ts.map +1 -0
- package/lib/expectations/isActive.js +17 -11
- package/lib/expectations/isActive.js.map +1 -1
- package/lib/expectations/isClickable.d.ts +14 -13
- package/lib/expectations/isClickable.d.ts.map +1 -0
- package/lib/expectations/isClickable.js +15 -17
- package/lib/expectations/isClickable.js.map +1 -1
- package/lib/expectations/isEnabled.d.ts +14 -7
- package/lib/expectations/isEnabled.d.ts.map +1 -0
- package/lib/expectations/isEnabled.js +17 -9
- package/lib/expectations/isEnabled.js.map +1 -1
- package/lib/expectations/isSelected.d.ts +14 -7
- package/lib/expectations/isSelected.d.ts.map +1 -0
- package/lib/expectations/isSelected.js +15 -9
- package/lib/expectations/isSelected.js.map +1 -1
- package/lib/expectations/isVisible.d.ts +14 -7
- package/lib/expectations/isVisible.d.ts.map +1 -0
- package/lib/expectations/isVisible.js +17 -9
- package/lib/expectations/isVisible.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +5 -2
- package/lib/index.js.map +1 -1
- package/lib/screenplay/abilities/BrowseTheWeb.d.ts +88 -45
- package/lib/screenplay/abilities/BrowseTheWeb.d.ts.map +1 -0
- package/lib/screenplay/abilities/BrowseTheWeb.js +89 -19
- package/lib/screenplay/abilities/BrowseTheWeb.js.map +1 -1
- package/lib/screenplay/abilities/index.d.ts +1 -1
- package/lib/screenplay/abilities/index.d.ts.map +1 -0
- package/lib/screenplay/abilities/index.js +5 -2
- package/lib/screenplay/abilities/index.js.map +1 -1
- package/lib/screenplay/index.d.ts +1 -0
- package/lib/screenplay/index.d.ts.map +1 -0
- package/lib/screenplay/index.js +5 -1
- package/lib/screenplay/index.js.map +1 -1
- package/lib/screenplay/interactions/Clear.d.ts +50 -55
- package/lib/screenplay/interactions/Clear.d.ts.map +1 -0
- package/lib/screenplay/interactions/Clear.js +70 -63
- package/lib/screenplay/interactions/Clear.js.map +1 -1
- package/lib/screenplay/interactions/Click.d.ts +41 -50
- package/lib/screenplay/interactions/Click.d.ts.map +1 -0
- package/lib/screenplay/interactions/Click.js +45 -55
- package/lib/screenplay/interactions/Click.js.map +1 -1
- package/lib/screenplay/interactions/DoubleClick.d.ts +64 -67
- package/lib/screenplay/interactions/DoubleClick.d.ts.map +1 -0
- package/lib/screenplay/interactions/DoubleClick.js +68 -72
- package/lib/screenplay/interactions/DoubleClick.js.map +1 -1
- package/lib/screenplay/interactions/Enter.d.ts +42 -51
- package/lib/screenplay/interactions/Enter.d.ts.map +1 -0
- package/lib/screenplay/interactions/Enter.js +42 -52
- package/lib/screenplay/interactions/Enter.js.map +1 -1
- package/lib/screenplay/interactions/ExecuteScript.d.ts +144 -148
- package/lib/screenplay/interactions/ExecuteScript.d.ts.map +1 -0
- package/lib/screenplay/interactions/ExecuteScript.js +163 -185
- package/lib/screenplay/interactions/ExecuteScript.js.map +1 -1
- package/lib/screenplay/interactions/Hover.d.ts +40 -50
- package/lib/screenplay/interactions/Hover.d.ts.map +1 -0
- package/lib/screenplay/interactions/Hover.js +44 -55
- package/lib/screenplay/interactions/Hover.js.map +1 -1
- package/lib/screenplay/interactions/Navigate.d.ts +106 -113
- package/lib/screenplay/interactions/Navigate.d.ts.map +1 -0
- package/lib/screenplay/interactions/Navigate.js +124 -146
- package/lib/screenplay/interactions/Navigate.js.map +1 -1
- package/lib/screenplay/interactions/PageElementInteraction.d.ts +12 -28
- package/lib/screenplay/interactions/PageElementInteraction.d.ts.map +1 -0
- package/lib/screenplay/interactions/PageElementInteraction.js +12 -33
- package/lib/screenplay/interactions/PageElementInteraction.js.map +1 -1
- package/lib/screenplay/interactions/Press.d.ts +61 -55
- package/lib/screenplay/interactions/Press.d.ts.map +1 -0
- package/lib/screenplay/interactions/Press.js +83 -72
- package/lib/screenplay/interactions/Press.js.map +1 -1
- package/lib/screenplay/interactions/RightClick.d.ts +59 -65
- package/lib/screenplay/interactions/RightClick.d.ts.map +1 -0
- package/lib/screenplay/interactions/RightClick.js +63 -70
- package/lib/screenplay/interactions/RightClick.js.map +1 -1
- package/lib/screenplay/interactions/Scroll.d.ts +46 -64
- package/lib/screenplay/interactions/Scroll.d.ts.map +1 -0
- package/lib/screenplay/interactions/Scroll.js +49 -71
- package/lib/screenplay/interactions/Scroll.js.map +1 -1
- package/lib/screenplay/interactions/Select.d.ts +217 -193
- package/lib/screenplay/interactions/Select.d.ts.map +1 -0
- package/lib/screenplay/interactions/Select.js +218 -245
- package/lib/screenplay/interactions/Select.js.map +1 -1
- package/lib/screenplay/interactions/Switch.d.ts +105 -128
- package/lib/screenplay/interactions/Switch.d.ts.map +1 -0
- package/lib/screenplay/interactions/Switch.js +121 -172
- package/lib/screenplay/interactions/Switch.js.map +1 -1
- package/lib/screenplay/interactions/TakeScreenshot.d.ts +28 -50
- package/lib/screenplay/interactions/TakeScreenshot.d.ts.map +1 -0
- package/lib/screenplay/interactions/TakeScreenshot.js +32 -57
- package/lib/screenplay/interactions/TakeScreenshot.js.map +1 -1
- package/lib/screenplay/interactions/index.d.ts +2 -3
- package/lib/screenplay/interactions/index.d.ts.map +1 -0
- package/lib/screenplay/interactions/index.js +6 -4
- package/lib/screenplay/interactions/index.js.map +1 -1
- package/lib/screenplay/models/BrowserCapabilities.d.ts +24 -0
- package/lib/screenplay/models/BrowserCapabilities.d.ts.map +1 -0
- package/lib/screenplay/models/BrowserCapabilities.js.map +1 -0
- package/lib/screenplay/models/BrowsingSession.d.ts +69 -0
- package/lib/screenplay/models/BrowsingSession.d.ts.map +1 -0
- package/lib/screenplay/models/BrowsingSession.js +101 -0
- package/lib/screenplay/models/BrowsingSession.js.map +1 -0
- package/lib/screenplay/models/Cookie.d.ts +104 -64
- package/lib/screenplay/models/Cookie.d.ts.map +1 -0
- package/lib/screenplay/models/Cookie.js +110 -59
- package/lib/screenplay/models/Cookie.js.map +1 -1
- package/lib/screenplay/models/CookieData.d.ts +20 -58
- package/lib/screenplay/models/CookieData.d.ts.map +1 -0
- package/lib/{input → screenplay/models}/Key.d.ts +13 -9
- package/lib/screenplay/models/Key.d.ts.map +1 -0
- package/lib/{input → screenplay/models}/Key.js +16 -13
- package/lib/screenplay/models/Key.js.map +1 -0
- package/lib/screenplay/models/Locator.d.ts +29 -8
- package/lib/screenplay/models/Locator.d.ts.map +1 -0
- package/lib/screenplay/models/Locator.js +53 -7
- package/lib/screenplay/models/Locator.js.map +1 -1
- package/lib/screenplay/models/Page.d.ts +398 -36
- package/lib/screenplay/models/Page.d.ts.map +1 -0
- package/lib/screenplay/models/Page.js +209 -4
- package/lib/screenplay/models/Page.js.map +1 -1
- package/lib/screenplay/models/PageElement.d.ts +77 -5
- package/lib/screenplay/models/PageElement.d.ts.map +1 -0
- package/lib/screenplay/models/PageElement.js +29 -7
- package/lib/screenplay/models/PageElement.js.map +1 -1
- package/lib/screenplay/models/PageElements.d.ts +16 -3
- package/lib/screenplay/models/PageElements.d.ts.map +1 -0
- package/lib/screenplay/models/PageElements.js +21 -8
- package/lib/screenplay/models/PageElements.js.map +1 -1
- package/lib/screenplay/models/RootLocator.d.ts +25 -0
- package/lib/screenplay/models/RootLocator.d.ts.map +1 -0
- package/lib/screenplay/models/RootLocator.js +52 -0
- package/lib/screenplay/models/RootLocator.js.map +1 -0
- package/lib/screenplay/models/SelectOption.d.ts +25 -0
- package/lib/screenplay/models/SelectOption.d.ts.map +1 -0
- package/lib/screenplay/models/SelectOption.js +37 -0
- package/lib/screenplay/models/SelectOption.js.map +1 -0
- package/lib/screenplay/models/Switchable.d.ts +23 -0
- package/lib/screenplay/models/Switchable.d.ts.map +1 -0
- package/lib/screenplay/{interactions/WaitBuilder.js → models/Switchable.js} +1 -1
- package/lib/screenplay/models/Switchable.js.map +1 -0
- package/lib/screenplay/models/SwitchableOrigin.d.ts +18 -0
- package/lib/screenplay/models/SwitchableOrigin.d.ts.map +1 -0
- package/lib/screenplay/{interactions/EnterBuilder.js → models/SwitchableOrigin.js} +1 -1
- package/lib/screenplay/models/SwitchableOrigin.js.map +1 -0
- package/lib/screenplay/models/dialogs/AbsentModalDialog.d.ts +15 -0
- package/lib/screenplay/models/dialogs/AbsentModalDialog.d.ts.map +1 -0
- package/lib/screenplay/models/dialogs/AbsentModalDialog.js +24 -0
- package/lib/screenplay/models/dialogs/AbsentModalDialog.js.map +1 -0
- package/lib/screenplay/models/dialogs/AcceptedModalDialog.d.ts +17 -0
- package/lib/screenplay/models/dialogs/AcceptedModalDialog.d.ts.map +1 -0
- package/lib/screenplay/models/dialogs/AcceptedModalDialog.js +29 -0
- package/lib/screenplay/models/dialogs/AcceptedModalDialog.js.map +1 -0
- package/lib/screenplay/models/dialogs/DismissedModalDialog.d.ts +17 -0
- package/lib/screenplay/models/dialogs/DismissedModalDialog.d.ts.map +1 -0
- package/lib/screenplay/models/dialogs/DismissedModalDialog.js +29 -0
- package/lib/screenplay/models/dialogs/DismissedModalDialog.js.map +1 -0
- package/lib/screenplay/models/dialogs/ModalDialog.d.ts +168 -0
- package/lib/screenplay/models/dialogs/ModalDialog.d.ts.map +1 -0
- package/lib/screenplay/models/dialogs/ModalDialog.js +174 -0
- package/lib/screenplay/models/dialogs/ModalDialog.js.map +1 -0
- package/lib/screenplay/models/dialogs/ModalDialogHandler.d.ts +38 -0
- package/lib/screenplay/models/dialogs/ModalDialogHandler.d.ts.map +1 -0
- package/lib/screenplay/models/dialogs/ModalDialogHandler.js +30 -0
- package/lib/screenplay/models/dialogs/ModalDialogHandler.js.map +1 -0
- package/lib/screenplay/models/dialogs/index.d.ts +6 -0
- package/lib/screenplay/models/dialogs/index.d.ts.map +1 -0
- package/lib/screenplay/models/dialogs/index.js +22 -0
- package/lib/screenplay/models/dialogs/index.js.map +1 -0
- package/lib/screenplay/models/index.d.ts +9 -1
- package/lib/screenplay/models/index.d.ts.map +1 -0
- package/lib/screenplay/models/index.js +13 -2
- package/lib/screenplay/models/index.js.map +1 -1
- package/lib/screenplay/models/selectors/By.d.ts +38 -0
- package/lib/screenplay/models/selectors/By.d.ts.map +1 -0
- package/lib/screenplay/models/selectors/By.js +43 -0
- package/lib/screenplay/models/selectors/By.js.map +1 -1
- package/lib/screenplay/models/selectors/ByCss.d.ts +8 -0
- package/lib/screenplay/models/selectors/ByCss.d.ts.map +1 -0
- package/lib/screenplay/models/selectors/ByCss.js +7 -0
- package/lib/screenplay/models/selectors/ByCss.js.map +1 -1
- package/lib/screenplay/models/selectors/ByCssContainingText.d.ts +9 -0
- package/lib/screenplay/models/selectors/ByCssContainingText.d.ts.map +1 -0
- package/lib/screenplay/models/selectors/ByCssContainingText.js +8 -0
- package/lib/screenplay/models/selectors/ByCssContainingText.js.map +1 -1
- package/lib/screenplay/models/selectors/ByDeepCss.d.ts +14 -0
- package/lib/screenplay/models/selectors/ByDeepCss.d.ts.map +1 -0
- package/lib/screenplay/models/selectors/ByDeepCss.js +20 -0
- package/lib/screenplay/models/selectors/ByDeepCss.js.map +1 -0
- package/lib/screenplay/models/selectors/ById.d.ts +8 -0
- package/lib/screenplay/models/selectors/ById.d.ts.map +1 -0
- package/lib/screenplay/models/selectors/ById.js +7 -0
- package/lib/screenplay/models/selectors/ById.js.map +1 -1
- package/lib/screenplay/models/selectors/ByTagName.d.ts +8 -0
- package/lib/screenplay/models/selectors/ByTagName.d.ts.map +1 -0
- package/lib/screenplay/models/selectors/ByTagName.js +7 -0
- package/lib/screenplay/models/selectors/ByTagName.js.map +1 -1
- package/lib/screenplay/models/selectors/ByXPath.d.ts +8 -0
- package/lib/screenplay/models/selectors/ByXPath.d.ts.map +1 -0
- package/lib/screenplay/models/selectors/ByXPath.js +7 -0
- package/lib/screenplay/models/selectors/ByXPath.js.map +1 -1
- package/lib/screenplay/models/selectors/Selector.d.ts +6 -0
- package/lib/screenplay/models/selectors/Selector.d.ts.map +1 -0
- package/lib/screenplay/models/selectors/Selector.js +6 -1
- package/lib/screenplay/models/selectors/Selector.js.map +1 -1
- package/lib/screenplay/models/selectors/index.d.ts +2 -0
- package/lib/screenplay/models/selectors/index.d.ts.map +1 -0
- package/lib/screenplay/models/selectors/index.js +6 -1
- package/lib/screenplay/models/selectors/index.js.map +1 -1
- package/lib/screenplay/questions/Attribute.d.ts +115 -67
- package/lib/screenplay/questions/Attribute.d.ts.map +1 -0
- package/lib/screenplay/questions/Attribute.js +128 -74
- package/lib/screenplay/questions/Attribute.js.map +1 -1
- package/lib/screenplay/questions/CssClasses.d.ts +124 -79
- package/lib/screenplay/questions/CssClasses.d.ts.map +1 -0
- package/lib/screenplay/questions/CssClasses.js +132 -83
- package/lib/screenplay/questions/CssClasses.js.map +1 -1
- package/lib/screenplay/questions/LastScriptExecution.d.ts +42 -6
- package/lib/screenplay/questions/LastScriptExecution.d.ts.map +1 -0
- package/lib/screenplay/questions/LastScriptExecution.js +45 -7
- package/lib/screenplay/questions/LastScriptExecution.js.map +1 -1
- package/lib/screenplay/questions/Selected.d.ts +202 -171
- package/lib/screenplay/questions/Selected.d.ts.map +1 -0
- package/lib/screenplay/questions/Selected.js +225 -186
- package/lib/screenplay/questions/Selected.js.map +1 -1
- package/lib/screenplay/questions/Text.d.ts +101 -82
- package/lib/screenplay/questions/Text.d.ts.map +1 -0
- package/lib/screenplay/questions/Text.js +143 -92
- package/lib/screenplay/questions/Text.js.map +1 -1
- package/lib/screenplay/questions/Value.d.ts +77 -44
- package/lib/screenplay/questions/Value.d.ts.map +1 -0
- package/lib/screenplay/questions/Value.js +84 -47
- package/lib/screenplay/questions/Value.js.map +1 -1
- package/lib/screenplay/questions/index.d.ts +1 -0
- package/lib/screenplay/questions/index.d.ts.map +1 -0
- package/lib/screenplay/questions/index.js +5 -1
- package/lib/screenplay/questions/index.js.map +1 -1
- package/lib/scripts/index.d.ts +2 -0
- package/lib/scripts/index.d.ts.map +1 -0
- package/lib/{input → scripts}/index.js +6 -2
- package/lib/scripts/index.js.map +1 -0
- package/lib/scripts/isVisible.d.ts +2 -0
- package/lib/scripts/isVisible.d.ts.map +1 -0
- package/lib/scripts/isVisible.js +96 -0
- package/lib/scripts/isVisible.js.map +1 -0
- package/lib/stage/crew/index.d.ts +1 -0
- package/lib/stage/crew/index.d.ts.map +1 -0
- package/lib/stage/crew/index.js +5 -1
- package/lib/stage/crew/index.js.map +1 -1
- package/lib/stage/crew/photographer/Photographer.d.ts +126 -39
- package/lib/stage/crew/photographer/Photographer.d.ts.map +1 -0
- package/lib/stage/crew/photographer/Photographer.js +161 -42
- package/lib/stage/crew/photographer/Photographer.js.map +1 -1
- package/lib/stage/crew/photographer/index.d.ts +1 -0
- package/lib/stage/crew/photographer/index.d.ts.map +1 -0
- package/lib/stage/crew/photographer/index.js +5 -1
- package/lib/stage/crew/photographer/index.js.map +1 -1
- package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.d.ts +13 -12
- package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.d.ts.map +1 -0
- package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js +22 -33
- package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js.map +1 -1
- package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.d.ts +8 -8
- package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.d.ts.map +1 -0
- package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.js +7 -8
- package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.js.map +1 -1
- package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.d.ts +8 -7
- package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.d.ts.map +1 -0
- package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.js +7 -7
- package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.d.ts +8 -8
- package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.d.ts.map +1 -0
- package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.js +7 -8
- package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.js.map +1 -1
- package/lib/stage/crew/photographer/strategies/index.d.ts +1 -0
- package/lib/stage/crew/photographer/strategies/index.d.ts.map +1 -0
- package/lib/stage/crew/photographer/strategies/index.js +5 -1
- package/lib/stage/crew/photographer/strategies/index.js.map +1 -1
- package/lib/stage/index.d.ts +1 -0
- package/lib/stage/index.d.ts.map +1 -0
- package/lib/stage/index.js +5 -1
- package/lib/stage/index.js.map +1 -1
- package/package.json +20 -43
- package/src/errors/BrowserWindowClosedError.ts +17 -0
- package/src/errors/CookieMissingError.ts +10 -0
- package/src/errors/ModalDialogObstructsScreenshotError.ts +17 -0
- package/src/errors/index.ts +2 -0
- package/src/expectations/index.ts +0 -1
- package/src/expectations/isActive.ts +23 -12
- package/src/expectations/isClickable.ts +22 -21
- package/src/expectations/isEnabled.ts +23 -9
- package/src/expectations/isSelected.ts +20 -10
- package/src/expectations/isVisible.ts +23 -9
- package/src/index.ts +0 -1
- package/src/screenplay/abilities/BrowseTheWeb.ts +95 -87
- package/src/screenplay/abilities/index.ts +0 -1
- package/src/screenplay/interactions/Clear.ts +75 -63
- package/src/screenplay/interactions/Click.ts +43 -54
- package/src/screenplay/interactions/DoubleClick.ts +66 -71
- package/src/screenplay/interactions/Enter.ts +41 -53
- package/src/screenplay/interactions/ExecuteScript.ts +207 -220
- package/src/screenplay/interactions/Hover.ts +42 -54
- package/src/screenplay/interactions/Navigate.ts +129 -156
- package/src/screenplay/interactions/PageElementInteraction.ts +14 -34
- package/src/screenplay/interactions/Press.ts +78 -69
- package/src/screenplay/interactions/RightClick.ts +61 -69
- package/src/screenplay/interactions/Scroll.ts +48 -71
- package/src/screenplay/interactions/Select.ts +229 -269
- package/src/screenplay/interactions/Switch.ts +123 -179
- package/src/screenplay/interactions/TakeScreenshot.ts +31 -57
- package/src/screenplay/interactions/index.ts +1 -3
- package/src/screenplay/models/BrowserCapabilities.ts +26 -0
- package/src/screenplay/models/BrowsingSession.ts +115 -0
- package/src/screenplay/models/Cookie.ts +115 -73
- package/src/screenplay/models/CookieData.ts +20 -58
- package/src/{input → screenplay/models}/Key.ts +12 -9
- package/src/screenplay/models/Locator.ts +43 -9
- package/src/screenplay/models/Page.ts +438 -37
- package/src/screenplay/models/PageElement.ts +92 -12
- package/src/screenplay/models/PageElements.ts +23 -9
- package/src/screenplay/models/RootLocator.ts +30 -0
- package/src/screenplay/models/SelectOption.ts +38 -0
- package/src/screenplay/models/Switchable.ts +24 -0
- package/src/screenplay/models/SwitchableOrigin.ts +18 -0
- package/src/screenplay/models/dialogs/AbsentModalDialog.ts +22 -0
- package/src/screenplay/models/dialogs/AcceptedModalDialog.ts +27 -0
- package/src/screenplay/models/dialogs/DismissedModalDialog.ts +27 -0
- package/src/screenplay/models/dialogs/ModalDialog.ts +200 -0
- package/src/screenplay/models/dialogs/ModalDialogHandler.ts +50 -0
- package/src/screenplay/models/dialogs/index.ts +5 -0
- package/src/screenplay/models/index.ts +8 -1
- package/src/screenplay/models/selectors/By.ts +45 -0
- package/src/screenplay/models/selectors/ByCss.ts +7 -0
- package/src/screenplay/models/selectors/ByCssContainingText.ts +8 -0
- package/src/screenplay/models/selectors/ByDeepCss.ts +15 -0
- package/src/screenplay/models/selectors/ById.ts +7 -0
- package/src/screenplay/models/selectors/ByTagName.ts +7 -0
- package/src/screenplay/models/selectors/ByXPath.ts +7 -0
- package/src/screenplay/models/selectors/Selector.ts +6 -1
- package/src/screenplay/models/selectors/index.ts +1 -0
- package/src/screenplay/questions/Attribute.ts +137 -76
- package/src/screenplay/questions/CssClasses.ts +135 -83
- package/src/screenplay/questions/LastScriptExecution.ts +45 -8
- package/src/screenplay/questions/Selected.ts +237 -191
- package/src/screenplay/questions/Text.ts +161 -96
- package/src/screenplay/questions/Value.ts +88 -48
- package/src/scripts/index.ts +1 -0
- package/src/scripts/isVisible.ts +113 -0
- package/src/stage/crew/photographer/Photographer.ts +142 -41
- package/src/stage/crew/photographer/strategies/PhotoTakingStrategy.ts +27 -42
- package/src/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.ts +7 -8
- package/src/stage/crew/photographer/strategies/TakePhotosOfFailures.ts +7 -7
- package/src/stage/crew/photographer/strategies/TakePhotosOfInteractions.ts +7 -8
- package/tsconfig.build.json +14 -0
- package/lib/expectations/ElementExpectation.d.ts +0 -83
- package/lib/expectations/ElementExpectation.js +0 -102
- package/lib/expectations/ElementExpectation.js.map +0 -1
- package/lib/input/Key.js.map +0 -1
- package/lib/input/index.d.ts +0 -1
- package/lib/input/index.js.map +0 -1
- package/lib/screenplay/abilities/BrowserCapabilities.d.ts +0 -5
- package/lib/screenplay/abilities/BrowserCapabilities.js.map +0 -1
- package/lib/screenplay/interactions/EnterBuilder.d.ts +0 -25
- package/lib/screenplay/interactions/EnterBuilder.js.map +0 -1
- package/lib/screenplay/interactions/PressBuilder.d.ts +0 -26
- package/lib/screenplay/interactions/PressBuilder.js +0 -3
- package/lib/screenplay/interactions/PressBuilder.js.map +0 -1
- package/lib/screenplay/interactions/SelectBuilder.d.ts +0 -33
- package/lib/screenplay/interactions/SelectBuilder.js +0 -3
- package/lib/screenplay/interactions/SelectBuilder.js.map +0 -1
- package/lib/screenplay/interactions/Wait.d.ts +0 -143
- package/lib/screenplay/interactions/Wait.js +0 -238
- package/lib/screenplay/interactions/Wait.js.map +0 -1
- package/lib/screenplay/interactions/WaitBuilder.d.ts +0 -32
- package/lib/screenplay/interactions/WaitBuilder.js.map +0 -1
- package/lib/screenplay/models/ModalDialog.d.ts +0 -9
- package/lib/screenplay/models/ModalDialog.js +0 -14
- package/lib/screenplay/models/ModalDialog.js.map +0 -1
- package/lib/screenplay/questions/ElementQuestion.d.ts +0 -33
- package/lib/screenplay/questions/ElementQuestion.js +0 -53
- package/lib/screenplay/questions/ElementQuestion.js.map +0 -1
- package/src/expectations/ElementExpectation.ts +0 -108
- package/src/input/index.ts +0 -1
- package/src/screenplay/abilities/BrowserCapabilities.ts +0 -5
- package/src/screenplay/interactions/EnterBuilder.ts +0 -28
- package/src/screenplay/interactions/PressBuilder.ts +0 -29
- package/src/screenplay/interactions/SelectBuilder.ts +0 -36
- package/src/screenplay/interactions/Wait.ts +0 -260
- package/src/screenplay/interactions/WaitBuilder.ts +0 -34
- package/src/screenplay/models/ModalDialog.ts +0 -19
- package/src/screenplay/questions/ElementQuestion.ts +0 -58
- package/tsconfig.eslint.json +0 -10
- /package/lib/screenplay/{abilities → models}/BrowserCapabilities.js +0 -0
|
@@ -1,225 +1,227 @@
|
|
|
1
|
-
import { Answerable, AnswersQuestions, CollectsArtifacts, Interaction, LogicError, UsesAbilities } from '@serenity-js/core';
|
|
2
|
-
import { asyncMap
|
|
1
|
+
import { Answerable, AnswersQuestions, CollectsArtifacts, f, Interaction, LogicError, UsesAbilities } from '@serenity-js/core';
|
|
2
|
+
import { asyncMap } from '@serenity-js/core/lib/io';
|
|
3
3
|
import { Name, TextData } from '@serenity-js/core/lib/model';
|
|
4
4
|
|
|
5
5
|
import { BrowseTheWeb } from '../abilities';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* @
|
|
9
|
-
*
|
|
10
|
-
* execute a script within the context of the current browser window.
|
|
8
|
+
* Instructs an {@apilink Actor|actor} who has the {@apilink Ability|ability} to {@apilink BrowseTheWeb}
|
|
9
|
+
* to execute a script within the context of the current browser tab.
|
|
11
10
|
*
|
|
12
|
-
*
|
|
11
|
+
* ## Learn more
|
|
13
12
|
*
|
|
14
|
-
*
|
|
13
|
+
* - {@apilink BrowseTheWeb}
|
|
14
|
+
* - {@apilink LastScriptExecution.result}
|
|
15
|
+
*
|
|
16
|
+
* @group Activities
|
|
15
17
|
*/
|
|
16
18
|
export class ExecuteScript {
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
|
-
* @
|
|
20
|
-
*
|
|
21
|
-
* configured to load a script from `sourceUrl`.
|
|
21
|
+
* Instantiates a version of this {@apilink Interaction}
|
|
22
|
+
* configured to load a script from `sourceUrl`.
|
|
22
23
|
*
|
|
23
|
-
* @param
|
|
24
|
+
* @param sourceUrl
|
|
24
25
|
* The URL to load the script from
|
|
25
|
-
*
|
|
26
|
-
* @returns {@serenity-js/core/lib/screenplay~Interaction}
|
|
27
26
|
*/
|
|
28
|
-
static from(sourceUrl: string): Interaction {
|
|
27
|
+
static from(sourceUrl: Answerable<string>): Interaction {
|
|
29
28
|
return new ExecuteScriptFromUrl(sourceUrl);
|
|
30
29
|
}
|
|
31
30
|
|
|
32
31
|
/**
|
|
33
|
-
* @
|
|
34
|
-
*
|
|
35
|
-
* The script fragment will be executed as the body of an anonymous function.
|
|
36
|
-
* If the script is provided as a function object, that function will be converted to a string for injection
|
|
37
|
-
* into the target window.
|
|
32
|
+
* Instructs an {@apilink Actor|actor} who has the {@apilink Ability|ability} to {@apilink BrowseTheWeb}
|
|
33
|
+
* to execute an asynchronous script within the context of the current browser tab.
|
|
38
34
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* Arrays and objects may also be used as script arguments as long as each item adheres
|
|
43
|
-
* to the types previously mentioned.
|
|
35
|
+
* The script fragment will be executed as the body of an anonymous function.
|
|
36
|
+
* If the script is provided as a function object, that function will be converted to a string for injection
|
|
37
|
+
* into the target window.
|
|
44
38
|
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
39
|
+
* Any arguments provided in addition to the script will be included as script arguments and may be referenced
|
|
40
|
+
* using the `arguments` object. Arguments may be a `boolean`, `number`, `string`
|
|
41
|
+
* or {@apilink PageElement}.
|
|
42
|
+
* Arrays and objects may also be used as script arguments as long as each item adheres
|
|
43
|
+
* to the types previously mentioned.
|
|
47
44
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
45
|
+
* Unlike executing synchronous JavaScript with {@apilink ExecuteScript.sync},
|
|
46
|
+
* scripts executed with this function must explicitly signal they are finished by invoking the provided callback.
|
|
50
47
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
48
|
+
* This callback will always be injected into the executed function as the last argument,
|
|
49
|
+
* and thus may be referenced with `arguments[arguments.length - 1]`.
|
|
53
50
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
51
|
+
* If the script invokes the `callback` with a return value, this will be made available
|
|
52
|
+
* via the {@apilink LastScriptExecution.result}.
|
|
56
53
|
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
54
|
+
* **Please note** that in order to signal an error in the `script` you need to throw an {@apilink Error}
|
|
55
|
+
* instead of passing it to the callback function.
|
|
59
56
|
*
|
|
60
|
-
*
|
|
61
|
-
* ExecuteScript.async(`
|
|
62
|
-
* var callback = arguments[arguments.length - 1];
|
|
57
|
+
* #### Executing an async script
|
|
63
58
|
*
|
|
64
|
-
*
|
|
59
|
+
* ```ts
|
|
60
|
+
* import { actorCalled } from '@serenity-js/core'
|
|
61
|
+
* import { ExecuteScript } from '@serenity-js/web'
|
|
65
62
|
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
63
|
+
* await actorCalled('Esti').attemptsTo(
|
|
64
|
+
* ExecuteScript.async(`
|
|
65
|
+
* var callback = arguments[arguments.length - 1]
|
|
69
66
|
*
|
|
70
|
-
*
|
|
71
|
-
* import { ExecuteScript } from '@serenity-js/webdriverio';
|
|
67
|
+
* // do stuff
|
|
72
68
|
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* var callback = arguments[arguments.length - 1];
|
|
69
|
+
* callback(result)
|
|
70
|
+
* `)
|
|
71
|
+
* )
|
|
72
|
+
* ```
|
|
78
73
|
*
|
|
79
|
-
*
|
|
74
|
+
* #### Passing arguments to an async script
|
|
80
75
|
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
76
|
+
* ```ts
|
|
77
|
+
* import { actorCalled } from '@serenity-js/core'
|
|
78
|
+
* import { ExecuteScript } from '@serenity-js/web'
|
|
84
79
|
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
80
|
+
* await actorCalled('Esti').attemptsTo(
|
|
81
|
+
* ExecuteScript.async(`
|
|
82
|
+
* var name = arguments[0];
|
|
83
|
+
* var age = arguments[1];
|
|
84
|
+
* var callback = arguments[arguments.length - 1]
|
|
87
85
|
*
|
|
88
|
-
*
|
|
89
|
-
* ExecuteScript.async(`
|
|
90
|
-
* var header = arguments[0]; // Target gets converted to a WebElement
|
|
91
|
-
* var callback = arguments[arguments.length - 1];
|
|
86
|
+
* // do stuff
|
|
92
87
|
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
88
|
+
* callback(result)
|
|
89
|
+
* `).withArguments('Bob', 24)
|
|
90
|
+
* )
|
|
91
|
+
* ```
|
|
96
92
|
*
|
|
97
|
-
*
|
|
98
|
-
* import { ExecuteScript } from '@serenity-js/webdriverio';
|
|
93
|
+
* #### Passing Target arguments to an async script
|
|
99
94
|
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* }).withArguments(Target.the('header').located(by.css('h1')))
|
|
104
|
-
* );
|
|
95
|
+
* ```ts
|
|
96
|
+
* import { actorCalled } from '@serenity-js/core'
|
|
97
|
+
* import { ExecuteScript } from '@serenity-js/web'
|
|
105
98
|
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
99
|
+
* await actorCalled('Esti').attemptsTo(
|
|
100
|
+
* ExecuteScript.async(`
|
|
101
|
+
* var header = arguments[0] // PageElement object gets converted to a WebElement
|
|
102
|
+
* var callback = arguments[arguments.length - 1]
|
|
103
|
+
*
|
|
104
|
+
* callback(header.innerText)
|
|
105
|
+
* `).withArguments(PageElement.located(By.css('h1')).describedAs('header'))
|
|
106
|
+
* )
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* #### Executing async script as function
|
|
110
|
+
*
|
|
111
|
+
* ```ts
|
|
112
|
+
* import { actorCalled } from '@serenity-js/core'
|
|
113
|
+
* import { ExecuteScript } from '@serenity-js/web'
|
|
108
114
|
*
|
|
109
|
-
*
|
|
115
|
+
* await actorCalled('Esti').attemptsTo(
|
|
116
|
+
* ExecuteScript.async(function getText(header, callback) {
|
|
117
|
+
* callback(header.innerText)
|
|
118
|
+
* }).withArguments(PageElement.located(By.css('h1')).describedAs('header'))
|
|
119
|
+
* )
|
|
120
|
+
* ```
|
|
110
121
|
*
|
|
111
|
-
*
|
|
122
|
+
* #### Learn more
|
|
123
|
+
* - {@apilink LastScriptExecution.result}
|
|
124
|
+
*
|
|
125
|
+
* @param script
|
|
126
|
+
* The script to be executed
|
|
112
127
|
*/
|
|
113
128
|
static async(script: string | Function): ExecuteScriptWithArguments { // eslint-disable-line @typescript-eslint/ban-types
|
|
114
|
-
return new ExecuteAsynchronousScript(
|
|
129
|
+
return new ExecuteAsynchronousScript(
|
|
130
|
+
`#actor executes an asynchronous script`,
|
|
131
|
+
script,
|
|
132
|
+
);
|
|
115
133
|
}
|
|
116
134
|
|
|
117
135
|
/**
|
|
118
|
-
* @
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
* @example <caption>Executing a sync script as string and reading the result</caption>
|
|
125
|
-
* import { actorCalled } from '@serenity-js/core';
|
|
126
|
-
* import { BrowseTheWeb, ExecuteScript, LastScriptExecution } from '@serenity-js/webdriverio';
|
|
127
|
-
* import { Ensure, includes } from '@serenity-js/assertions';
|
|
128
|
-
*
|
|
129
|
-
* actorCalled('Joseph')
|
|
130
|
-
* .whoCan(BrowseTheWeb.using(browser))
|
|
131
|
-
* .attemptsTo(
|
|
132
|
-
* ExecuteScript.sync('return navigator.userAgent'),
|
|
133
|
-
* Ensure.that(LastScriptExecution.result<string>(), includes('Chrome')),
|
|
134
|
-
* );
|
|
135
|
-
*
|
|
136
|
-
* @example <caption>Executing a sync script as function and reading the result</caption>
|
|
137
|
-
* import { actorCalled } from '@serenity-js/core';
|
|
138
|
-
* import { by, BrowseTheWeb, Enter, ExecuteScript, LastScriptExecution, Target } from '@serenity-js/webdriverio';
|
|
139
|
-
*
|
|
140
|
-
* const someOfferField = Target.the('offer code').located(by.id('offer-code'));
|
|
141
|
-
* const applyOfferCodeField = Target.the('apply offer field').located(by.id('apply-offer-code'));
|
|
142
|
-
*
|
|
143
|
-
* actorCalled('Joseph')
|
|
144
|
-
* .whoCan(BrowseTheWeb.using(browser))
|
|
145
|
-
* .attemptsTo(
|
|
146
|
-
* // inject JavaScript to read some property of an element
|
|
147
|
-
* ExecuteScript.sync(function getValue(element) {
|
|
148
|
-
* return element.value;
|
|
149
|
-
* }).withArguments(someOfferField),
|
|
150
|
-
*
|
|
151
|
-
* // use LastScriptExecution.result() to read the value
|
|
152
|
-
* // returned from the injected script
|
|
153
|
-
* // and pass it to another interaction
|
|
154
|
-
* Enter.theValue(LastScriptExecution.result<string>()).into(applyOfferCodeField),
|
|
155
|
-
* );
|
|
156
|
-
*
|
|
157
|
-
* @param {string | Function} script
|
|
158
|
-
* The script to be executed
|
|
136
|
+
* Instructs an {@apilink Actor|actor} who has the {@apilink Ability|ability} to {@apilink BrowseTheWeb}
|
|
137
|
+
* to execute a synchronous script within the context of the current browser tab.
|
|
138
|
+
*
|
|
139
|
+
* If the script returns a value, it will be made available via {@apilink LastScriptExecution.result}.
|
|
140
|
+
*
|
|
141
|
+
* #### Executing a sync script as string and reading the result
|
|
159
142
|
*
|
|
160
|
-
*
|
|
143
|
+
* ```ts
|
|
144
|
+
* import { actorCalled } from '@serenity-js/core'
|
|
145
|
+
* import { ExecuteScript, LastScriptExecution } from '@serenity-js/web'
|
|
146
|
+
* import { Ensure, includes } from '@serenity-js/assertions'
|
|
161
147
|
*
|
|
162
|
-
*
|
|
148
|
+
* await actorCalled('Joseph')
|
|
149
|
+
* .attemptsTo(
|
|
150
|
+
* ExecuteScript.sync('return navigator.userAgent'),
|
|
151
|
+
* Ensure.that(LastScriptExecution.result<string>(), includes('Chrome')),
|
|
152
|
+
* )
|
|
153
|
+
* ```
|
|
154
|
+
*
|
|
155
|
+
* #### Executing a sync script as function and reading the result
|
|
156
|
+
*
|
|
157
|
+
* ```ts
|
|
158
|
+
* import { actorCalled } from '@serenity-js/core'
|
|
159
|
+
* import { By, Enter, ExecuteScript, LastScriptExecution, PageElement } from '@serenity-js/web'
|
|
160
|
+
*
|
|
161
|
+
* const someOfferField = () =>
|
|
162
|
+
* PageElement.located(By.id('offer-code'))
|
|
163
|
+
* .describedAs('offer code')
|
|
164
|
+
*
|
|
165
|
+
* const applyOfferCodeField = () =>
|
|
166
|
+
* PageElement.located(By.id('apply-offer-code'))
|
|
167
|
+
* .describedAs('apply offer field')
|
|
168
|
+
*
|
|
169
|
+
* await actorCalled('Joseph')
|
|
170
|
+
* .attemptsTo(
|
|
171
|
+
* // inject JavaScript to read some property of an element
|
|
172
|
+
* ExecuteScript.sync(function getValue(element) {
|
|
173
|
+
* return element.value;
|
|
174
|
+
* }).withArguments(someOfferField),
|
|
175
|
+
*
|
|
176
|
+
* // use LastScriptExecution.result() to read the value
|
|
177
|
+
* // returned from the injected script
|
|
178
|
+
* // and pass it to another interaction
|
|
179
|
+
* Enter.theValue(LastScriptExecution.result<string>()).into(applyOfferCodeField),
|
|
180
|
+
* )
|
|
181
|
+
* ```
|
|
182
|
+
*
|
|
183
|
+
* #### Learn more
|
|
184
|
+
* - {@apilink LastScriptExecution.result}
|
|
185
|
+
*
|
|
186
|
+
* @param script
|
|
187
|
+
* The script to be executed
|
|
163
188
|
*/
|
|
164
189
|
static sync(script: string | Function): ExecuteScriptWithArguments { // eslint-disable-line @typescript-eslint/ban-types
|
|
165
|
-
return new ExecuteSynchronousScript(
|
|
190
|
+
return new ExecuteSynchronousScript(
|
|
191
|
+
`#actor executes a synchronous script`,
|
|
192
|
+
script,
|
|
193
|
+
);
|
|
166
194
|
}
|
|
167
195
|
}
|
|
168
196
|
|
|
169
197
|
/**
|
|
170
|
-
*
|
|
171
|
-
* Allows for a script to be executed to be parametrised.
|
|
172
|
-
*
|
|
173
|
-
* **Please note** that the arguments can be both synchronous and asynchronous {@link @serenity-js/core/lib/screenplay~Question}s
|
|
174
|
-
* as well as regular static values.
|
|
175
|
-
*
|
|
176
|
-
* @abstract
|
|
198
|
+
* Allows for a script to be executed to be parametrised.
|
|
177
199
|
*
|
|
178
|
-
*
|
|
200
|
+
* ## Learn more
|
|
201
|
+
* - {@apilink ExecuteScript}
|
|
179
202
|
*
|
|
180
|
-
* @
|
|
203
|
+
* @group Activities
|
|
181
204
|
*/
|
|
182
205
|
export abstract class ExecuteScriptWithArguments extends Interaction {
|
|
183
206
|
|
|
184
|
-
/**
|
|
185
|
-
* @param {string | Function} script
|
|
186
|
-
* The script to be executed
|
|
187
|
-
*
|
|
188
|
-
* @param {Array<Answerable<any>>} args
|
|
189
|
-
* Arguments to parametrise the script with
|
|
190
|
-
*/
|
|
191
207
|
constructor(
|
|
208
|
+
description: string,
|
|
192
209
|
protected readonly script: string | Function, // eslint-disable-line @typescript-eslint/ban-types
|
|
193
210
|
protected readonly args: Array<Answerable<any>> = [],
|
|
194
211
|
) {
|
|
195
|
-
super();
|
|
212
|
+
super(description, Interaction.callerLocation(5));
|
|
196
213
|
}
|
|
197
214
|
|
|
198
215
|
/**
|
|
199
|
-
* @
|
|
200
|
-
* Instantiates an {@link @serenity-js/core/lib/screenplay~Interaction}
|
|
201
|
-
* to {@link Enter}.
|
|
216
|
+
* Instantiates this {@apilink Interaction}
|
|
202
217
|
*
|
|
203
|
-
* @param
|
|
218
|
+
* @param args
|
|
204
219
|
* Arguments to parametrise the script with
|
|
205
|
-
*
|
|
206
|
-
* @returns {@serenity-js/core/lib/screenplay~Interaction}
|
|
207
220
|
*/
|
|
208
221
|
public abstract withArguments(...args: Array<Answerable<any>>): Interaction;
|
|
209
222
|
|
|
210
223
|
/**
|
|
211
|
-
* @
|
|
212
|
-
* Makes the provided {@link @serenity-js/core/lib/screenplay/actor~Actor}
|
|
213
|
-
* perform this {@link @serenity-js/core/lib/screenplay~Interaction}.
|
|
214
|
-
*
|
|
215
|
-
* @param {UsesAbilities & AnswersQuestions} actor
|
|
216
|
-
* An {@link @serenity-js/core/lib/screenplay/actor~Actor} to perform this {@link @serenity-js/core/lib/screenplay~Interaction}
|
|
217
|
-
*
|
|
218
|
-
* @returns {PromiseLike<void>}
|
|
219
|
-
*
|
|
220
|
-
* @see {@link @serenity-js/core/lib/screenplay/actor~Actor}
|
|
221
|
-
* @see {@link @serenity-js/core/lib/screenplay/actor~UsesAbilities}
|
|
222
|
-
* @see {@link @serenity-js/core/lib/screenplay/actor~AnswersQuestions}
|
|
224
|
+
* @inheritDoc
|
|
223
225
|
*/
|
|
224
226
|
async performAs(actor: UsesAbilities & CollectsArtifacts & AnswersQuestions): Promise<void> {
|
|
225
227
|
const args = await asyncMap(this.args, arg => actor.answer(arg));
|
|
@@ -243,17 +245,18 @@ export abstract class ExecuteScriptWithArguments extends Interaction {
|
|
|
243
245
|
*/
|
|
244
246
|
class ExecuteAsynchronousScript extends ExecuteScriptWithArguments {
|
|
245
247
|
withArguments(...args: Array<Answerable<any>>): Interaction {
|
|
246
|
-
return new ExecuteAsynchronousScript(
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
248
|
+
return new ExecuteAsynchronousScript(
|
|
249
|
+
args.length > 0
|
|
250
|
+
? f `#actor executes an asynchronous script with arguments: ${ args }`
|
|
251
|
+
: this.toString(),
|
|
252
|
+
this.script,
|
|
253
|
+
args,
|
|
254
|
+
);
|
|
251
255
|
}
|
|
252
256
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
: `#actor executes an asynchronous script`;
|
|
257
|
+
protected async executeAs(actor: UsesAbilities & AnswersQuestions, args: any[]): Promise<any> {
|
|
258
|
+
const page = await BrowseTheWeb.as(actor).currentPage();
|
|
259
|
+
return page.executeAsyncScript(this.script as unknown as any, ...args); // todo: fix types
|
|
257
260
|
}
|
|
258
261
|
}
|
|
259
262
|
|
|
@@ -264,64 +267,47 @@ class ExecuteAsynchronousScript extends ExecuteScriptWithArguments {
|
|
|
264
267
|
* https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement
|
|
265
268
|
*/
|
|
266
269
|
class ExecuteScriptFromUrl extends Interaction {
|
|
267
|
-
constructor(private readonly sourceUrl: string) {
|
|
268
|
-
super();
|
|
270
|
+
constructor(private readonly sourceUrl: Answerable<string>) {
|
|
271
|
+
super(f`#actor executes a script from ${ sourceUrl }`);
|
|
269
272
|
}
|
|
270
273
|
|
|
271
274
|
/**
|
|
272
|
-
* @
|
|
273
|
-
* Makes the provided {@link @serenity-js/core/lib/screenplay/actor~Actor}
|
|
274
|
-
* perform this {@link @serenity-js/core/lib/screenplay~Interaction}.
|
|
275
|
-
*
|
|
276
|
-
* @param {UsesAbilities & AnswersQuestions} actor
|
|
277
|
-
* @returns {Promise<void>}
|
|
278
|
-
*
|
|
279
|
-
* @see {@link @serenity-js/core/lib/screenplay/actor~Actor}
|
|
280
|
-
* @see {@link @serenity-js/core/lib/screenplay/actor~UsesAbilities}
|
|
281
|
-
* @see {@link @serenity-js/core/lib/screenplay/actor~AnswersQuestions}
|
|
275
|
+
* @inheritDoc
|
|
282
276
|
*/
|
|
283
|
-
performAs(actor: UsesAbilities & AnswersQuestions):
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
/* istanbul ignore next */
|
|
287
|
-
function executeScriptFromUrl(sourceUrl: string, callback: (message?: string) => void) {
|
|
288
|
-
const alreadyLoadedScripts = Array.prototype.slice
|
|
289
|
-
.call(document.querySelectorAll('script'))
|
|
290
|
-
.map(script => script.src);
|
|
291
|
-
|
|
292
|
-
if (~ alreadyLoadedScripts.indexOf(sourceUrl)) {
|
|
293
|
-
return callback('Script from ' + sourceUrl + ' has already been loaded');
|
|
294
|
-
}
|
|
277
|
+
async performAs(actor: UsesAbilities & AnswersQuestions): Promise<any> {
|
|
278
|
+
const page = await BrowseTheWeb.as(actor).currentPage();
|
|
279
|
+
const sourceUrl = await actor.answer(this.sourceUrl);
|
|
295
280
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
});
|
|
281
|
+
return page.executeAsyncScript(
|
|
282
|
+
/* istanbul ignore next */
|
|
283
|
+
function executeScriptFromUrl(sourceUrl: string, callback: (message?: string) => void) {
|
|
284
|
+
const alreadyLoadedScripts = Array.prototype.slice
|
|
285
|
+
.call(document.querySelectorAll('script'))
|
|
286
|
+
.map(script => script.src);
|
|
303
287
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
document.head.append(script);
|
|
307
|
-
},
|
|
308
|
-
this.sourceUrl
|
|
309
|
-
)
|
|
310
|
-
.then(errorMessage => {
|
|
311
|
-
if (errorMessage) {
|
|
312
|
-
throw new LogicError(errorMessage);
|
|
288
|
+
if (~ alreadyLoadedScripts.indexOf(sourceUrl)) {
|
|
289
|
+
return callback('Script from ' + sourceUrl + ' has already been loaded');
|
|
313
290
|
}
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
291
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
292
|
+
const script = document.createElement('script');
|
|
293
|
+
script.addEventListener('load', function() {
|
|
294
|
+
callback();
|
|
295
|
+
});
|
|
296
|
+
script.addEventListener('error', function () {
|
|
297
|
+
return callback(`Couldn't load script from ${ sourceUrl }`);
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
script.src = sourceUrl;
|
|
301
|
+
script.async = true;
|
|
302
|
+
document.head.append(script);
|
|
303
|
+
},
|
|
304
|
+
sourceUrl
|
|
305
|
+
)
|
|
306
|
+
.then(errorMessage => {
|
|
307
|
+
if (errorMessage) {
|
|
308
|
+
throw new LogicError(errorMessage);
|
|
309
|
+
}
|
|
310
|
+
});
|
|
325
311
|
}
|
|
326
312
|
}
|
|
327
313
|
|
|
@@ -331,16 +317,17 @@ class ExecuteScriptFromUrl extends Interaction {
|
|
|
331
317
|
class ExecuteSynchronousScript extends ExecuteScriptWithArguments {
|
|
332
318
|
|
|
333
319
|
withArguments(...args: Array<Answerable<any>>): Interaction {
|
|
334
|
-
return new ExecuteSynchronousScript(
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
320
|
+
return new ExecuteSynchronousScript(
|
|
321
|
+
args.length > 0
|
|
322
|
+
? f `#actor executes a synchronous script with arguments: ${ args }`
|
|
323
|
+
: this.toString(),
|
|
324
|
+
this.script,
|
|
325
|
+
args,
|
|
326
|
+
);
|
|
339
327
|
}
|
|
340
328
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
: `#actor executes a synchronous script`;
|
|
329
|
+
protected async executeAs(actor: UsesAbilities & AnswersQuestions, args: any[]): Promise<any> {
|
|
330
|
+
const page = await BrowseTheWeb.as(actor).currentPage();
|
|
331
|
+
return page.executeScript(this.script as unknown as any, ...args); // todo fix type
|
|
345
332
|
}
|
|
346
333
|
}
|