@serenity-js/webdriverio 3.1.6 → 3.2.1
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 +26 -0
- package/README.md +91 -41
- package/esm/adapter/TestRunnerLoader.d.ts +16 -0
- package/esm/adapter/TestRunnerLoader.d.ts.map +1 -0
- package/esm/adapter/TestRunnerLoader.js +58 -0
- package/esm/adapter/TestRunnerLoader.js.map +1 -0
- package/esm/adapter/WebdriverIOFrameworkAdapter.d.ts +24 -0
- package/esm/adapter/WebdriverIOFrameworkAdapter.d.ts.map +1 -0
- package/esm/adapter/WebdriverIOFrameworkAdapter.js +77 -0
- package/esm/adapter/WebdriverIOFrameworkAdapter.js.map +1 -0
- package/esm/adapter/WebdriverIOFrameworkAdapterFactory.d.ts +19 -0
- package/esm/adapter/WebdriverIOFrameworkAdapterFactory.d.ts.map +1 -0
- package/esm/adapter/WebdriverIOFrameworkAdapterFactory.js +15 -0
- package/esm/adapter/WebdriverIOFrameworkAdapterFactory.js.map +1 -0
- package/esm/adapter/WebdriverIONotifier.d.ts +72 -0
- package/esm/adapter/WebdriverIONotifier.d.ts.map +1 -0
- package/esm/adapter/WebdriverIONotifier.js +385 -0
- package/esm/adapter/WebdriverIONotifier.js.map +1 -0
- package/esm/adapter/index.d.ts +2 -0
- package/esm/adapter/index.d.ts.map +1 -0
- package/esm/adapter/index.js +2 -0
- package/esm/adapter/index.js.map +1 -0
- package/esm/adapter/reporter/BrowserCapabilitiesReporter.d.ts +18 -0
- package/esm/adapter/reporter/BrowserCapabilitiesReporter.d.ts.map +1 -0
- package/esm/adapter/reporter/BrowserCapabilitiesReporter.js +41 -0
- package/esm/adapter/reporter/BrowserCapabilitiesReporter.js.map +1 -0
- package/esm/adapter/reporter/InitialisesReporters.d.ts +8 -0
- package/esm/adapter/reporter/InitialisesReporters.d.ts.map +1 -0
- package/esm/adapter/reporter/InitialisesReporters.js +2 -0
- package/esm/adapter/reporter/InitialisesReporters.js.map +1 -0
- package/esm/adapter/reporter/OutputStreamBuffer.d.ts +13 -0
- package/esm/adapter/reporter/OutputStreamBuffer.d.ts.map +1 -0
- package/esm/adapter/reporter/OutputStreamBuffer.js +24 -0
- package/esm/adapter/reporter/OutputStreamBuffer.js.map +1 -0
- package/esm/adapter/reporter/OutputStreamBufferPrinter.d.ts +16 -0
- package/esm/adapter/reporter/OutputStreamBufferPrinter.d.ts.map +1 -0
- package/esm/adapter/reporter/OutputStreamBufferPrinter.js +21 -0
- package/esm/adapter/reporter/OutputStreamBufferPrinter.js.map +1 -0
- package/esm/adapter/reporter/ProvidesWriteStream.d.ts +8 -0
- package/esm/adapter/reporter/ProvidesWriteStream.d.ts.map +1 -0
- package/esm/adapter/reporter/ProvidesWriteStream.js +2 -0
- package/esm/adapter/reporter/ProvidesWriteStream.js.map +1 -0
- package/esm/adapter/reporter/TagPrinter.d.ts +17 -0
- package/esm/adapter/reporter/TagPrinter.d.ts.map +1 -0
- package/esm/adapter/reporter/TagPrinter.js +52 -0
- package/esm/adapter/reporter/TagPrinter.js.map +1 -0
- package/esm/adapter/reporter/index.d.ts +6 -0
- package/esm/adapter/reporter/index.d.ts.map +1 -0
- package/esm/adapter/reporter/index.js +6 -0
- package/esm/adapter/reporter/index.js.map +1 -0
- package/esm/api.d.ts +3 -0
- package/esm/api.d.ts.map +1 -0
- package/esm/api.js +2 -0
- package/esm/api.js.map +1 -0
- package/esm/config/WebdriverIOConfig.d.ts.map +1 -0
- package/esm/config/WebdriverIOConfig.js +2 -0
- package/esm/config/WebdriverIOConfig.js.map +1 -0
- package/esm/config/index.d.ts +2 -0
- package/esm/config/index.d.ts.map +1 -0
- package/esm/config/index.js +2 -0
- package/esm/config/index.js.map +1 -0
- package/esm/index.d.ts +16 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +14 -0
- package/esm/index.js.map +1 -0
- package/esm/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts +42 -0
- package/esm/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts.map +1 -0
- package/esm/screenplay/abilities/BrowseTheWebWithWebdriverIO.js +48 -0
- package/esm/screenplay/abilities/BrowseTheWebWithWebdriverIO.js.map +1 -0
- package/esm/screenplay/abilities/index.d.ts +2 -0
- package/esm/screenplay/abilities/index.d.ts.map +1 -0
- package/esm/screenplay/abilities/index.js +2 -0
- package/esm/screenplay/abilities/index.js.map +1 -0
- package/esm/screenplay/index.d.ts +3 -0
- package/esm/screenplay/index.d.ts.map +1 -0
- package/esm/screenplay/index.js +3 -0
- package/esm/screenplay/index.js.map +1 -0
- package/esm/screenplay/models/WebdriverIOBrowsingSession.d.ts +24 -0
- package/esm/screenplay/models/WebdriverIOBrowsingSession.d.ts.map +1 -0
- package/esm/screenplay/models/WebdriverIOBrowsingSession.js +121 -0
- package/esm/screenplay/models/WebdriverIOBrowsingSession.js.map +1 -0
- package/esm/screenplay/models/WebdriverIOCookie.d.ts +14 -0
- package/esm/screenplay/models/WebdriverIOCookie.d.ts.map +1 -0
- package/esm/screenplay/models/WebdriverIOCookie.js +40 -0
- package/esm/screenplay/models/WebdriverIOCookie.js.map +1 -0
- package/esm/screenplay/models/WebdriverIOErrorHandler.d.ts +9 -0
- package/esm/screenplay/models/WebdriverIOErrorHandler.d.ts.map +1 -0
- package/esm/screenplay/models/WebdriverIOErrorHandler.js +19 -0
- package/esm/screenplay/models/WebdriverIOErrorHandler.js.map +1 -0
- package/esm/screenplay/models/WebdriverIOModalDialogHandler.d.ts +29 -0
- package/esm/screenplay/models/WebdriverIOModalDialogHandler.d.ts.map +1 -0
- package/esm/screenplay/models/WebdriverIOModalDialogHandler.js +73 -0
- package/esm/screenplay/models/WebdriverIOModalDialogHandler.js.map +1 -0
- package/esm/screenplay/models/WebdriverIOPage.d.ts +48 -0
- package/esm/screenplay/models/WebdriverIOPage.d.ts.map +1 -0
- package/esm/screenplay/models/WebdriverIOPage.js +203 -0
- package/esm/screenplay/models/WebdriverIOPage.js.map +1 -0
- package/esm/screenplay/models/WebdriverIOPageElement.d.ts +31 -0
- package/esm/screenplay/models/WebdriverIOPageElement.d.ts.map +1 -0
- package/esm/screenplay/models/WebdriverIOPageElement.js +205 -0
- package/esm/screenplay/models/WebdriverIOPageElement.js.map +1 -0
- package/esm/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.d.ts +32 -0
- package/esm/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.d.ts.map +1 -0
- package/esm/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.js +78 -0
- package/esm/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.js.map +1 -0
- package/esm/screenplay/models/WebdriverProtocolErrorCode.d.ts +39 -0
- package/esm/screenplay/models/WebdriverProtocolErrorCode.d.ts.map +1 -0
- package/esm/screenplay/models/WebdriverProtocolErrorCode.js +40 -0
- package/esm/screenplay/models/WebdriverProtocolErrorCode.js.map +1 -0
- package/esm/screenplay/models/index.d.ts +5 -0
- package/esm/screenplay/models/index.d.ts.map +1 -0
- package/esm/screenplay/models/index.js +5 -0
- package/esm/screenplay/models/index.js.map +1 -0
- package/esm/screenplay/models/locators/WebdriverIOLocator.d.ts +22 -0
- package/esm/screenplay/models/locators/WebdriverIOLocator.d.ts.map +1 -0
- package/esm/screenplay/models/locators/WebdriverIOLocator.js +97 -0
- package/esm/screenplay/models/locators/WebdriverIOLocator.js.map +1 -0
- package/esm/screenplay/models/locators/WebdriverIORootLocator.d.ts +17 -0
- package/esm/screenplay/models/locators/WebdriverIORootLocator.d.ts.map +1 -0
- package/esm/screenplay/models/locators/WebdriverIORootLocator.js +28 -0
- package/esm/screenplay/models/locators/WebdriverIORootLocator.js.map +1 -0
- package/esm/screenplay/models/locators/index.d.ts +3 -0
- package/esm/screenplay/models/locators/index.d.ts.map +1 -0
- package/esm/screenplay/models/locators/index.js +3 -0
- package/esm/screenplay/models/locators/index.js.map +1 -0
- package/lib/adapter/TestRunnerLoader.d.ts +3 -3
- package/lib/adapter/TestRunnerLoader.d.ts.map +1 -1
- package/lib/adapter/TestRunnerLoader.js +8 -8
- package/lib/adapter/TestRunnerLoader.js.map +1 -1
- package/lib/adapter/WebdriverIOFrameworkAdapter.d.ts +5 -4
- package/lib/adapter/WebdriverIOFrameworkAdapter.d.ts.map +1 -1
- package/lib/adapter/WebdriverIOFrameworkAdapter.js +51 -21
- package/lib/adapter/WebdriverIOFrameworkAdapter.js.map +1 -1
- package/lib/adapter/WebdriverIOFrameworkAdapterFactory.d.ts +5 -5
- package/lib/adapter/WebdriverIOFrameworkAdapterFactory.d.ts.map +1 -1
- package/lib/adapter/WebdriverIOFrameworkAdapterFactory.js +2 -2
- package/lib/adapter/WebdriverIOFrameworkAdapterFactory.js.map +1 -1
- package/lib/adapter/WebdriverIONotifier.d.ts +6 -6
- package/lib/adapter/WebdriverIONotifier.d.ts.map +1 -1
- package/lib/adapter/WebdriverIONotifier.js +48 -24
- package/lib/adapter/WebdriverIONotifier.js.map +1 -1
- package/lib/adapter/index.d.ts +1 -2
- package/lib/adapter/index.d.ts.map +1 -1
- package/lib/adapter/index.js +1 -2
- package/lib/adapter/index.js.map +1 -1
- package/lib/adapter/reporter/BrowserCapabilitiesReporter.d.ts +1 -1
- package/lib/adapter/reporter/BrowserCapabilitiesReporter.d.ts.map +1 -1
- package/lib/adapter/reporter/BrowserCapabilitiesReporter.js +4 -4
- package/lib/adapter/reporter/BrowserCapabilitiesReporter.js.map +1 -1
- package/lib/adapter/reporter/InitialisesReporters.d.ts +2 -2
- package/lib/adapter/reporter/InitialisesReporters.d.ts.map +1 -1
- package/lib/adapter/reporter/OutputStreamBuffer.d.ts +1 -1
- package/lib/adapter/reporter/OutputStreamBuffer.d.ts.map +1 -1
- package/lib/adapter/reporter/OutputStreamBufferPrinter.d.ts +3 -3
- package/lib/adapter/reporter/OutputStreamBufferPrinter.d.ts.map +1 -1
- package/lib/adapter/reporter/OutputStreamBufferPrinter.js +2 -2
- package/lib/adapter/reporter/OutputStreamBufferPrinter.js.map +1 -1
- package/lib/adapter/reporter/ProvidesWriteStream.d.ts +1 -1
- package/lib/adapter/reporter/ProvidesWriteStream.d.ts.map +1 -1
- package/lib/adapter/reporter/TagPrinter.d.ts +2 -2
- package/lib/adapter/reporter/TagPrinter.d.ts.map +1 -1
- package/lib/adapter/reporter/TagPrinter.js +7 -5
- package/lib/adapter/reporter/TagPrinter.js.map +1 -1
- package/lib/adapter/reporter/index.d.ts +5 -5
- package/lib/adapter/reporter/index.d.ts.map +1 -1
- package/lib/adapter/reporter/index.js +5 -5
- package/lib/adapter/reporter/index.js.map +1 -1
- package/lib/api.d.ts +3 -0
- package/lib/api.d.ts.map +1 -0
- package/lib/api.js +18 -0
- package/lib/api.js.map +1 -0
- package/lib/config/WebdriverIOConfig.d.ts +128 -0
- package/lib/config/WebdriverIOConfig.d.ts.map +1 -0
- package/lib/config/WebdriverIOConfig.js.map +1 -0
- package/lib/config/index.d.ts +2 -0
- package/lib/config/index.d.ts.map +1 -0
- package/lib/config/index.js +18 -0
- package/lib/config/index.js.map +1 -0
- package/lib/index.d.ts +15 -5
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +12 -5
- package/lib/index.js.map +1 -1
- package/lib/package.json +1 -0
- package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts +5 -5
- package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts.map +1 -1
- package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.js +2 -2
- package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.js.map +1 -1
- package/lib/screenplay/abilities/index.d.ts +1 -1
- package/lib/screenplay/abilities/index.d.ts.map +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 +2 -2
- package/lib/screenplay/index.d.ts.map +1 -1
- package/lib/screenplay/index.js +2 -2
- package/lib/screenplay/index.js.map +1 -1
- package/lib/screenplay/models/WebdriverIOBrowsingSession.d.ts +4 -4
- package/lib/screenplay/models/WebdriverIOBrowsingSession.d.ts.map +1 -1
- package/lib/screenplay/models/WebdriverIOBrowsingSession.js +12 -12
- package/lib/screenplay/models/WebdriverIOBrowsingSession.js.map +1 -1
- package/lib/screenplay/models/WebdriverIOCookie.d.ts +2 -2
- package/lib/screenplay/models/WebdriverIOCookie.d.ts.map +1 -1
- package/lib/screenplay/models/WebdriverIOCookie.js.map +1 -1
- package/lib/screenplay/models/WebdriverIOErrorHandler.d.ts +1 -1
- package/lib/screenplay/models/WebdriverIOErrorHandler.d.ts.map +1 -1
- package/lib/screenplay/models/WebdriverIOModalDialogHandler.d.ts +3 -3
- package/lib/screenplay/models/WebdriverIOModalDialogHandler.d.ts.map +1 -1
- package/lib/screenplay/models/WebdriverIOModalDialogHandler.js +3 -3
- package/lib/screenplay/models/WebdriverIOModalDialogHandler.js.map +1 -1
- package/lib/screenplay/models/WebdriverIOPage.d.ts +9 -9
- package/lib/screenplay/models/WebdriverIOPage.d.ts.map +1 -1
- package/lib/screenplay/models/WebdriverIOPage.js +9 -12
- package/lib/screenplay/models/WebdriverIOPage.js.map +1 -1
- package/lib/screenplay/models/WebdriverIOPageElement.d.ts +2 -2
- package/lib/screenplay/models/WebdriverIOPageElement.d.ts.map +1 -1
- package/lib/screenplay/models/WebdriverIOPageElement.js +16 -15
- package/lib/screenplay/models/WebdriverIOPageElement.js.map +1 -1
- package/lib/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.d.ts +1 -1
- package/lib/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.d.ts.map +1 -1
- package/lib/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.js.map +1 -1
- package/lib/screenplay/models/index.d.ts +4 -4
- package/lib/screenplay/models/index.d.ts.map +1 -1
- package/lib/screenplay/models/index.js +4 -4
- package/lib/screenplay/models/index.js.map +1 -1
- package/lib/screenplay/models/locators/WebdriverIOLocator.d.ts +10 -10
- package/lib/screenplay/models/locators/WebdriverIOLocator.d.ts.map +1 -1
- package/lib/screenplay/models/locators/WebdriverIOLocator.js +3 -3
- package/lib/screenplay/models/locators/WebdriverIOLocator.js.map +1 -1
- package/lib/screenplay/models/locators/WebdriverIORootLocator.d.ts +5 -5
- package/lib/screenplay/models/locators/WebdriverIORootLocator.d.ts.map +1 -1
- package/lib/screenplay/models/locators/WebdriverIORootLocator.js.map +1 -1
- package/lib/screenplay/models/locators/index.d.ts +2 -2
- package/lib/screenplay/models/locators/index.d.ts.map +1 -1
- package/lib/screenplay/models/locators/index.js +2 -2
- package/lib/screenplay/models/locators/index.js.map +1 -1
- package/package.json +40 -43
- package/src/adapter/TestRunnerLoader.ts +15 -10
- package/src/adapter/WebdriverIOFrameworkAdapter.ts +39 -26
- package/src/adapter/WebdriverIOFrameworkAdapterFactory.ts +4 -4
- package/src/adapter/WebdriverIONotifier.ts +37 -14
- package/src/adapter/index.ts +1 -2
- package/src/adapter/reporter/BrowserCapabilitiesReporter.ts +4 -4
- package/src/adapter/reporter/InitialisesReporters.ts +2 -2
- package/src/adapter/reporter/OutputStreamBuffer.ts +1 -1
- package/src/adapter/reporter/OutputStreamBufferPrinter.ts +3 -3
- package/src/adapter/reporter/ProvidesWriteStream.ts +1 -1
- package/src/adapter/reporter/TagPrinter.ts +6 -4
- package/src/adapter/reporter/index.ts +5 -5
- package/src/api.ts +2 -0
- package/src/config/index.ts +1 -0
- package/src/index.ts +27 -10
- package/src/screenplay/abilities/BrowseTheWebWithWebdriverIO.ts +5 -5
- package/src/screenplay/abilities/index.ts +1 -1
- package/src/screenplay/index.ts +2 -2
- package/src/screenplay/models/WebdriverIOBrowsingSession.ts +8 -8
- package/src/screenplay/models/WebdriverIOCookie.ts +2 -2
- package/src/screenplay/models/WebdriverIOErrorHandler.ts +1 -1
- package/src/screenplay/models/WebdriverIOModalDialogHandler.ts +4 -4
- package/src/screenplay/models/WebdriverIOPage.ts +11 -15
- package/src/screenplay/models/WebdriverIOPageElement.ts +21 -21
- package/src/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.ts +8 -3
- package/src/screenplay/models/index.ts +4 -4
- package/src/screenplay/models/locators/WebdriverIOLocator.ts +17 -17
- package/src/screenplay/models/locators/WebdriverIORootLocator.ts +5 -5
- package/src/screenplay/models/locators/index.ts +2 -2
- package/lib/adapter/WebdriverIOConfig.d.ts.map +0 -1
- package/lib/adapter/WebdriverIOConfig.js.map +0 -1
- package/tsconfig.build.json +0 -17
- /package/{lib/adapter → esm/config}/WebdriverIOConfig.d.ts +0 -0
- /package/lib/{adapter → config}/WebdriverIOConfig.js +0 -0
- /package/src/{adapter → config}/WebdriverIOConfig.ts +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { AbsentModalDialog, AcceptedModalDialog, DismissedModalDialog, ModalDialogHandler } from '@serenity-js/web';
|
|
2
|
+
import { WebdriverProtocolErrorCode } from './WebdriverProtocolErrorCode.js';
|
|
3
|
+
/**
|
|
4
|
+
* WebdriverIO-specific implementation of {@apilink ModalDialogHandler},
|
|
5
|
+
* used with the [WebDriver protocol](https://webdriver.io/docs/api/webdriver).
|
|
6
|
+
*
|
|
7
|
+
* ## Learn more
|
|
8
|
+
* - {@apilink WebdriverIOPuppeteerModalDialogHandler}
|
|
9
|
+
*
|
|
10
|
+
* @group Models
|
|
11
|
+
*/
|
|
12
|
+
export class WebdriverIOModalDialogHandler extends ModalDialogHandler {
|
|
13
|
+
constructor(browser, errorHandler) {
|
|
14
|
+
super();
|
|
15
|
+
this.browser = browser;
|
|
16
|
+
this.errorHandler = errorHandler;
|
|
17
|
+
this.defaultHandler = async () => {
|
|
18
|
+
const message = await this.browser.getAlertText();
|
|
19
|
+
await this.browser.dismissAlert();
|
|
20
|
+
this.modalDialog = new DismissedModalDialog(message);
|
|
21
|
+
};
|
|
22
|
+
this.currentHandler = this.defaultHandler;
|
|
23
|
+
this.errorHandler.setHandlerFor(WebdriverProtocolErrorCode.UnexpectedAlertOpenError, error_ => this.tryToHandleDialog());
|
|
24
|
+
}
|
|
25
|
+
async tryToHandleDialog() {
|
|
26
|
+
try {
|
|
27
|
+
await this.currentHandler();
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (error.name === WebdriverProtocolErrorCode.NoSuchAlertError) {
|
|
31
|
+
this.modalDialog = new AbsentModalDialog();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async acceptNext() {
|
|
38
|
+
this.currentHandler = async () => {
|
|
39
|
+
const message = await this.browser.getAlertText();
|
|
40
|
+
await this.browser.acceptAlert();
|
|
41
|
+
this.modalDialog = new AcceptedModalDialog(message);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async acceptNextWithValue(text) {
|
|
45
|
+
this.currentHandler = async () => {
|
|
46
|
+
await this.browser.sendAlertText(String(text));
|
|
47
|
+
const message = await this.browser.getAlertText();
|
|
48
|
+
await this.browser.acceptAlert();
|
|
49
|
+
this.modalDialog = new AcceptedModalDialog(message);
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
async dismissNext() {
|
|
53
|
+
this.currentHandler = async () => {
|
|
54
|
+
const message = await this.browser.getAlertText();
|
|
55
|
+
await this.browser.dismissAlert();
|
|
56
|
+
this.modalDialog = new DismissedModalDialog(message);
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async reset() {
|
|
60
|
+
this.modalDialog = new AbsentModalDialog();
|
|
61
|
+
this.currentHandler = this.defaultHandler;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* @override
|
|
65
|
+
*/
|
|
66
|
+
async last() {
|
|
67
|
+
if (this.modalDialog instanceof AbsentModalDialog) {
|
|
68
|
+
await this.tryToHandleDialog();
|
|
69
|
+
}
|
|
70
|
+
return this.modalDialog;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=WebdriverIOModalDialogHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebdriverIOModalDialogHandler.js","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOModalDialogHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { CorrelationId } from '@serenity-js/core/lib/model/index.js';
|
|
3
|
+
import { Cookie, CookieData, Key, ModalDialogHandler, Page, PageElement, PageElements, Selector } from '@serenity-js/web';
|
|
4
|
+
import { URL } from 'url';
|
|
5
|
+
import type { Browser, Element } from 'webdriverio';
|
|
6
|
+
import { WebdriverIOBrowsingSession } from './WebdriverIOBrowsingSession.js';
|
|
7
|
+
import { WebdriverIOErrorHandler } from './WebdriverIOErrorHandler.js';
|
|
8
|
+
/**
|
|
9
|
+
* WebdriverIO-specific implementation of {@apilink Page}.
|
|
10
|
+
*
|
|
11
|
+
* @group Models
|
|
12
|
+
*/
|
|
13
|
+
export declare class WebdriverIOPage extends Page<Element> {
|
|
14
|
+
private readonly browser;
|
|
15
|
+
private readonly errorHandler;
|
|
16
|
+
private lastScriptExecutionSummary;
|
|
17
|
+
constructor(session: WebdriverIOBrowsingSession, browser: Browser, modalDialogHandler: ModalDialogHandler, errorHandler: WebdriverIOErrorHandler, pageId: CorrelationId);
|
|
18
|
+
locate(selector: Selector): PageElement<Element>;
|
|
19
|
+
locateAll(selector: Selector): PageElements<Element>;
|
|
20
|
+
navigateTo(destination: string): Promise<void>;
|
|
21
|
+
navigateBack(): Promise<void>;
|
|
22
|
+
navigateForward(): Promise<void>;
|
|
23
|
+
reload(): Promise<void>;
|
|
24
|
+
sendKeys(keys: Array<Key | string>): Promise<void>;
|
|
25
|
+
executeScript<Result, InnerArguments extends any[]>(script: string | ((...parameters: InnerArguments) => Result), ...args: InnerArguments): Promise<Result>;
|
|
26
|
+
executeAsyncScript<Result, Parameters extends any[]>(script: string | ((...args: [...parameters: Parameters, callback: (result: Result) => void]) => void), ...args: Parameters): Promise<Result>;
|
|
27
|
+
lastScriptExecutionResult<Result = any>(): Result;
|
|
28
|
+
takeScreenshot(): Promise<string>;
|
|
29
|
+
cookie(name: string): Promise<Cookie>;
|
|
30
|
+
setCookie(cookieData: CookieData): Promise<void>;
|
|
31
|
+
deleteAllCookies(): Promise<void>;
|
|
32
|
+
title(): Promise<string>;
|
|
33
|
+
name(): Promise<string>;
|
|
34
|
+
url(): Promise<URL>;
|
|
35
|
+
viewportSize(): Promise<{
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
}>;
|
|
39
|
+
setViewportSize(size: {
|
|
40
|
+
width: number;
|
|
41
|
+
height: number;
|
|
42
|
+
}): Promise<void>;
|
|
43
|
+
close(): Promise<void>;
|
|
44
|
+
closeOthers(): Promise<void>;
|
|
45
|
+
isPresent(): Promise<boolean>;
|
|
46
|
+
private inContextOfThisPage;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=WebdriverIOPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebdriverIOPage.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOPage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { LogicError } from '@serenity-js/core';
|
|
2
|
+
import { BrowserWindowClosedError, Key, Page, PageElements } from '@serenity-js/web';
|
|
3
|
+
import { URL } from 'url';
|
|
4
|
+
import { WebdriverIOLocator, WebdriverIORootLocator } from './locators/index.js';
|
|
5
|
+
import { WebdriverIOCookie } from './WebdriverIOCookie.js';
|
|
6
|
+
import { WebdriverIOPageElement } from './WebdriverIOPageElement.js';
|
|
7
|
+
/**
|
|
8
|
+
* WebdriverIO-specific implementation of {@apilink Page}.
|
|
9
|
+
*
|
|
10
|
+
* @group Models
|
|
11
|
+
*/
|
|
12
|
+
export class WebdriverIOPage extends Page {
|
|
13
|
+
constructor(session, browser, modalDialogHandler, errorHandler, pageId) {
|
|
14
|
+
super(session, new WebdriverIORootLocator(browser), modalDialogHandler, pageId);
|
|
15
|
+
this.browser = browser;
|
|
16
|
+
this.errorHandler = errorHandler;
|
|
17
|
+
}
|
|
18
|
+
locate(selector) {
|
|
19
|
+
return new WebdriverIOPageElement(new WebdriverIOLocator(this.rootLocator, selector, this.errorHandler));
|
|
20
|
+
}
|
|
21
|
+
locateAll(selector) {
|
|
22
|
+
return new PageElements(new WebdriverIOLocator(this.rootLocator, selector, this.errorHandler));
|
|
23
|
+
}
|
|
24
|
+
async navigateTo(destination) {
|
|
25
|
+
await this.inContextOfThisPage(() => this.browser.url(destination));
|
|
26
|
+
}
|
|
27
|
+
async navigateBack() {
|
|
28
|
+
await this.inContextOfThisPage(() => this.browser.back());
|
|
29
|
+
}
|
|
30
|
+
async navigateForward() {
|
|
31
|
+
await this.inContextOfThisPage(() => this.browser.forward());
|
|
32
|
+
}
|
|
33
|
+
async reload() {
|
|
34
|
+
await this.inContextOfThisPage(() => this.browser.refresh());
|
|
35
|
+
}
|
|
36
|
+
async sendKeys(keys) {
|
|
37
|
+
const keySequence = keys.map(key => {
|
|
38
|
+
if (!Key.isKey(key)) {
|
|
39
|
+
return key;
|
|
40
|
+
}
|
|
41
|
+
return key.utf16codePoint;
|
|
42
|
+
});
|
|
43
|
+
await this.inContextOfThisPage(() => this.browser.keys(keySequence));
|
|
44
|
+
}
|
|
45
|
+
async executeScript(script, ...args) {
|
|
46
|
+
const innerArguments = [];
|
|
47
|
+
for (const arg of args) {
|
|
48
|
+
const innerArgument = arg instanceof WebdriverIOPageElement
|
|
49
|
+
? await arg.nativeElement()
|
|
50
|
+
: arg;
|
|
51
|
+
innerArguments.push(innerArgument);
|
|
52
|
+
}
|
|
53
|
+
const result = await this.inContextOfThisPage(() => {
|
|
54
|
+
return this.browser.execute(script, ...innerArguments);
|
|
55
|
+
});
|
|
56
|
+
this.lastScriptExecutionSummary = new LastScriptExecutionSummary(result);
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
async executeAsyncScript(script, ...args) {
|
|
60
|
+
const parameters = [];
|
|
61
|
+
for (const arg of args) {
|
|
62
|
+
const parameter = arg instanceof WebdriverIOPageElement
|
|
63
|
+
? await arg.nativeElement()
|
|
64
|
+
: arg;
|
|
65
|
+
parameters.push(parameter);
|
|
66
|
+
}
|
|
67
|
+
const result = await this.inContextOfThisPage(() => {
|
|
68
|
+
return this.browser.executeAsync(script, ...parameters);
|
|
69
|
+
});
|
|
70
|
+
this.lastScriptExecutionSummary = new LastScriptExecutionSummary(result);
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
lastScriptExecutionResult() {
|
|
74
|
+
if (!this.lastScriptExecutionSummary) {
|
|
75
|
+
throw new LogicError(`Make sure to execute a script before checking on the result`);
|
|
76
|
+
}
|
|
77
|
+
// Selenium returns `null` when the script it executed returns `undefined`
|
|
78
|
+
// so we're mapping the result back.
|
|
79
|
+
return this.lastScriptExecutionSummary.result === null
|
|
80
|
+
? undefined
|
|
81
|
+
: this.lastScriptExecutionSummary.result;
|
|
82
|
+
}
|
|
83
|
+
async takeScreenshot() {
|
|
84
|
+
return await this.inContextOfThisPage(async () => {
|
|
85
|
+
try {
|
|
86
|
+
return await this.browser.takeScreenshot();
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
if (error.name === 'ProtocolError' && error.message.includes('Target closed')) {
|
|
90
|
+
throw new BrowserWindowClosedError(`Couldn't take screenshot since the browser window is already closed`, error);
|
|
91
|
+
}
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
async cookie(name) {
|
|
97
|
+
return new WebdriverIOCookie(this.browser, name);
|
|
98
|
+
}
|
|
99
|
+
async setCookie(cookieData) {
|
|
100
|
+
return await this.inContextOfThisPage(() => {
|
|
101
|
+
return this.browser.setCookies({
|
|
102
|
+
name: cookieData.name,
|
|
103
|
+
value: cookieData.value,
|
|
104
|
+
path: cookieData.path,
|
|
105
|
+
domain: cookieData.domain,
|
|
106
|
+
secure: cookieData.secure,
|
|
107
|
+
httpOnly: cookieData.httpOnly,
|
|
108
|
+
expiry: cookieData.expiry
|
|
109
|
+
? cookieData.expiry.toSeconds()
|
|
110
|
+
: undefined,
|
|
111
|
+
sameSite: cookieData.sameSite,
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
async deleteAllCookies() {
|
|
116
|
+
return await this.inContextOfThisPage(() => {
|
|
117
|
+
return this.browser.deleteCookies();
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
async title() {
|
|
121
|
+
return await this.inContextOfThisPage(() => this.browser.getTitle());
|
|
122
|
+
}
|
|
123
|
+
async name() {
|
|
124
|
+
return await this.inContextOfThisPage(() => this.browser.execute(`return window.name`));
|
|
125
|
+
}
|
|
126
|
+
async url() {
|
|
127
|
+
return await this.inContextOfThisPage(async () => {
|
|
128
|
+
return new URL(await this.browser.getUrl());
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
async viewportSize() {
|
|
132
|
+
return await this.inContextOfThisPage(async () => {
|
|
133
|
+
if (!this.browser.isDevTools) {
|
|
134
|
+
const calculatedViewportSize = await this.browser.execute(`
|
|
135
|
+
return {
|
|
136
|
+
width: Math.max(document.documentElement.clientWidth, window.innerWidth || 0),
|
|
137
|
+
height: Math.max(document.documentElement.clientHeight, window.innerHeight || 0),
|
|
138
|
+
}
|
|
139
|
+
`);
|
|
140
|
+
// Chrome headless hard-codes window.innerWidth and window.innerHeight to 0
|
|
141
|
+
if (calculatedViewportSize.width > 0 && calculatedViewportSize.height > 0) {
|
|
142
|
+
return calculatedViewportSize;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return this.browser.getWindowSize();
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
async setViewportSize(size) {
|
|
149
|
+
return await this.inContextOfThisPage(async () => {
|
|
150
|
+
let desiredWindowSize = size;
|
|
151
|
+
if (!this.browser.isDevTools) {
|
|
152
|
+
desiredWindowSize = await this.browser.execute(`
|
|
153
|
+
var currentViewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)
|
|
154
|
+
var currentViewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)
|
|
155
|
+
|
|
156
|
+
return {
|
|
157
|
+
width: Math.max(window.outerWidth - currentViewportWidth + ${size.width}, ${size.width}),
|
|
158
|
+
height: Math.max(window.outerHeight - currentViewportHeight + ${size.height}, ${size.height}),
|
|
159
|
+
};
|
|
160
|
+
`);
|
|
161
|
+
}
|
|
162
|
+
return this.browser.setWindowSize(desiredWindowSize.width, desiredWindowSize.height);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
async close() {
|
|
166
|
+
await this.inContextOfThisPage(() => this.browser.closeWindow());
|
|
167
|
+
}
|
|
168
|
+
async closeOthers() {
|
|
169
|
+
await this.session.closePagesOtherThan(this);
|
|
170
|
+
}
|
|
171
|
+
async isPresent() {
|
|
172
|
+
const allPages = await this.session.allPages();
|
|
173
|
+
for (const page of allPages) {
|
|
174
|
+
if (page === this) {
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
async inContextOfThisPage(action) {
|
|
181
|
+
let originalCurrentPage;
|
|
182
|
+
try {
|
|
183
|
+
originalCurrentPage = await this.session.currentPage();
|
|
184
|
+
await this.session.changeCurrentPageTo(this);
|
|
185
|
+
return await action();
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
return await this.errorHandler.executeIfHandled(error, action);
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
await this.session.changeCurrentPageTo(originalCurrentPage);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* @package
|
|
197
|
+
*/
|
|
198
|
+
class LastScriptExecutionSummary {
|
|
199
|
+
constructor(result) {
|
|
200
|
+
this.result = result;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=WebdriverIOPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebdriverIOPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOPage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { PageElement, SelectOption, SwitchableOrigin } from '@serenity-js/web';
|
|
2
|
+
import type { Element } from 'webdriverio';
|
|
3
|
+
/**
|
|
4
|
+
* WebdriverIO-specific implementation of {@apilink PageElement}.
|
|
5
|
+
*
|
|
6
|
+
* @group Models
|
|
7
|
+
*/
|
|
8
|
+
export declare class WebdriverIOPageElement extends PageElement<Element> {
|
|
9
|
+
of(parent: WebdriverIOPageElement): WebdriverIOPageElement;
|
|
10
|
+
clearValue(): Promise<void>;
|
|
11
|
+
click(): Promise<void>;
|
|
12
|
+
doubleClick(): Promise<void>;
|
|
13
|
+
enterValue(value: string | number | Array<string | number>): Promise<void>;
|
|
14
|
+
scrollIntoView(): Promise<void>;
|
|
15
|
+
hoverOver(): Promise<void>;
|
|
16
|
+
rightClick(): Promise<void>;
|
|
17
|
+
selectOptions(...options: SelectOption[]): Promise<void>;
|
|
18
|
+
selectedOptions(): Promise<SelectOption[]>;
|
|
19
|
+
attribute(name: string): Promise<string>;
|
|
20
|
+
text(): Promise<string>;
|
|
21
|
+
value(): Promise<string>;
|
|
22
|
+
switchTo(): Promise<SwitchableOrigin>;
|
|
23
|
+
isActive(): Promise<boolean>;
|
|
24
|
+
isClickable(): Promise<boolean>;
|
|
25
|
+
isEnabled(): Promise<boolean>;
|
|
26
|
+
isPresent(): Promise<boolean>;
|
|
27
|
+
isSelected(): Promise<boolean>;
|
|
28
|
+
isVisible(): Promise<boolean>;
|
|
29
|
+
private browserFor;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=WebdriverIOPageElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebdriverIOPageElement.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOPageElement.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,OAAO,KAAK,EAAW,OAAO,EAAE,MAAM,aAAa,CAAC;AAKpD;;;;GAIG;AACH,qBAAa,sBAAuB,SAAQ,WAAW,CAAC,OAAO,CAAC;IAC5D,EAAE,CAAC,MAAM,EAAE,sBAAsB,GAAG,sBAAsB;IAIpD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1E,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,aAAa,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxD,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IA4B1C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKxC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAKvB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAKxB,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAqDrC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAK5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAK7B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAK7B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAK9B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;YAgCrB,UAAU;CAM3B"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { LogicError } from '@serenity-js/core';
|
|
2
|
+
import { Key, PageElement, SelectOption } from '@serenity-js/web';
|
|
3
|
+
import * as scripts from '@serenity-js/web/lib/scripts/index.js';
|
|
4
|
+
import { WebdriverProtocolErrorCode } from './WebdriverProtocolErrorCode.js';
|
|
5
|
+
/**
|
|
6
|
+
* WebdriverIO-specific implementation of {@apilink PageElement}.
|
|
7
|
+
*
|
|
8
|
+
* @group Models
|
|
9
|
+
*/
|
|
10
|
+
export class WebdriverIOPageElement extends PageElement {
|
|
11
|
+
of(parent) {
|
|
12
|
+
return new WebdriverIOPageElement(this.locator.of(parent.locator));
|
|
13
|
+
}
|
|
14
|
+
async clearValue() {
|
|
15
|
+
// eslint-disable-next-line unicorn/consistent-function-scoping
|
|
16
|
+
function times(length, key) {
|
|
17
|
+
return Array.from({ length }).map(() => key);
|
|
18
|
+
}
|
|
19
|
+
// eslint-disable-next-line unicorn/consistent-function-scoping
|
|
20
|
+
async function removeCharactersFrom(browser, inputElement, numberOfCharacters) {
|
|
21
|
+
await browser.execute(
|
|
22
|
+
/* c8 ignore next */
|
|
23
|
+
function focusOn(element) {
|
|
24
|
+
element.focus();
|
|
25
|
+
}, element);
|
|
26
|
+
await browser.keys([
|
|
27
|
+
Key.Home.utf16codePoint,
|
|
28
|
+
...times(numberOfCharacters, Key.Delete.utf16codePoint),
|
|
29
|
+
]);
|
|
30
|
+
}
|
|
31
|
+
const element = await this.nativeElement();
|
|
32
|
+
const value = await this.value();
|
|
33
|
+
const hasValue = value !== null && value !== undefined && value.length > 0;
|
|
34
|
+
const browser = await this.browserFor(element);
|
|
35
|
+
if (hasValue) {
|
|
36
|
+
return await removeCharactersFrom(browser, element, value.length);
|
|
37
|
+
}
|
|
38
|
+
const contentEditable = await element.getAttribute('contenteditable');
|
|
39
|
+
const hasContentEditable = contentEditable !== null && contentEditable !== undefined && contentEditable !== 'false';
|
|
40
|
+
if (hasContentEditable) {
|
|
41
|
+
const text = await element.getText();
|
|
42
|
+
return await removeCharactersFrom(browser, element, text.length);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async click() {
|
|
46
|
+
const element = await this.nativeElement();
|
|
47
|
+
await element.click();
|
|
48
|
+
}
|
|
49
|
+
async doubleClick() {
|
|
50
|
+
const element = await this.nativeElement();
|
|
51
|
+
await element.doubleClick();
|
|
52
|
+
}
|
|
53
|
+
async enterValue(value) {
|
|
54
|
+
const text = Array.isArray(value) ? value.join('') : value;
|
|
55
|
+
const element = await this.nativeElement();
|
|
56
|
+
await element.addValue(text);
|
|
57
|
+
}
|
|
58
|
+
async scrollIntoView() {
|
|
59
|
+
const element = await this.nativeElement();
|
|
60
|
+
await element.scrollIntoView();
|
|
61
|
+
}
|
|
62
|
+
async hoverOver() {
|
|
63
|
+
const element = await this.nativeElement();
|
|
64
|
+
await element.moveTo();
|
|
65
|
+
}
|
|
66
|
+
async rightClick() {
|
|
67
|
+
const element = await this.nativeElement();
|
|
68
|
+
await element.click({ button: 'right' });
|
|
69
|
+
}
|
|
70
|
+
async selectOptions(...options) {
|
|
71
|
+
const element = await this.nativeElement();
|
|
72
|
+
for (const option of options) {
|
|
73
|
+
if (option.value) {
|
|
74
|
+
await element.selectByAttribute('value', option.value);
|
|
75
|
+
}
|
|
76
|
+
else if (option.label) {
|
|
77
|
+
await element.selectByVisibleText(option.label);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async selectedOptions() {
|
|
82
|
+
const element = await this.nativeElement();
|
|
83
|
+
const browser = await this.browserFor(element);
|
|
84
|
+
const options = await browser.execute(
|
|
85
|
+
/* c8 ignore start */
|
|
86
|
+
(select) => {
|
|
87
|
+
const options = [];
|
|
88
|
+
select.querySelectorAll('option').forEach((option) => {
|
|
89
|
+
options.push({
|
|
90
|
+
selected: option.selected,
|
|
91
|
+
disabled: option.disabled,
|
|
92
|
+
label: option.label,
|
|
93
|
+
value: option.value,
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
return options;
|
|
97
|
+
}, element
|
|
98
|
+
/* c8 ignore stop */
|
|
99
|
+
);
|
|
100
|
+
return options.map(option => new SelectOption(option.label, option.value, option.selected, option.disabled));
|
|
101
|
+
}
|
|
102
|
+
async attribute(name) {
|
|
103
|
+
const element = await this.nativeElement();
|
|
104
|
+
return await element.getAttribute(name);
|
|
105
|
+
}
|
|
106
|
+
async text() {
|
|
107
|
+
const element = await this.nativeElement();
|
|
108
|
+
return await element.getText();
|
|
109
|
+
}
|
|
110
|
+
async value() {
|
|
111
|
+
const element = await this.nativeElement();
|
|
112
|
+
return await element.getValue();
|
|
113
|
+
}
|
|
114
|
+
async switchTo() {
|
|
115
|
+
try {
|
|
116
|
+
const element = await this.locator.nativeElement();
|
|
117
|
+
if (element.error) {
|
|
118
|
+
throw element.error;
|
|
119
|
+
}
|
|
120
|
+
const tagName = await element.getTagName();
|
|
121
|
+
const browser = await this.browserFor(element);
|
|
122
|
+
if (['iframe', 'frame'].includes(tagName)) {
|
|
123
|
+
const locator = this.locator;
|
|
124
|
+
await locator.switchToFrame(element);
|
|
125
|
+
return {
|
|
126
|
+
switchBack: async () => {
|
|
127
|
+
await locator.switchToParentFrame();
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
// focus on element
|
|
133
|
+
const previouslyFocusedElement = await browser.execute(
|
|
134
|
+
/* c8 ignore next */
|
|
135
|
+
function focusOn(element) {
|
|
136
|
+
const currentlyFocusedElement = document.activeElement;
|
|
137
|
+
element.focus();
|
|
138
|
+
return currentlyFocusedElement;
|
|
139
|
+
}, element);
|
|
140
|
+
return {
|
|
141
|
+
switchBack: async () => {
|
|
142
|
+
await browser.execute(
|
|
143
|
+
/* c8 ignore next */
|
|
144
|
+
function focusOn(element) {
|
|
145
|
+
element.focus();
|
|
146
|
+
}, previouslyFocusedElement);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
throw new LogicError(`Couldn't switch to page element located ${this.locator}`, error);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async isActive() {
|
|
156
|
+
const element = await this.nativeElement();
|
|
157
|
+
return await element.isFocused();
|
|
158
|
+
}
|
|
159
|
+
async isClickable() {
|
|
160
|
+
const element = await this.nativeElement();
|
|
161
|
+
return await element.isClickable();
|
|
162
|
+
}
|
|
163
|
+
async isEnabled() {
|
|
164
|
+
const element = await this.nativeElement();
|
|
165
|
+
return await element.isEnabled();
|
|
166
|
+
}
|
|
167
|
+
async isPresent() {
|
|
168
|
+
const element = await this.nativeElement();
|
|
169
|
+
return await element.isExisting();
|
|
170
|
+
}
|
|
171
|
+
async isSelected() {
|
|
172
|
+
const element = await this.nativeElement();
|
|
173
|
+
return await element.isSelected();
|
|
174
|
+
}
|
|
175
|
+
async isVisible() {
|
|
176
|
+
try {
|
|
177
|
+
const element = await this.nativeElement();
|
|
178
|
+
if (!await element.isDisplayed()) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
if (!await element.isDisplayedInViewport()) {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
const browser = await this.browserFor(element);
|
|
185
|
+
return await browser.execute(scripts.isVisible, element);
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
// an element that doesn't exist is treated as not visible
|
|
189
|
+
if (error.name === WebdriverProtocolErrorCode.NoSuchElementError ||
|
|
190
|
+
error.error === WebdriverProtocolErrorCode.NoSuchElementError ||
|
|
191
|
+
/element.*not found/i.test(error.message)) {
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// based on https://github.com/webdriverio/webdriverio/blob/dec6da76b0e218af935dbf39735ae3491d5edd8c/packages/webdriverio/src/utils/index.ts#L98
|
|
198
|
+
async browserFor(nativeElement) {
|
|
199
|
+
const element = nativeElement;
|
|
200
|
+
return element.parent
|
|
201
|
+
? this.browserFor(element.parent)
|
|
202
|
+
: nativeElement;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=WebdriverIOPageElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebdriverIOPageElement.js","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOPageElement.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ModalDialog, ModalDialogHandler } from '@serenity-js/web';
|
|
2
|
+
import type { Page } from 'puppeteer-core';
|
|
3
|
+
/**
|
|
4
|
+
* WebdriverIO-specific implementation of {@apilink {ModalDialogHandler}, applicable when WebdriverIO
|
|
5
|
+
* uses [Puppeteer](https://developer.chrome.com/docs/puppeteer/).
|
|
6
|
+
*
|
|
7
|
+
* Automatically handles any simple JavaScript modal dialog windows, such as
|
|
8
|
+
* those opened by [`window.alert()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/alert),
|
|
9
|
+
* [`window.confirm()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/confirm),
|
|
10
|
+
* or [`window.prompt()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt).
|
|
11
|
+
*
|
|
12
|
+
* This helps to avoid Puppeteer hanging when there's an interaction pending
|
|
13
|
+
* and a dialog is already open, see https://github.com/puppeteer/puppeteer/issues/2481
|
|
14
|
+
*
|
|
15
|
+
* ## Learn more
|
|
16
|
+
* - {@apilink WebdriverIOModalDialogHandler}
|
|
17
|
+
*/
|
|
18
|
+
export declare class WebdriverIOPuppeteerModalDialogHandler extends ModalDialogHandler {
|
|
19
|
+
private readonly page;
|
|
20
|
+
private dialogHandlingInProgress;
|
|
21
|
+
private readonly defaultHandler;
|
|
22
|
+
private currentHandler;
|
|
23
|
+
constructor(page: Page);
|
|
24
|
+
acceptNext(): Promise<void>;
|
|
25
|
+
acceptNextWithValue(text: string | number): Promise<void>;
|
|
26
|
+
dismissNext(): Promise<void>;
|
|
27
|
+
reset(): Promise<void>;
|
|
28
|
+
discard(): Promise<void>;
|
|
29
|
+
last(): Promise<ModalDialog>;
|
|
30
|
+
private handleModalDialog;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=WebdriverIOPuppeteerModalDialogHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebdriverIOPuppeteerModalDialogHandler.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOPuppeteerModalDialogHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,WAAW,EACX,kBAAkB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAU,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,sCAAuC,SAAQ,kBAAkB;IAY9D,OAAO,CAAC,QAAQ,CAAC,IAAI;IAVjC,OAAO,CAAC,wBAAwB,CAAS;IAEzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAI1B;IAEL,OAAO,CAAC,cAAc,CAA2C;gBAEpC,IAAI,EAAE,IAAI;IAiBjC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;YAWpB,iBAAiB;CAOlC"}
|