@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.
- package/CHANGELOG.md +75 -0
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -2
- package/lib/index.js.map +1 -1
- package/lib/screenplay/abilities/{BrowseTheWeb.d.ts → BrowseTheWebWithProtractor.d.ts} +52 -160
- package/lib/screenplay/abilities/{BrowseTheWeb.js → BrowseTheWebWithProtractor.js} +169 -218
- package/lib/screenplay/abilities/BrowseTheWebWithProtractor.js.map +1 -0
- package/lib/screenplay/abilities/index.d.ts +1 -1
- package/lib/screenplay/abilities/index.js +1 -1
- package/lib/screenplay/abilities/index.js.map +1 -1
- package/lib/screenplay/index.d.ts +1 -0
- package/lib/screenplay/index.js +1 -0
- package/lib/screenplay/index.js.map +1 -1
- package/lib/screenplay/interactions/UseAngular.js +2 -2
- package/lib/screenplay/interactions/UseAngular.js.map +1 -1
- package/lib/screenplay/interactions/index.d.ts +0 -19
- package/lib/screenplay/interactions/index.js +0 -19
- package/lib/screenplay/interactions/index.js.map +1 -1
- package/lib/screenplay/models/ProtractorCookie.d.ts +11 -0
- package/lib/screenplay/models/ProtractorCookie.js +39 -0
- package/lib/screenplay/models/ProtractorCookie.js.map +1 -0
- package/lib/screenplay/models/ProtractorModalDialog.d.ts +11 -0
- package/lib/screenplay/models/ProtractorModalDialog.js +43 -0
- package/lib/screenplay/models/ProtractorModalDialog.js.map +1 -0
- package/lib/screenplay/models/ProtractorNativeElementRoot.d.ts +5 -0
- package/lib/screenplay/{interactions/EnterBuilder.js → models/ProtractorNativeElementRoot.js} +1 -1
- package/lib/screenplay/models/ProtractorNativeElementRoot.js.map +1 -0
- package/lib/screenplay/models/ProtractorPage.d.ts +24 -0
- package/lib/screenplay/models/ProtractorPage.js +92 -0
- package/lib/screenplay/models/ProtractorPage.js.map +1 -0
- package/lib/screenplay/models/ProtractorPageElement.d.ts +23 -0
- package/lib/screenplay/models/ProtractorPageElement.js +112 -0
- package/lib/screenplay/models/ProtractorPageElement.js.map +1 -0
- package/lib/screenplay/models/ProtractorPageElements.d.ts +16 -0
- package/lib/screenplay/models/ProtractorPageElements.js +62 -0
- package/lib/screenplay/models/ProtractorPageElements.js.map +1 -0
- package/lib/screenplay/models/index.d.ts +6 -0
- package/lib/{expectations → screenplay/models}/index.js +6 -6
- package/lib/screenplay/models/index.js.map +1 -0
- package/lib/{promiseOf.d.ts → screenplay/promised.d.ts} +1 -1
- package/lib/{promiseOf.js → screenplay/promised.js} +4 -4
- package/lib/screenplay/promised.js.map +1 -0
- package/lib/screenplay/promisedWebElement.d.ts +11 -0
- package/lib/screenplay/promisedWebElement.js +27 -0
- package/lib/screenplay/promisedWebElement.js.map +1 -0
- package/lib/screenplay/questions/ProtractorParam.d.ts +24 -29
- package/lib/screenplay/questions/ProtractorParam.js +26 -33
- package/lib/screenplay/questions/ProtractorParam.js.map +1 -1
- package/lib/screenplay/questions/index.d.ts +0 -13
- package/lib/screenplay/questions/index.js +0 -16
- package/lib/screenplay/questions/index.js.map +1 -1
- package/package.json +20 -22
- package/src/index.ts +0 -2
- package/src/screenplay/abilities/{BrowseTheWeb.ts → BrowseTheWebWithProtractor.ts} +216 -241
- package/src/screenplay/abilities/index.ts +1 -1
- package/src/screenplay/index.ts +1 -0
- package/src/screenplay/interactions/UseAngular.ts +3 -3
- package/src/screenplay/interactions/index.ts +0 -19
- package/src/screenplay/models/ProtractorCookie.ts +41 -0
- package/src/screenplay/models/ProtractorModalDialog.ts +49 -0
- package/src/screenplay/models/ProtractorNativeElementRoot.ts +6 -0
- package/src/screenplay/models/ProtractorPage.ts +116 -0
- package/src/screenplay/models/ProtractorPageElement.ts +167 -0
- package/src/screenplay/models/ProtractorPageElements.ts +86 -0
- package/src/screenplay/models/index.ts +7 -0
- package/src/{promiseOf.ts → screenplay/promised.ts} +1 -1
- package/src/screenplay/promisedWebElement.ts +28 -0
- package/src/screenplay/questions/ProtractorParam.ts +29 -38
- package/src/screenplay/questions/index.ts +0 -13
- package/lib/expectations/ElementFinderExpectation.d.ts +0 -11
- package/lib/expectations/ElementFinderExpectation.js +0 -24
- package/lib/expectations/ElementFinderExpectation.js.map +0 -1
- package/lib/expectations/index.d.ts +0 -6
- package/lib/expectations/index.js.map +0 -1
- package/lib/expectations/isActive.d.ts +0 -13
- package/lib/expectations/isActive.js +0 -19
- package/lib/expectations/isActive.js.map +0 -1
- package/lib/expectations/isClickable.d.ts +0 -13
- package/lib/expectations/isClickable.js +0 -22
- package/lib/expectations/isClickable.js.map +0 -1
- package/lib/expectations/isEnabled.d.ts +0 -13
- package/lib/expectations/isEnabled.js +0 -19
- package/lib/expectations/isEnabled.js.map +0 -1
- package/lib/expectations/isPresent.d.ts +0 -14
- package/lib/expectations/isPresent.js +0 -20
- package/lib/expectations/isPresent.js.map +0 -1
- package/lib/expectations/isSelected.d.ts +0 -13
- package/lib/expectations/isSelected.js +0 -22
- package/lib/expectations/isSelected.js.map +0 -1
- package/lib/expectations/isVisible.d.ts +0 -13
- package/lib/expectations/isVisible.js +0 -25
- package/lib/expectations/isVisible.js.map +0 -1
- package/lib/promiseOf.js.map +0 -1
- package/lib/screenplay/abilities/BrowseTheWeb.js.map +0 -1
- package/lib/screenplay/interactions/Accept.d.ts +0 -81
- package/lib/screenplay/interactions/Accept.js +0 -95
- package/lib/screenplay/interactions/Accept.js.map +0 -1
- package/lib/screenplay/interactions/Clear.d.ts +0 -88
- package/lib/screenplay/interactions/Clear.js +0 -121
- package/lib/screenplay/interactions/Clear.js.map +0 -1
- package/lib/screenplay/interactions/Click.d.ts +0 -81
- package/lib/screenplay/interactions/Click.js +0 -95
- package/lib/screenplay/interactions/Click.js.map +0 -1
- package/lib/screenplay/interactions/Close.d.ts +0 -89
- package/lib/screenplay/interactions/Close.js +0 -169
- package/lib/screenplay/interactions/Close.js.map +0 -1
- package/lib/screenplay/interactions/DeleteCookies.d.ts +0 -72
- package/lib/screenplay/interactions/DeleteCookies.js +0 -149
- package/lib/screenplay/interactions/DeleteCookies.js.map +0 -1
- package/lib/screenplay/interactions/Dismiss.d.ts +0 -85
- package/lib/screenplay/interactions/Dismiss.js +0 -99
- package/lib/screenplay/interactions/Dismiss.js.map +0 -1
- package/lib/screenplay/interactions/DoubleClick.d.ts +0 -99
- package/lib/screenplay/interactions/DoubleClick.js +0 -121
- package/lib/screenplay/interactions/DoubleClick.js.map +0 -1
- package/lib/screenplay/interactions/Enter.d.ts +0 -81
- package/lib/screenplay/interactions/Enter.js +0 -96
- package/lib/screenplay/interactions/Enter.js.map +0 -1
- package/lib/screenplay/interactions/EnterBuilder.d.ts +0 -27
- package/lib/screenplay/interactions/EnterBuilder.js.map +0 -1
- package/lib/screenplay/interactions/ExecuteScript.d.ts +0 -171
- package/lib/screenplay/interactions/ExecuteScript.js +0 -291
- package/lib/screenplay/interactions/ExecuteScript.js.map +0 -1
- package/lib/screenplay/interactions/Hover.d.ts +0 -86
- package/lib/screenplay/interactions/Hover.js +0 -103
- package/lib/screenplay/interactions/Hover.js.map +0 -1
- package/lib/screenplay/interactions/Navigate.d.ts +0 -149
- package/lib/screenplay/interactions/Navigate.js +0 -345
- package/lib/screenplay/interactions/Navigate.js.map +0 -1
- package/lib/screenplay/interactions/Press.d.ts +0 -90
- package/lib/screenplay/interactions/Press.js +0 -127
- package/lib/screenplay/interactions/Press.js.map +0 -1
- package/lib/screenplay/interactions/PressBuilder.d.ts +0 -27
- package/lib/screenplay/interactions/PressBuilder.js +0 -3
- package/lib/screenplay/interactions/PressBuilder.js.map +0 -1
- package/lib/screenplay/interactions/ResizeBrowserWindow.d.ts +0 -69
- package/lib/screenplay/interactions/ResizeBrowserWindow.js +0 -144
- package/lib/screenplay/interactions/ResizeBrowserWindow.js.map +0 -1
- package/lib/screenplay/interactions/RightClick.d.ts +0 -97
- package/lib/screenplay/interactions/RightClick.js +0 -113
- package/lib/screenplay/interactions/RightClick.js.map +0 -1
- package/lib/screenplay/interactions/Scroll.d.ts +0 -83
- package/lib/screenplay/interactions/Scroll.js +0 -98
- package/lib/screenplay/interactions/Scroll.js.map +0 -1
- package/lib/screenplay/interactions/Select.d.ts +0 -212
- package/lib/screenplay/interactions/Select.js +0 -342
- package/lib/screenplay/interactions/Select.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/Switch.d.ts +0 -210
- package/lib/screenplay/interactions/Switch.js +0 -345
- package/lib/screenplay/interactions/Switch.js.map +0 -1
- package/lib/screenplay/interactions/TakeScreenshot.d.ts +0 -67
- package/lib/screenplay/interactions/TakeScreenshot.js +0 -86
- package/lib/screenplay/interactions/TakeScreenshot.js.map +0 -1
- package/lib/screenplay/interactions/Wait.d.ts +0 -147
- package/lib/screenplay/interactions/Wait.js +0 -247
- package/lib/screenplay/interactions/Wait.js.map +0 -1
- package/lib/screenplay/interactions/WaitBuilder.d.ts +0 -33
- package/lib/screenplay/interactions/WaitBuilder.js +0 -3
- package/lib/screenplay/interactions/WaitBuilder.js.map +0 -1
- package/lib/screenplay/questions/Attribute.d.ts +0 -29
- package/lib/screenplay/questions/Attribute.js +0 -56
- package/lib/screenplay/questions/Attribute.js.map +0 -1
- package/lib/screenplay/questions/Browser.d.ts +0 -47
- package/lib/screenplay/questions/Browser.js +0 -55
- package/lib/screenplay/questions/Browser.js.map +0 -1
- package/lib/screenplay/questions/CSSClasses.d.ts +0 -94
- package/lib/screenplay/questions/CSSClasses.js +0 -118
- package/lib/screenplay/questions/CSSClasses.js.map +0 -1
- package/lib/screenplay/questions/Cookie.d.ts +0 -9
- package/lib/screenplay/questions/Cookie.js +0 -65
- package/lib/screenplay/questions/Cookie.js.map +0 -1
- package/lib/screenplay/questions/LastScriptExecution.d.ts +0 -14
- package/lib/screenplay/questions/LastScriptExecution.js +0 -22
- package/lib/screenplay/questions/LastScriptExecution.js.map +0 -1
- package/lib/screenplay/questions/ModalDialog.d.ts +0 -120
- package/lib/screenplay/questions/ModalDialog.js +0 -142
- package/lib/screenplay/questions/ModalDialog.js.map +0 -1
- package/lib/screenplay/questions/Pick.d.ts +0 -72
- package/lib/screenplay/questions/Pick.js +0 -254
- package/lib/screenplay/questions/Pick.js.map +0 -1
- package/lib/screenplay/questions/Selected.d.ts +0 -185
- package/lib/screenplay/questions/Selected.js +0 -254
- package/lib/screenplay/questions/Selected.js.map +0 -1
- package/lib/screenplay/questions/Value.d.ts +0 -47
- package/lib/screenplay/questions/Value.js +0 -67
- package/lib/screenplay/questions/Value.js.map +0 -1
- package/lib/screenplay/questions/Website.d.ts +0 -15
- package/lib/screenplay/questions/Website.js +0 -25
- package/lib/screenplay/questions/Website.js.map +0 -1
- package/lib/screenplay/questions/Window.d.ts +0 -23
- package/lib/screenplay/questions/Window.js +0 -28
- package/lib/screenplay/questions/Window.js.map +0 -1
- package/lib/screenplay/questions/lists/ElementArrayFinderListAdapter.d.ts +0 -89
- package/lib/screenplay/questions/lists/ElementArrayFinderListAdapter.js +0 -138
- package/lib/screenplay/questions/lists/ElementArrayFinderListAdapter.js.map +0 -1
- package/lib/screenplay/questions/lists/index.d.ts +0 -1
- package/lib/screenplay/questions/lists/index.js +0 -14
- package/lib/screenplay/questions/lists/index.js.map +0 -1
- package/lib/screenplay/questions/targets/Target.d.ts +0 -168
- package/lib/screenplay/questions/targets/Target.js +0 -190
- package/lib/screenplay/questions/targets/Target.js.map +0 -1
- package/lib/screenplay/questions/targets/TargetElement.d.ts +0 -50
- package/lib/screenplay/questions/targets/TargetElement.js +0 -62
- package/lib/screenplay/questions/targets/TargetElement.js.map +0 -1
- package/lib/screenplay/questions/targets/TargetElements.d.ts +0 -102
- package/lib/screenplay/questions/targets/TargetElements.js +0 -124
- package/lib/screenplay/questions/targets/TargetElements.js.map +0 -1
- package/lib/screenplay/questions/targets/TargetNestedElement.d.ts +0 -49
- package/lib/screenplay/questions/targets/TargetNestedElement.js +0 -61
- package/lib/screenplay/questions/targets/TargetNestedElement.js.map +0 -1
- package/lib/screenplay/questions/targets/TargetNestedElements.d.ts +0 -101
- package/lib/screenplay/questions/targets/TargetNestedElements.js +0 -123
- package/lib/screenplay/questions/targets/TargetNestedElements.js.map +0 -1
- package/lib/screenplay/questions/targets/builders.d.ts +0 -8
- package/lib/screenplay/questions/targets/builders.js +0 -3
- package/lib/screenplay/questions/targets/builders.js.map +0 -1
- package/lib/screenplay/questions/targets/index.d.ts +0 -5
- package/lib/screenplay/questions/targets/index.js +0 -18
- package/lib/screenplay/questions/targets/index.js.map +0 -1
- package/lib/screenplay/questions/targets/override.d.ts +0 -7
- package/lib/screenplay/questions/targets/override.js +0 -21
- package/lib/screenplay/questions/targets/override.js.map +0 -1
- package/lib/screenplay/questions/text/Text.d.ts +0 -41
- package/lib/screenplay/questions/text/Text.js +0 -50
- package/lib/screenplay/questions/text/Text.js.map +0 -1
- package/lib/screenplay/questions/text/TextOfMultipleElements.d.ts +0 -23
- package/lib/screenplay/questions/text/TextOfMultipleElements.js +0 -37
- package/lib/screenplay/questions/text/TextOfMultipleElements.js.map +0 -1
- package/lib/screenplay/questions/text/TextOfSingleElement.d.ts +0 -23
- package/lib/screenplay/questions/text/TextOfSingleElement.js +0 -35
- package/lib/screenplay/questions/text/TextOfSingleElement.js.map +0 -1
- package/lib/screenplay/questions/text/index.d.ts +0 -1
- package/lib/screenplay/questions/text/index.js +0 -14
- package/lib/screenplay/questions/text/index.js.map +0 -1
- package/lib/screenplay/withAnswerOf.d.ts +0 -8
- package/lib/screenplay/withAnswerOf.js +0 -18
- package/lib/screenplay/withAnswerOf.js.map +0 -1
- package/lib/stage/crew/index.d.ts +0 -1
- package/lib/stage/crew/index.js +0 -14
- package/lib/stage/crew/index.js.map +0 -1
- package/lib/stage/crew/photographer/Photographer.d.ts +0 -83
- package/lib/stage/crew/photographer/Photographer.js +0 -102
- package/lib/stage/crew/photographer/Photographer.js.map +0 -1
- package/lib/stage/crew/photographer/index.d.ts +0 -2
- package/lib/stage/crew/photographer/index.js +0 -15
- package/lib/stage/crew/photographer/index.js.map +0 -1
- package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.d.ts +0 -28
- package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js +0 -65
- package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js.map +0 -1
- package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.d.ts +0 -18
- package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.js +0 -30
- package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.js.map +0 -1
- package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.d.ts +0 -17
- package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.js +0 -28
- package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.js.map +0 -1
- package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.d.ts +0 -19
- package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.js +0 -28
- package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.js.map +0 -1
- package/lib/stage/crew/photographer/strategies/index.d.ts +0 -4
- package/lib/stage/crew/photographer/strategies/index.js +0 -17
- package/lib/stage/crew/photographer/strategies/index.js.map +0 -1
- package/lib/stage/index.d.ts +0 -1
- package/lib/stage/index.js +0 -14
- package/lib/stage/index.js.map +0 -1
- package/src/expectations/ElementFinderExpectation.ts +0 -29
- package/src/expectations/index.ts +0 -6
- package/src/expectations/isActive.ts +0 -24
- package/src/expectations/isClickable.ts +0 -20
- package/src/expectations/isEnabled.ts +0 -18
- package/src/expectations/isPresent.ts +0 -19
- package/src/expectations/isSelected.ts +0 -23
- package/src/expectations/isVisible.ts +0 -27
- package/src/screenplay/interactions/Accept.ts +0 -95
- package/src/screenplay/interactions/Clear.ts +0 -130
- package/src/screenplay/interactions/Click.ts +0 -96
- package/src/screenplay/interactions/Close.ts +0 -184
- package/src/screenplay/interactions/DeleteCookies.ts +0 -154
- package/src/screenplay/interactions/Dismiss.ts +0 -99
- package/src/screenplay/interactions/DoubleClick.ts +0 -124
- package/src/screenplay/interactions/Enter.ts +0 -104
- package/src/screenplay/interactions/EnterBuilder.ts +0 -29
- package/src/screenplay/interactions/ExecuteScript.ts +0 -325
- package/src/screenplay/interactions/Hover.ts +0 -106
- package/src/screenplay/interactions/Navigate.ts +0 -363
- package/src/screenplay/interactions/Press.ts +0 -137
- package/src/screenplay/interactions/PressBuilder.ts +0 -29
- package/src/screenplay/interactions/ResizeBrowserWindow.ts +0 -148
- package/src/screenplay/interactions/RightClick.ts +0 -114
- package/src/screenplay/interactions/Scroll.ts +0 -99
- package/src/screenplay/interactions/Select.ts +0 -402
- package/src/screenplay/interactions/SelectBuilder.ts +0 -35
- package/src/screenplay/interactions/Switch.ts +0 -393
- package/src/screenplay/interactions/TakeScreenshot.ts +0 -89
- package/src/screenplay/interactions/Wait.ts +0 -267
- package/src/screenplay/interactions/WaitBuilder.ts +0 -35
- package/src/screenplay/questions/Attribute.ts +0 -67
- package/src/screenplay/questions/Browser.ts +0 -55
- package/src/screenplay/questions/CSSClasses.ts +0 -121
- package/src/screenplay/questions/Cookie.ts +0 -70
- package/src/screenplay/questions/LastScriptExecution.ts +0 -21
- package/src/screenplay/questions/ModalDialog.ts +0 -149
- package/src/screenplay/questions/Pick.ts +0 -334
- package/src/screenplay/questions/Selected.ts +0 -268
- package/src/screenplay/questions/Value.ts +0 -73
- package/src/screenplay/questions/Website.ts +0 -27
- package/src/screenplay/questions/Window.ts +0 -29
- package/src/screenplay/questions/lists/ElementArrayFinderListAdapter.ts +0 -158
- package/src/screenplay/questions/lists/index.ts +0 -1
- package/src/screenplay/questions/targets/Target.ts +0 -198
- package/src/screenplay/questions/targets/TargetElement.ts +0 -70
- package/src/screenplay/questions/targets/TargetElements.ts +0 -142
- package/src/screenplay/questions/targets/TargetNestedElement.ts +0 -71
- package/src/screenplay/questions/targets/TargetNestedElements.ts +0 -142
- package/src/screenplay/questions/targets/builders.ts +0 -10
- package/src/screenplay/questions/targets/index.ts +0 -5
- package/src/screenplay/questions/targets/override.ts +0 -17
- package/src/screenplay/questions/text/Text.ts +0 -55
- package/src/screenplay/questions/text/TextOfMultipleElements.ts +0 -40
- package/src/screenplay/questions/text/TextOfSingleElement.ts +0 -37
- package/src/screenplay/questions/text/index.ts +0 -1
- package/src/screenplay/withAnswerOf.ts +0 -19
- package/src/stage/crew/index.ts +0 -1
- package/src/stage/crew/photographer/Photographer.ts +0 -108
- package/src/stage/crew/photographer/index.ts +0 -2
- package/src/stage/crew/photographer/strategies/PhotoTakingStrategy.ts +0 -102
- package/src/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.ts +0 -28
- package/src/stage/crew/photographer/strategies/TakePhotosOfFailures.ts +0 -26
- package/src/stage/crew/photographer/strategies/TakePhotosOfInteractions.ts +0 -26
- package/src/stage/crew/photographer/strategies/index.ts +0 -4
- package/src/stage/index.ts +0 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
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 {
|
|
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
|
|
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 {
|
|
45
|
+
* @returns {BrowseTheWebWithProtractor}
|
|
54
46
|
*/
|
|
55
|
-
static using(browser: ProtractorBrowser):
|
|
56
|
-
return new
|
|
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
|
|
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 {
|
|
57
|
+
* @return {BrowseTheWebWithProtractor}
|
|
66
58
|
*/
|
|
67
|
-
static as(actor: UsesAbilities):
|
|
68
|
-
return actor.abilityTo(
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
122
|
-
|
|
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
|
-
|
|
108
|
+
findByCss(selector: string): PageElement<any, any> {
|
|
109
|
+
return this.find(root => root.element(by.css(selector)));
|
|
136
110
|
}
|
|
137
111
|
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
220
|
-
|
|
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
|
-
|
|
227
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
*
|
|
220
|
+
* Navigate to the given destination and loads mock modules before Angular.
|
|
221
|
+
* Assumes that the page being loaded uses Angular.
|
|
249
222
|
*
|
|
250
|
-
* @
|
|
251
|
-
*
|
|
223
|
+
* @param {string} destination
|
|
224
|
+
* @param {number?} timeoutInMillis
|
|
252
225
|
*
|
|
253
|
-
* @
|
|
226
|
+
* @returns {Promise<void>}
|
|
254
227
|
*/
|
|
255
|
-
|
|
256
|
-
return
|
|
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
|
-
*
|
|
262
|
-
*
|
|
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
|
-
* @
|
|
265
|
-
* A window handle
|
|
238
|
+
* @param {number | string | WebElement} elementOrIndexOrName
|
|
266
239
|
*
|
|
267
|
-
* @
|
|
240
|
+
* @returns {Promise<void>}
|
|
268
241
|
*/
|
|
269
|
-
|
|
270
|
-
|
|
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
|
-
*
|
|
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<
|
|
282
|
-
* A list of window handles
|
|
259
|
+
* @returns {Promise<void>}
|
|
283
260
|
*/
|
|
284
|
-
|
|
285
|
-
return
|
|
261
|
+
switchToParentFrame(): Promise<void> {
|
|
262
|
+
return promised(this.browser.driver.switchToParentFrame());
|
|
286
263
|
}
|
|
287
264
|
|
|
288
265
|
/**
|
|
289
266
|
* @desc
|
|
290
|
-
*
|
|
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
|
-
|
|
295
|
-
return
|
|
273
|
+
switchToDefaultContent(): Promise<void> {
|
|
274
|
+
return promised(this.browser.switchTo().defaultContent());
|
|
296
275
|
}
|
|
297
276
|
|
|
298
277
|
/**
|
|
299
278
|
* @desc
|
|
300
|
-
*
|
|
279
|
+
* Returns a {@link Page} representing the currently active top-level browsing context.
|
|
301
280
|
*
|
|
302
|
-
* @
|
|
303
|
-
* @returns {ElementFinder}
|
|
281
|
+
* @returns {Promise<Page>}
|
|
304
282
|
*/
|
|
305
|
-
|
|
306
|
-
|
|
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
|
-
*
|
|
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
|
-
* @
|
|
314
|
-
* @returns {ElementArrayFinder}
|
|
295
|
+
* @returns {Promise<Array<Page>>}
|
|
315
296
|
*/
|
|
316
|
-
|
|
317
|
-
|
|
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
|
|
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
|
|
392
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
467
|
-
|
|
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
|
|
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
|
-
|
|
526
|
-
return
|
|
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
|
|
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
|
|
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
|
|
555
|
-
* or {@link
|
|
525
|
+
* Returns the last result of calling {@link BrowseTheWebWithProtractor#executeAsyncScript}
|
|
526
|
+
* or {@link BrowseTheWebWithProtractor#executeScript}
|
|
556
527
|
*
|
|
557
528
|
* @returns {any}
|
|
558
529
|
*/
|
|
559
|
-
|
|
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
|
-
|
|
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 './
|
|
1
|
+
export * from './BrowseTheWebWithProtractor';
|
package/src/screenplay/index.ts
CHANGED