@serenity-js/webdriverio 3.41.1 → 3.42.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 +24 -0
- package/esm/adapter/TestRunnerLoader.d.ts +3 -3
- package/esm/adapter/TestRunnerLoader.d.ts.map +1 -1
- package/esm/adapter/TestRunnerLoader.js +3 -3
- package/esm/adapter/TestRunnerLoader.js.map +1 -1
- package/esm/adapter/WebdriverIOFrameworkAdapter.d.ts +2 -2
- package/esm/adapter/WebdriverIOFrameworkAdapter.d.ts.map +1 -1
- package/esm/adapter/WebdriverIOFrameworkAdapter.js +1 -1
- package/esm/adapter/WebdriverIOFrameworkAdapter.js.map +1 -1
- package/esm/adapter/WebdriverIOFrameworkAdapterFactory.d.ts +1 -1
- package/esm/adapter/WebdriverIOFrameworkAdapterFactory.d.ts.map +1 -1
- package/esm/adapter/WebdriverIONotifier.d.ts +2 -2
- package/esm/adapter/WebdriverIONotifier.d.ts.map +1 -1
- package/esm/adapter/WebdriverIONotifier.js +2 -2
- package/esm/adapter/WebdriverIONotifier.js.map +1 -1
- package/esm/adapter/reporter/BrowserCapabilitiesReporter.js +1 -1
- package/esm/adapter/reporter/BrowserCapabilitiesReporter.js.map +1 -1
- package/esm/adapter/reporter/OutputStreamBuffer.d.ts +1 -1
- package/esm/adapter/reporter/OutputStreamBuffer.d.ts.map +1 -1
- package/esm/adapter/reporter/OutputStreamBufferPrinter.d.ts +2 -2
- package/esm/adapter/reporter/OutputStreamBufferPrinter.d.ts.map +1 -1
- package/esm/adapter/reporter/OutputStreamBufferPrinter.js +1 -1
- package/esm/adapter/reporter/OutputStreamBufferPrinter.js.map +1 -1
- package/esm/adapter/reporter/ProvidesWriteStream.d.ts +1 -1
- package/esm/adapter/reporter/ProvidesWriteStream.d.ts.map +1 -1
- package/esm/adapter/reporter/TagPrinter.d.ts +1 -1
- package/esm/adapter/reporter/TagPrinter.d.ts.map +1 -1
- package/esm/adapter/reporter/TagPrinter.js +1 -1
- package/esm/adapter/reporter/TagPrinter.js.map +1 -1
- package/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/esm/screenplay/models/WebdriverIOBrowsingSession.js +1 -1
- package/esm/screenplay/models/WebdriverIOBrowsingSession.js.map +1 -1
- package/esm/screenplay/models/WebdriverIOModalDialogHandler.d.ts +1 -1
- package/esm/screenplay/models/WebdriverIOModalDialogHandler.d.ts.map +1 -1
- package/esm/screenplay/models/WebdriverIOModalDialogHandler.js +16 -7
- package/esm/screenplay/models/WebdriverIOModalDialogHandler.js.map +1 -1
- package/esm/screenplay/models/WebdriverIOPage.d.ts +1 -1
- package/esm/screenplay/models/WebdriverIOPage.d.ts.map +1 -1
- package/esm/screenplay/models/WebdriverIOPage.js +16 -2
- package/esm/screenplay/models/WebdriverIOPage.js.map +1 -1
- package/esm/screenplay/models/WebdriverIOPageElement.d.ts.map +1 -1
- package/esm/screenplay/models/WebdriverIOPageElement.js +10 -1
- package/esm/screenplay/models/WebdriverIOPageElement.js.map +1 -1
- package/lib/adapter/TestRunnerLoader.d.ts +3 -3
- package/lib/adapter/TestRunnerLoader.d.ts.map +1 -1
- package/lib/adapter/TestRunnerLoader.js +7 -7
- package/lib/adapter/TestRunnerLoader.js.map +1 -1
- package/lib/adapter/WebdriverIOFrameworkAdapter.d.ts +2 -2
- package/lib/adapter/WebdriverIOFrameworkAdapter.d.ts.map +1 -1
- package/lib/adapter/WebdriverIOFrameworkAdapter.js +7 -7
- package/lib/adapter/WebdriverIOFrameworkAdapter.js.map +1 -1
- package/lib/adapter/WebdriverIOFrameworkAdapterFactory.d.ts +1 -1
- package/lib/adapter/WebdriverIOFrameworkAdapterFactory.d.ts.map +1 -1
- package/lib/adapter/WebdriverIONotifier.d.ts +2 -2
- package/lib/adapter/WebdriverIONotifier.d.ts.map +1 -1
- package/lib/adapter/WebdriverIONotifier.js +25 -25
- package/lib/adapter/WebdriverIONotifier.js.map +1 -1
- package/lib/adapter/reporter/BrowserCapabilitiesReporter.js +2 -2
- package/lib/adapter/reporter/BrowserCapabilitiesReporter.js.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 +2 -2
- 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 +1 -1
- package/lib/adapter/reporter/TagPrinter.d.ts.map +1 -1
- package/lib/adapter/reporter/TagPrinter.js +3 -3
- package/lib/adapter/reporter/TagPrinter.js.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/screenplay/models/WebdriverIOBrowsingSession.js +9 -9
- package/lib/screenplay/models/WebdriverIOBrowsingSession.js.map +1 -1
- package/lib/screenplay/models/WebdriverIOModalDialogHandler.d.ts +1 -1
- package/lib/screenplay/models/WebdriverIOModalDialogHandler.d.ts.map +1 -1
- package/lib/screenplay/models/WebdriverIOModalDialogHandler.js +16 -7
- package/lib/screenplay/models/WebdriverIOModalDialogHandler.js.map +1 -1
- package/lib/screenplay/models/WebdriverIOPage.d.ts +1 -1
- package/lib/screenplay/models/WebdriverIOPage.d.ts.map +1 -1
- package/lib/screenplay/models/WebdriverIOPage.js +16 -2
- package/lib/screenplay/models/WebdriverIOPage.js.map +1 -1
- package/lib/screenplay/models/WebdriverIOPageElement.d.ts.map +1 -1
- package/lib/screenplay/models/WebdriverIOPageElement.js +10 -1
- package/lib/screenplay/models/WebdriverIOPageElement.js.map +1 -1
- package/package.json +24 -27
- package/src/adapter/TestRunnerLoader.ts +5 -5
- package/src/adapter/WebdriverIOFrameworkAdapter.ts +3 -3
- package/src/adapter/WebdriverIOFrameworkAdapterFactory.ts +1 -1
- package/src/adapter/WebdriverIONotifier.ts +4 -4
- package/src/adapter/reporter/BrowserCapabilitiesReporter.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 +2 -2
- package/src/index.ts +1 -1
- package/src/screenplay/models/WebdriverIOBrowsingSession.ts +1 -1
- package/src/screenplay/models/WebdriverIOModalDialogHandler.ts +16 -8
- package/src/screenplay/models/WebdriverIOPage.ts +19 -3
- package/src/screenplay/models/WebdriverIOPageElement.ts +15 -1
- package/tsconfig-esm.build.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Stage, StageCrewMember } from '@serenity-js/core';
|
|
2
2
|
import { LogicError } from '@serenity-js/core';
|
|
3
|
-
import type { DomainEvent } from '@serenity-js/core/
|
|
3
|
+
import type { DomainEvent } from '@serenity-js/core/events';
|
|
4
4
|
import {
|
|
5
5
|
AsyncOperationAttempted,
|
|
6
6
|
AsyncOperationCompleted,
|
|
@@ -10,8 +10,8 @@ import {
|
|
|
10
10
|
TestRunFinishes,
|
|
11
11
|
TestSuiteFinished,
|
|
12
12
|
TestSuiteStarts
|
|
13
|
-
} from '@serenity-js/core/
|
|
14
|
-
import type { Outcome, TestSuiteDetails } from '@serenity-js/core/
|
|
13
|
+
} from '@serenity-js/core/events';
|
|
14
|
+
import type { Outcome, TestSuiteDetails } from '@serenity-js/core/model';
|
|
15
15
|
import {
|
|
16
16
|
CorrelationId,
|
|
17
17
|
Description,
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
ImplementationPending,
|
|
24
24
|
Name,
|
|
25
25
|
ProblemIndication
|
|
26
|
-
} from '@serenity-js/core/
|
|
26
|
+
} from '@serenity-js/core/model';
|
|
27
27
|
import type { Test as testStats } from '@wdio/reporter';
|
|
28
28
|
import type { Capabilities, Frameworks } from '@wdio/types';
|
|
29
29
|
import type { EventEmitter } from 'events';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Serenity } from '@serenity-js/core';
|
|
2
|
-
import { SceneTagged } from '@serenity-js/core/
|
|
3
|
-
import type { Tag } from '@serenity-js/core/
|
|
2
|
+
import { SceneTagged } from '@serenity-js/core/events';
|
|
3
|
+
import type { Tag } from '@serenity-js/core/model';
|
|
4
4
|
import Reporter from '@wdio/reporter';
|
|
5
5
|
import type { Capabilities, Options, Reporters } from '@wdio/types';
|
|
6
6
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Stage, StageCrewMember } from '@serenity-js/core';
|
|
2
|
-
import type { OutputStream } from '@serenity-js/core/
|
|
3
|
-
import type { DomainEvent} from '@serenity-js/core/
|
|
4
|
-
import { SceneFinished } from '@serenity-js/core/
|
|
2
|
+
import type { OutputStream } from '@serenity-js/core/adapter';
|
|
3
|
+
import type { DomainEvent} from '@serenity-js/core/events';
|
|
4
|
+
import { SceneFinished } from '@serenity-js/core/events';
|
|
5
5
|
|
|
6
6
|
import type { OutputStreamBuffer } from './OutputStreamBuffer.js';
|
|
7
7
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Tag } from '@serenity-js/core/
|
|
2
|
-
import { BrowserTag, PlatformTag } from '@serenity-js/core/
|
|
1
|
+
import type { Tag } from '@serenity-js/core/model';
|
|
2
|
+
import { BrowserTag, PlatformTag } from '@serenity-js/core/model';
|
|
3
3
|
import type { Capabilities } from '@wdio/types';
|
|
4
4
|
|
|
5
5
|
/**
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { serenity } from '@serenity-js/core';
|
|
2
|
-
import { ModuleLoader, Path } from '@serenity-js/core/
|
|
2
|
+
import { ModuleLoader, Path } from '@serenity-js/core/io';
|
|
3
3
|
import type { Capabilities } from '@wdio/types';
|
|
4
4
|
import type { EventEmitter } from 'events';
|
|
5
5
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import 'webdriverio';
|
|
2
2
|
|
|
3
3
|
import { type Discardable, LogicError } from '@serenity-js/core';
|
|
4
|
-
import { CorrelationId } from '@serenity-js/core/
|
|
4
|
+
import { CorrelationId } from '@serenity-js/core/model';
|
|
5
5
|
import type { BrowserCapabilities } from '@serenity-js/web';
|
|
6
6
|
import { BrowsingSession } from '@serenity-js/web';
|
|
7
7
|
|
|
@@ -23,7 +23,7 @@ export class WebdriverIOModalDialogHandler extends ModalDialogHandler implements
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
private currentHandler: (dialog: WebdriverIO.Dialog) => Promise<void>;
|
|
26
|
-
private
|
|
26
|
+
private pendingDialogHandling: Promise<void> = Promise.resolve();
|
|
27
27
|
|
|
28
28
|
constructor(private readonly browser: WebdriverIO.Browser) {
|
|
29
29
|
super();
|
|
@@ -33,7 +33,9 @@ export class WebdriverIOModalDialogHandler extends ModalDialogHandler implements
|
|
|
33
33
|
this.browser.on('dialog', this.onDialog);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
private onDialog =
|
|
36
|
+
private onDialog = (dialog: WebdriverIO.Dialog) => {
|
|
37
|
+
this.pendingDialogHandling = this.tryToHandleDialog(dialog);
|
|
38
|
+
};
|
|
37
39
|
|
|
38
40
|
private async tryToHandleDialog(dialog: WebdriverIO.Dialog): Promise<void> {
|
|
39
41
|
try {
|
|
@@ -84,13 +86,18 @@ export class WebdriverIOModalDialogHandler extends ModalDialogHandler implements
|
|
|
84
86
|
}
|
|
85
87
|
|
|
86
88
|
async dismiss(): Promise<void> {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
+
try {
|
|
90
|
+
const message = await this.browser.getAlertText();
|
|
91
|
+
await this.browser.dismissAlert();
|
|
92
|
+
this.modalDialog = new DismissedModalDialog(message);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
// Dialog might have already been handled by the event listener
|
|
96
|
+
if (error.message?.includes(WebdriverProtocolErrorCode.NoSuchAlertError)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
throw error;
|
|
89
100
|
}
|
|
90
|
-
|
|
91
|
-
const message = this.dialog.message();
|
|
92
|
-
await this.dialog.dismiss();
|
|
93
|
-
this.modalDialog = new DismissedModalDialog(message);
|
|
94
101
|
}
|
|
95
102
|
|
|
96
103
|
async reset(): Promise<void> {
|
|
@@ -102,6 +109,7 @@ export class WebdriverIOModalDialogHandler extends ModalDialogHandler implements
|
|
|
102
109
|
* @override
|
|
103
110
|
*/
|
|
104
111
|
async last(): Promise<ModalDialog> {
|
|
112
|
+
await this.pendingDialogHandling;
|
|
105
113
|
return this.modalDialog;
|
|
106
114
|
}
|
|
107
115
|
|
|
@@ -3,7 +3,7 @@ import 'webdriverio';
|
|
|
3
3
|
import { URL } from 'node:url';
|
|
4
4
|
|
|
5
5
|
import { type Discardable, List, LogicError } from '@serenity-js/core';
|
|
6
|
-
import type { CorrelationId } from '@serenity-js/core/
|
|
6
|
+
import type { CorrelationId } from '@serenity-js/core/model';
|
|
7
7
|
import type { Cookie, CookieData, ModalDialogHandler, PageElements, Selector } from '@serenity-js/web';
|
|
8
8
|
import {
|
|
9
9
|
ArgumentDehydrator,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
PageElement,
|
|
15
15
|
PageElementsLocator
|
|
16
16
|
} from '@serenity-js/web';
|
|
17
|
-
import * as scripts from '@serenity-js/web/
|
|
17
|
+
import * as scripts from '@serenity-js/web/scripts';
|
|
18
18
|
import type { TransformElement } from 'webdriverio';
|
|
19
19
|
|
|
20
20
|
import { WebdriverIOExistingElementLocator, WebdriverIOLocator, WebdriverIORootLocator } from './locators/index.js';
|
|
@@ -262,7 +262,23 @@ export class WebdriverIOPage extends Page<WebdriverIO.Element> implements Discar
|
|
|
262
262
|
|
|
263
263
|
async setViewportSize(size: { width: number, height: number }): Promise<void> {
|
|
264
264
|
return await this.inContextOfThisPage(async () => {
|
|
265
|
-
|
|
265
|
+
// Use BiDi setViewport when available as it handles devicePixelRatio correctly
|
|
266
|
+
if (this.browser.isBidi) {
|
|
267
|
+
return this.browser.setViewport(size);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Fall back to classic WebDriver approach for non-BiDi sessions
|
|
271
|
+
const desiredWindowSize = await this.browser.execute(`
|
|
272
|
+
var currentViewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)
|
|
273
|
+
var currentViewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)
|
|
274
|
+
|
|
275
|
+
return {
|
|
276
|
+
width: Math.max(window.outerWidth - currentViewportWidth + ${ size.width }, ${ size.width }),
|
|
277
|
+
height: Math.max(window.outerHeight - currentViewportHeight + ${ size.height }, ${ size.height }),
|
|
278
|
+
};
|
|
279
|
+
`) as { width: number, height: number };
|
|
280
|
+
|
|
281
|
+
return this.browser.setWindowSize(desiredWindowSize.width, desiredWindowSize.height);
|
|
266
282
|
});
|
|
267
283
|
}
|
|
268
284
|
|
|
@@ -3,7 +3,7 @@ import 'webdriverio';
|
|
|
3
3
|
import { LogicError } from '@serenity-js/core';
|
|
4
4
|
import type { SwitchableOrigin } from '@serenity-js/web';
|
|
5
5
|
import { Key, PageElement, SelectOption } from '@serenity-js/web';
|
|
6
|
-
import * as scripts from '@serenity-js/web/
|
|
6
|
+
import * as scripts from '@serenity-js/web/scripts';
|
|
7
7
|
|
|
8
8
|
import type { WebdriverIOLocator } from './locators/index.js';
|
|
9
9
|
import { WebdriverProtocolErrorCode } from './WebdriverProtocolErrorCode.js';
|
|
@@ -165,6 +165,20 @@ export class WebdriverIOPageElement extends PageElement<WebdriverIO.Element> {
|
|
|
165
165
|
|
|
166
166
|
async value(): Promise<string> {
|
|
167
167
|
const element = await this.nativeElement();
|
|
168
|
+
const browser = await this.browserFor(element);
|
|
169
|
+
|
|
170
|
+
// WebdriverIO v9 returns empty string for non-input elements instead of throwing
|
|
171
|
+
// Check if element actually supports the value property
|
|
172
|
+
const hasValueProperty = await browser.execute(
|
|
173
|
+
/* c8 ignore next */
|
|
174
|
+
(element_: HTMLElement) => 'value' in element_,
|
|
175
|
+
element as unknown as HTMLElement
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
if (! hasValueProperty) {
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
|
|
168
182
|
return await element.getValue() as string;
|
|
169
183
|
}
|
|
170
184
|
|
package/tsconfig-esm.build.json
CHANGED