@cloudscape-design/browser-test-tools 3.0.76 → 3.0.78
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/browsers/browser-creator.d.ts +3 -5
- package/browsers/browser-creator.js +4 -3
- package/browsers/browserstack.d.ts +1 -3
- package/browsers/browserstack.js +1 -1
- package/browsers/capabilities.d.ts +2 -4
- package/browsers/capabilities.js +3 -2
- package/browsers/devicefarm-mobile.d.ts +1 -2
- package/browsers/devicefarm.d.ts +1 -2
- package/browsers/local.d.ts +1 -2
- package/browsers/local.js +9 -1
- package/internal/manifest.json +1 -1
- package/package.json +4 -2
- package/page-objects/base.d.ts +5 -5
- package/page-objects/base.js +40 -53
- package/page-objects/events-spy.d.ts +0 -1
- package/page-objects/full-page-screenshot.d.ts +0 -1
- package/page-objects/full-page-screenshot.js +4 -0
- package/page-objects/screenshot.d.ts +0 -1
- package/page-objects/utils.d.ts +1 -2
- package/use-browser.d.ts +2 -2
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { RemoteOptions } from 'webdriverio';
|
|
3
|
-
import { Capabilities } from './capabilities';
|
|
1
|
+
import { Options } from '@wdio/types';
|
|
4
2
|
export interface WebDriverOptions {
|
|
5
3
|
width: number;
|
|
6
4
|
height: number;
|
|
@@ -8,7 +6,7 @@ export interface WebDriverOptions {
|
|
|
8
6
|
implicitTimeout: number;
|
|
9
7
|
scriptTimeout: number;
|
|
10
8
|
baseUrl?: string;
|
|
11
|
-
logLevel:
|
|
9
|
+
logLevel: Options.WebDriverLogTypes;
|
|
12
10
|
capabilities?: Record<string, any>;
|
|
13
11
|
}
|
|
14
12
|
export default abstract class BrowserCreator {
|
|
@@ -18,5 +16,5 @@ export default abstract class BrowserCreator {
|
|
|
18
16
|
protected setupBrowser(overrides: Partial<WebDriverOptions>): Promise<WebdriverIO.Browser>;
|
|
19
17
|
getBrowser(options: Partial<WebDriverOptions>): Promise<WebdriverIO.Browser>;
|
|
20
18
|
protected abstract __getBrowserUrl(): Promise<URL>;
|
|
21
|
-
protected abstract __getCapabilities(): Capabilities;
|
|
19
|
+
protected abstract __getCapabilities(): WebdriverIO.Capabilities;
|
|
22
20
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
4
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
5
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
6
|
};
|
|
5
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
8
8
|
const webdriverio_1 = require("webdriverio");
|
|
9
9
|
const merge_1 = __importDefault(require("lodash/merge"));
|
|
10
10
|
const exceptions_1 = require("../exceptions");
|
|
@@ -41,7 +41,8 @@ class BrowserCreator {
|
|
|
41
41
|
});
|
|
42
42
|
await browser.setTimeout({ implicit: options.implicitTimeout, script: options.scriptTimeout });
|
|
43
43
|
if (!browser.isMobile) {
|
|
44
|
-
await browser.$('body')
|
|
44
|
+
const body = await browser.$('body');
|
|
45
|
+
await body.moveTo({ xOffset: 0, yOffset: 0 });
|
|
45
46
|
await browser.setWindowSize(options.width, options.height);
|
|
46
47
|
}
|
|
47
48
|
return browser;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
/// <reference types="webdriverio/async" />
|
|
2
1
|
/// <reference types="node" />
|
|
3
2
|
import { URL } from 'url';
|
|
4
3
|
import BrowserCreator, { WebDriverOptions } from './browser-creator';
|
|
5
|
-
import { Capabilities } from './capabilities';
|
|
6
4
|
type BrowserstackCredentials = {
|
|
7
5
|
user: string;
|
|
8
6
|
key: string;
|
|
@@ -16,6 +14,6 @@ export type BrowserstackOptions = {
|
|
|
16
14
|
export default class BrowserStackBrowserCreator extends BrowserCreator {
|
|
17
15
|
getBrowser(options: Partial<WebDriverOptions>): Promise<WebdriverIO.Browser>;
|
|
18
16
|
__getBrowserUrl(): Promise<URL>;
|
|
19
|
-
protected __getCapabilities(): Capabilities;
|
|
17
|
+
protected __getCapabilities(): WebdriverIO.Capabilities;
|
|
20
18
|
}
|
|
21
19
|
export {};
|
package/browsers/browserstack.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
declare const defaultCapabilities: Record<string, Capabilities>;
|
|
4
|
-
export declare function getCapability(browserName: string, capabilities: Record<string, Capabilities>): Capabilities;
|
|
1
|
+
declare const defaultCapabilities: Record<string, WebdriverIO.Capabilities>;
|
|
2
|
+
export declare function getCapability(browserName: string, capabilities: Record<string, WebdriverIO.Capabilities>): WebdriverIO.Capabilities;
|
|
5
3
|
export declare function mergeCapabilities<T>(src: T, overrides: Partial<T>): T;
|
|
6
4
|
export default defaultCapabilities;
|
package/browsers/capabilities.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
4
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
5
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
6
|
};
|
|
5
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
8
|
exports.mergeCapabilities = exports.getCapability = void 0;
|
|
7
|
-
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
8
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
9
9
|
const lodash_1 = __importDefault(require("lodash"));
|
|
10
10
|
const exceptions_1 = require("../exceptions");
|
|
11
11
|
const defaultCapabilities = {
|
|
@@ -64,6 +64,7 @@ const defaultCapabilities = {
|
|
|
64
64
|
Firefox: {
|
|
65
65
|
browserName: 'firefox',
|
|
66
66
|
'moz:firefoxOptions': {
|
|
67
|
+
args: ['-headless'],
|
|
67
68
|
prefs: {
|
|
68
69
|
'fission.webContentIsolationStrategy': 0,
|
|
69
70
|
'fission.bfcacheInParent': false,
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { URL } from 'url';
|
|
3
3
|
import BrowserCreator from './browser-creator';
|
|
4
|
-
import { Capabilities } from './capabilities';
|
|
5
4
|
export default class MobileBrowserCreator extends BrowserCreator {
|
|
6
5
|
__getBrowserUrl(): Promise<URL>;
|
|
7
|
-
__getCapabilities(): Capabilities;
|
|
6
|
+
__getCapabilities(): WebdriverIO.Capabilities;
|
|
8
7
|
}
|
package/browsers/devicefarm.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { URL } from 'url';
|
|
3
3
|
import BrowserCreator from './browser-creator';
|
|
4
|
-
import { Capabilities } from './capabilities';
|
|
5
4
|
export interface DevicefarmOptions {
|
|
6
5
|
retryCount?: number;
|
|
7
6
|
projectArn: string;
|
|
@@ -9,5 +8,5 @@ export interface DevicefarmOptions {
|
|
|
9
8
|
}
|
|
10
9
|
export default class DevicefarmBrowserCreator extends BrowserCreator {
|
|
11
10
|
protected __getBrowserUrl(): Promise<URL>;
|
|
12
|
-
protected __getCapabilities(): Capabilities;
|
|
11
|
+
protected __getCapabilities(): WebdriverIO.Capabilities;
|
|
13
12
|
}
|
package/browsers/local.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { URL } from 'url';
|
|
3
3
|
import BrowserCreator from './browser-creator';
|
|
4
|
-
import { Capabilities } from './capabilities';
|
|
5
4
|
export default class LocalBrowserCreator extends BrowserCreator {
|
|
6
5
|
__getBrowserUrl(): Promise<URL>;
|
|
7
|
-
__getCapabilities(): Capabilities;
|
|
6
|
+
__getCapabilities(): WebdriverIO.Capabilities;
|
|
8
7
|
}
|
package/browsers/local.js
CHANGED
|
@@ -42,15 +42,23 @@ const localBrowsers = {
|
|
|
42
42
|
},
|
|
43
43
|
},
|
|
44
44
|
},
|
|
45
|
+
// Workaround for https://github.com/webdriverio/webdriverio/issues/13440
|
|
46
|
+
// Reference: https://webdriver.io/blog/2024/08/15/webdriverio-v9-release/#new-features
|
|
47
|
+
'wdio:enforceWebDriverClassic': true,
|
|
45
48
|
}),
|
|
46
49
|
ChromeHeadlessIntegration: (0, capabilities_1.mergeCapabilities)(capabilities_1.default.ChromeHeadless, {
|
|
47
50
|
'goog:chromeOptions': {
|
|
48
51
|
args: ['--force-prefers-reduced-motion'],
|
|
49
52
|
},
|
|
53
|
+
// Workaround for https://github.com/webdriverio/webdriverio/issues/13440
|
|
54
|
+
// Reference: https://webdriver.io/blog/2024/08/15/webdriverio-v9-release/#new-features
|
|
55
|
+
'wdio:enforceWebDriverClassic': true,
|
|
50
56
|
}),
|
|
51
57
|
Firefox: (0, capabilities_1.mergeCapabilities)(capabilities_1.default.Firefox, {
|
|
52
|
-
// https://firefox-source-docs.mozilla.org/testing/geckodriver/Capabilities.html
|
|
53
58
|
'moz:debuggerAddress': true,
|
|
59
|
+
// Workaround for failing internal tests
|
|
60
|
+
// Reference: https://webdriver.io/blog/2024/08/15/webdriverio-v9-release/#new-features
|
|
61
|
+
'wdio:enforceWebDriverClassic': true,
|
|
54
62
|
}),
|
|
55
63
|
};
|
|
56
64
|
class LocalBrowserCreator extends browser_creator_1.default {
|
package/internal/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudscape-design/browser-test-tools",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.78",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/cloudscape-design/browser-test-tools.git"
|
|
@@ -18,13 +18,15 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@aws-sdk/client-device-farm": "^3.623.0",
|
|
20
20
|
"@types/pngjs": "^6.0.4",
|
|
21
|
+
"@wdio/globals": "^9.7.0",
|
|
22
|
+
"@wdio/types": "^9.6.3",
|
|
21
23
|
"get-stream": "^6.0.1",
|
|
22
24
|
"lodash": "^4.17.21",
|
|
23
25
|
"p-retry": "^4.6.2",
|
|
24
26
|
"pixelmatch": "^5.3.0",
|
|
25
27
|
"pngjs": "^6.0.0",
|
|
26
28
|
"wait-on": "^7.2.0",
|
|
27
|
-
"webdriverio": "^7.
|
|
29
|
+
"webdriverio": "^9.7.0"
|
|
28
30
|
},
|
|
29
31
|
"exports": {
|
|
30
32
|
"./chrome-launcher": "./chrome-launcher.js",
|
package/page-objects/base.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/// <reference types="webdriverio/async" />
|
|
2
1
|
import { ScrollPosition } from '../browser-scripts';
|
|
3
2
|
import EventsSpy from './events-spy';
|
|
4
3
|
import { ElementRect } from './types';
|
|
4
|
+
import { Browser } from 'webdriverio';
|
|
5
5
|
export default class BasePageObject {
|
|
6
|
-
protected browser:
|
|
7
|
-
constructor(browser:
|
|
6
|
+
protected browser: Browser;
|
|
7
|
+
constructor(browser: Browser);
|
|
8
8
|
pause(milliseconds: number): Promise<void>;
|
|
9
9
|
keys(keys: string | string[]): Promise<void>;
|
|
10
10
|
setWindowSize({ width, height }: {
|
|
@@ -18,7 +18,7 @@ export default class BasePageObject {
|
|
|
18
18
|
buttonUp(): Promise<void>;
|
|
19
19
|
dragAndDrop(sourceSelector: string, xOffset?: number, yOffset?: number): Promise<void>;
|
|
20
20
|
getValue(selector: string): Promise<string>;
|
|
21
|
-
setValue(selector: string, value: number | string
|
|
21
|
+
setValue(selector: string, value: number | string): Promise<void>;
|
|
22
22
|
getViewportSize(): Promise<import("./types").ViewportSize>;
|
|
23
23
|
getWindowScroll(): Promise<ScrollPosition>;
|
|
24
24
|
windowScrollTo({ top, left }: Partial<ScrollPosition>): Promise<void>;
|
|
@@ -34,7 +34,7 @@ export default class BasePageObject {
|
|
|
34
34
|
isDisplayedInViewport(selector: string): Promise<boolean>;
|
|
35
35
|
isClickable(selector: string): Promise<boolean>;
|
|
36
36
|
getElementAttribute(selector: string, attributeName: string): Promise<string>;
|
|
37
|
-
getElementProperty(selector: string, propertyName: string): Promise<
|
|
37
|
+
getElementProperty(selector: string, propertyName: string): Promise<unknown>;
|
|
38
38
|
getElementsCount(selector: string): Promise<number>;
|
|
39
39
|
getFocusedElementText(): Promise<string>;
|
|
40
40
|
getBoundingBox(selector: string): Promise<ElementRect>;
|
package/page-objects/base.js
CHANGED
|
@@ -61,56 +61,43 @@ class BasePageObject {
|
|
|
61
61
|
await element.moveTo({ xOffset, yOffset });
|
|
62
62
|
}
|
|
63
63
|
async buttonDownOnElement(selector) {
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
{ type: 'pointerDown', button: 0 },
|
|
83
|
-
// extra delay to let event listeners to be fired
|
|
84
|
-
{ type: 'pause', duration: 10 },
|
|
85
|
-
],
|
|
86
|
-
},
|
|
87
|
-
]);
|
|
88
|
-
}
|
|
64
|
+
// Clean up all previous actions before stating a new batch. Without this line Safari emits extra "mouseup" events
|
|
65
|
+
await this.browser.releaseActions();
|
|
66
|
+
const box = await this.getBoundingBox(selector);
|
|
67
|
+
const center = (0, utils_1.getElementCenter)(box);
|
|
68
|
+
// W3C alternative is `performActions`. All consecutive actions have to be a part of a single call
|
|
69
|
+
await this.browser.performActions([
|
|
70
|
+
{
|
|
71
|
+
type: 'pointer',
|
|
72
|
+
id: 'mouse',
|
|
73
|
+
parameters: { pointerType: 'mouse' },
|
|
74
|
+
actions: [
|
|
75
|
+
{ type: 'pointerMove', duration: 0, x: center.x, y: center.y },
|
|
76
|
+
{ type: 'pointerDown', button: 0 },
|
|
77
|
+
// extra delay to let event listeners to be fired
|
|
78
|
+
{ type: 'pause', duration: 10 },
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
]);
|
|
89
82
|
}
|
|
90
83
|
async buttonUp() {
|
|
91
|
-
//
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
],
|
|
109
|
-
},
|
|
110
|
-
]);
|
|
111
|
-
// make sure all controls are properly released to avoid conflicts with further actions
|
|
112
|
-
await this.browser.releaseActions();
|
|
113
|
-
}
|
|
84
|
+
// W3C alternative is `performActions`
|
|
85
|
+
await this.browser.performActions([
|
|
86
|
+
{
|
|
87
|
+
type: 'pointer',
|
|
88
|
+
id: 'mouse',
|
|
89
|
+
parameters: { pointerType: 'mouse' },
|
|
90
|
+
actions: [
|
|
91
|
+
{ type: 'pointerUp', button: 0 },
|
|
92
|
+
// extra delay for Safari to process the event before moving the cursor away
|
|
93
|
+
{ type: 'pause', duration: 10 },
|
|
94
|
+
// return cursor back to the corner to avoid hover effects on screenshots
|
|
95
|
+
{ type: 'pointerMove', duration: 0, x: 0, y: 0 },
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
]);
|
|
99
|
+
// make sure all controls are properly released to avoid conflicts with further actions
|
|
100
|
+
await this.browser.releaseActions();
|
|
114
101
|
}
|
|
115
102
|
async dragAndDrop(sourceSelector, xOffset = 0, yOffset = 0) {
|
|
116
103
|
const element = await this.browser.$(sourceSelector);
|
|
@@ -168,7 +155,7 @@ class BasePageObject {
|
|
|
168
155
|
return element.isSelected();
|
|
169
156
|
}
|
|
170
157
|
async isExisting(selector) {
|
|
171
|
-
const elements = await this.browser.$$(selector);
|
|
158
|
+
const elements = await this.browser.$$(selector).map(element => element);
|
|
172
159
|
return elements.length > 0;
|
|
173
160
|
}
|
|
174
161
|
async isDisplayed(selector) {
|
|
@@ -177,7 +164,7 @@ class BasePageObject {
|
|
|
177
164
|
}
|
|
178
165
|
async isDisplayedInViewport(selector) {
|
|
179
166
|
const element = await this.browser.$(selector);
|
|
180
|
-
return element.
|
|
167
|
+
return element.isDisplayed({ withinViewport: true });
|
|
181
168
|
}
|
|
182
169
|
async isClickable(selector) {
|
|
183
170
|
const element = await this.browser.$(selector);
|
|
@@ -208,7 +195,7 @@ class BasePageObject {
|
|
|
208
195
|
return element.getText();
|
|
209
196
|
}
|
|
210
197
|
async getElementsText(selector) {
|
|
211
|
-
const elements = await this.browser.$$(selector);
|
|
198
|
+
const elements = await this.browser.$$(selector).map(element => element);
|
|
212
199
|
return Promise.all(elements.map(async (element) => element.getText()));
|
|
213
200
|
}
|
|
214
201
|
/**
|
|
@@ -228,10 +215,10 @@ class BasePageObject {
|
|
|
228
215
|
return callback();
|
|
229
216
|
}
|
|
230
217
|
const iframeEl = await this.browser.$(iframeSelector);
|
|
231
|
-
await this.browser.
|
|
218
|
+
await this.browser.switchFrame(iframeEl);
|
|
232
219
|
await callback();
|
|
233
220
|
// go back to top
|
|
234
|
-
await this.browser.
|
|
221
|
+
await this.browser.switchFrame(null);
|
|
235
222
|
}
|
|
236
223
|
}
|
|
237
224
|
exports.default = BasePageObject;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="webdriverio/async" />
|
|
2
1
|
import type { Browser as PuppeteerBrowser } from 'puppeteer-core';
|
|
3
2
|
export declare function scrollAndMergeStrategy(browser: WebdriverIO.Browser): Promise<string>;
|
|
4
3
|
export default function fullPageScreenshot(browser: WebdriverIO.Browser, forceScrollAndMerge?: boolean): Promise<string>;
|
|
@@ -44,6 +44,10 @@ async function scrollAndMergeStrategy(browser) {
|
|
|
44
44
|
}
|
|
45
45
|
exports.scrollAndMergeStrategy = scrollAndMergeStrategy;
|
|
46
46
|
async function fullPageScreenshot(browser, forceScrollAndMerge = false) {
|
|
47
|
+
var _a;
|
|
48
|
+
if ((_a = browser.capabilities.browserName) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes('firefox')) {
|
|
49
|
+
return scrollAndMergeStrategy(browser);
|
|
50
|
+
}
|
|
47
51
|
const puppeteer = await (0, utils_1.getPuppeteer)(browser);
|
|
48
52
|
if (puppeteer && !forceScrollAndMerge) {
|
|
49
53
|
// casting due to mismatch in NodeJS types of EventEmitter
|
package/page-objects/utils.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
/// <reference types="webdriverio/async" />
|
|
2
1
|
import { ViewportSize, ElementRect } from './types';
|
|
3
2
|
export declare function getElementCenter(rect: ElementRect): {
|
|
4
3
|
x: number;
|
|
5
4
|
y: number;
|
|
6
5
|
};
|
|
7
6
|
export declare function calculateIosTopOffset(dimensions: Pick<ViewportSize, 'screenWidth' | 'screenHeight' | 'pixelRatio'>): number;
|
|
8
|
-
export declare function getPuppeteer(browser: WebdriverIO.Browser): Promise<import("puppeteer-core
|
|
7
|
+
export declare function getPuppeteer(browser: WebdriverIO.Browser): Promise<import("puppeteer-core").Browser | null>;
|
package/use-browser.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/// <reference types="webdriverio/async" />
|
|
2
1
|
import { WebDriverOptions } from './browsers/browser-creator';
|
|
2
|
+
import { Browser } from 'webdriverio';
|
|
3
3
|
type BrowserOptions = {
|
|
4
4
|
browserName: string;
|
|
5
5
|
seleniumType: string;
|
|
@@ -8,7 +8,7 @@ type BrowserOptions = {
|
|
|
8
8
|
skipConsoleErrorsCheck: boolean;
|
|
9
9
|
};
|
|
10
10
|
interface TestFunction {
|
|
11
|
-
(browser:
|
|
11
|
+
(browser: Browser): Promise<void> | void;
|
|
12
12
|
}
|
|
13
13
|
declare function useBrowser(optionsOverride: Partial<WebDriverOptions>, testFn: TestFunction): () => Promise<void>;
|
|
14
14
|
declare function useBrowser(testFn: TestFunction): () => Promise<void>;
|