@applitools/spec-driver-playwright 1.2.0 → 1.3.2
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/dist/index.js +7 -2
- package/dist/spec-driver.js +54 -20
- package/package.json +29 -21
- package/types/index.d.ts +6 -5
- package/CHANGELOG.md +0 -21
package/dist/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -24,4 +28,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
24
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
29
|
const spec = __importStar(require("./spec-driver"));
|
|
26
30
|
__exportStar(require("./spec-driver"), exports);
|
|
27
|
-
|
|
31
|
+
const typedSpec = spec;
|
|
32
|
+
exports.default = typedSpec;
|
package/dist/spec-driver.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -19,7 +23,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
19
23
|
return result;
|
|
20
24
|
};
|
|
21
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.build = exports.waitUntilDisplayed = exports.scrollIntoView = exports.hover = exports.type = exports.click = exports.takeScreenshot = exports.visit = exports.getUrl = exports.getTitle = exports.getDriverInfo = exports.getCookies = exports.setViewportSize = exports.getViewportSize = exports.findElements = exports.findElement = exports.childContext = exports.parentContext = exports.mainContext = exports.executeScript = exports.isStaleElementError = exports.extractContext = exports.transformSelector = exports.isSelector = exports.isElement = exports.isContext = exports.isDriver = void 0;
|
|
26
|
+
exports.build = exports.waitUntilDisplayed = exports.scrollIntoView = exports.hover = exports.type = exports.click = exports.takeScreenshot = exports.visit = exports.getUrl = exports.getTitle = exports.getDriverInfo = exports.getCookies = exports.setViewportSize = exports.getViewportSize = exports.findElements = exports.findElement = exports.childContext = exports.parentContext = exports.mainContext = exports.executeScript = exports.isStaleElementError = exports.extractContext = exports.untransformSelector = exports.transformSelector = exports.isSelector = exports.isElement = exports.isContext = exports.isDriver = void 0;
|
|
27
|
+
const fs = __importStar(require("fs"));
|
|
28
|
+
const os = __importStar(require("os"));
|
|
29
|
+
const path = __importStar(require("path"));
|
|
23
30
|
const utils = __importStar(require("@applitools/utils"));
|
|
24
31
|
// #region HELPERS
|
|
25
32
|
async function handleToObject(handle) {
|
|
@@ -63,7 +70,9 @@ function isElement(element) {
|
|
|
63
70
|
}
|
|
64
71
|
exports.isElement = isElement;
|
|
65
72
|
function isSelector(selector) {
|
|
66
|
-
|
|
73
|
+
if (!selector)
|
|
74
|
+
return false;
|
|
75
|
+
return utils.types.isString(selector) || utils.types.instanceOf(selector, 'Locator');
|
|
67
76
|
}
|
|
68
77
|
exports.isSelector = isSelector;
|
|
69
78
|
function transformSelector(selector) {
|
|
@@ -76,15 +85,26 @@ function transformSelector(selector) {
|
|
|
76
85
|
return selector;
|
|
77
86
|
}
|
|
78
87
|
exports.transformSelector = transformSelector;
|
|
88
|
+
function untransformSelector(selector) {
|
|
89
|
+
if (utils.types.instanceOf(selector, 'Locator')) {
|
|
90
|
+
;
|
|
91
|
+
[, selector] = selector.toString().match(/Locator@(.+)/);
|
|
92
|
+
}
|
|
93
|
+
if (utils.types.isString(selector))
|
|
94
|
+
return { selector };
|
|
95
|
+
return selector;
|
|
96
|
+
}
|
|
97
|
+
exports.untransformSelector = untransformSelector;
|
|
79
98
|
function extractContext(page) {
|
|
80
99
|
return isDriver(page) ? page.mainFrame() : page;
|
|
81
100
|
}
|
|
82
101
|
exports.extractContext = extractContext;
|
|
83
102
|
function isStaleElementError(err) {
|
|
84
|
-
var _a, _b, _c;
|
|
85
|
-
return (((_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.includes('
|
|
86
|
-
((_b = err === null || err === void 0 ? void 0 : err.message) === null || _b === void 0 ? void 0 : _b.includes('Protocol error (
|
|
87
|
-
((_c = err === null || err === void 0 ? void 0 : err.message) === null || _c === void 0 ? void 0 : _c.includes('
|
|
103
|
+
var _a, _b, _c, _d;
|
|
104
|
+
return (((_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.includes('Element is not attached to the DOM')) || // universal message
|
|
105
|
+
((_b = err === null || err === void 0 ? void 0 : err.message) === null || _b === void 0 ? void 0 : _b.includes('Protocol error (DOM.describeNode)')) || // chrome message
|
|
106
|
+
((_c = err === null || err === void 0 ? void 0 : err.message) === null || _c === void 0 ? void 0 : _c.includes('Protocol error (Page.adoptNode)')) || // firefox message
|
|
107
|
+
((_d = err === null || err === void 0 ? void 0 : err.message) === null || _d === void 0 ? void 0 : _d.includes('Unable to adopt element handle from a different document')) // webkit message
|
|
88
108
|
);
|
|
89
109
|
}
|
|
90
110
|
exports.isStaleElementError = isStaleElementError;
|
|
@@ -115,11 +135,15 @@ async function childContext(_frame, element) {
|
|
|
115
135
|
}
|
|
116
136
|
exports.childContext = childContext;
|
|
117
137
|
async function findElement(frame, selector, parent) {
|
|
138
|
+
if (utils.types.instanceOf(selector, 'Locator'))
|
|
139
|
+
return selector.elementHandle();
|
|
118
140
|
const root = parent !== null && parent !== void 0 ? parent : frame;
|
|
119
141
|
return root.$(selector);
|
|
120
142
|
}
|
|
121
143
|
exports.findElement = findElement;
|
|
122
144
|
async function findElements(frame, selector, parent) {
|
|
145
|
+
if (utils.types.instanceOf(selector, 'Locator'))
|
|
146
|
+
return selector.elementHandles();
|
|
123
147
|
const root = parent !== null && parent !== void 0 ? parent : frame;
|
|
124
148
|
return root.$$(selector);
|
|
125
149
|
}
|
|
@@ -187,6 +211,8 @@ async function scrollIntoView(frame, element, align = false) {
|
|
|
187
211
|
}
|
|
188
212
|
exports.scrollIntoView = scrollIntoView;
|
|
189
213
|
async function waitUntilDisplayed(frame, selector) {
|
|
214
|
+
if (utils.types.instanceOf(selector, 'Locator'))
|
|
215
|
+
return selector.waitFor();
|
|
190
216
|
await frame.waitForSelector(selector);
|
|
191
217
|
}
|
|
192
218
|
exports.waitUntilDisplayed = waitUntilDisplayed;
|
|
@@ -200,7 +226,7 @@ const browserNames = {
|
|
|
200
226
|
async function build(env) {
|
|
201
227
|
const playwright = require('playwright');
|
|
202
228
|
const parseEnv = require('@applitools/test-utils/src/parse-env');
|
|
203
|
-
const { browser, device, url, attach, proxy, args = [], headless } = parseEnv(env, 'cdp');
|
|
229
|
+
const { browser, device, url, attach, proxy, args = [], headless, extension } = parseEnv(env, 'cdp');
|
|
204
230
|
const launcher = playwright[browserNames[browser] || browser];
|
|
205
231
|
if (!launcher)
|
|
206
232
|
throw new Error(`Browser "${browser}" is not supported.`);
|
|
@@ -208,30 +234,38 @@ async function build(env) {
|
|
|
208
234
|
throw new Error(`Attaching to the existed browser doesn't supported by playwright`);
|
|
209
235
|
const options = {
|
|
210
236
|
args,
|
|
211
|
-
headless,
|
|
237
|
+
headless: headless && !extension,
|
|
212
238
|
ignoreDefaultArgs: ['--hide-scrollbars'],
|
|
213
239
|
};
|
|
240
|
+
if (extension) {
|
|
241
|
+
options.args.push(`--load-extension=${extension}`, `--disable-extensions-except=${extension}`);
|
|
242
|
+
}
|
|
214
243
|
if (proxy) {
|
|
215
244
|
options.proxy = {
|
|
216
245
|
server: proxy.https || proxy.http || proxy.server,
|
|
217
246
|
bypass: proxy.bypass.join(','),
|
|
218
247
|
};
|
|
219
248
|
}
|
|
220
|
-
let driver;
|
|
221
|
-
if (
|
|
222
|
-
|
|
223
|
-
url.searchParams.set('ignoreDefaultArgs', options.ignoreDefaultArgs.join(','));
|
|
224
|
-
}
|
|
225
|
-
url.searchParams.set('headless', options.headless);
|
|
226
|
-
options.args.forEach((arg) => url.searchParams.set(...arg.split('=')));
|
|
227
|
-
driver = await launcher.connect({ wsEndpoint: url.href });
|
|
249
|
+
let driver, context;
|
|
250
|
+
if (extension) {
|
|
251
|
+
context = await launcher.launchPersistentContext(fs.mkdtempSync(path.join(os.tmpdir(), 'chrome-user-data-dir')), Object.assign(Object.assign(Object.assign({}, options), { viewport: null }), (device ? playwright.devices[device] : {})));
|
|
228
252
|
}
|
|
229
253
|
else {
|
|
230
|
-
|
|
254
|
+
if (url) {
|
|
255
|
+
if (utils.types.isArray(options.ignoreDefaultArgs)) {
|
|
256
|
+
url.searchParams.set('ignoreDefaultArgs', options.ignoreDefaultArgs.join(','));
|
|
257
|
+
}
|
|
258
|
+
url.searchParams.set('headless', options.headless);
|
|
259
|
+
options.args.forEach((arg) => url.searchParams.set(...arg.split('=')));
|
|
260
|
+
driver = await launcher.connect({ wsEndpoint: url.href });
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
driver = await launcher.launch(options);
|
|
264
|
+
}
|
|
265
|
+
context = await driver.newContext(device ? playwright.devices[device] : {});
|
|
231
266
|
}
|
|
232
|
-
const context = await driver.newContext(device ? playwright.devices[device] : {});
|
|
233
267
|
const page = await context.newPage();
|
|
234
|
-
return [page, () => driver.close()];
|
|
268
|
+
return [page, () => (driver ? driver.close() : context.close())];
|
|
235
269
|
}
|
|
236
270
|
exports.build = build;
|
|
237
271
|
// #endregion
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applitools/spec-driver-playwright",
|
|
3
|
-
"version": "1.2
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"playwright",
|
|
6
6
|
"chrome devtools protocol",
|
|
@@ -18,13 +18,16 @@
|
|
|
18
18
|
"repository": {
|
|
19
19
|
"type": "git",
|
|
20
20
|
"url": "git://github.com/applitools/eyes.sdk.javascript1.git",
|
|
21
|
-
"directory": "packages/spec-driver-playwright"
|
|
21
|
+
"directory": "js/packages/spec-driver-playwright"
|
|
22
22
|
},
|
|
23
23
|
"license": "SEE LICENSE IN LICENSE",
|
|
24
24
|
"author": {
|
|
25
25
|
"name": "Applitools Team",
|
|
26
26
|
"email": "team@applitools.com"
|
|
27
27
|
},
|
|
28
|
+
"aliases": [
|
|
29
|
+
"spec-playwright"
|
|
30
|
+
],
|
|
28
31
|
"main": "./dist/index.js",
|
|
29
32
|
"types": "./types/index.d.ts",
|
|
30
33
|
"files": [
|
|
@@ -35,11 +38,13 @@
|
|
|
35
38
|
"lint": "eslint '**/*.ts'",
|
|
36
39
|
"build": "ttsc",
|
|
37
40
|
"test": "mocha ./test/**/*.spec.ts --no-timeouts -r ts-node/register",
|
|
41
|
+
"test:sanity": "yarn test",
|
|
38
42
|
"setup": "yarn playwright:setup",
|
|
39
43
|
"playwright:setup": "sudo npx playwright install-deps",
|
|
44
|
+
"upgrade:framework": "if [ ! -z $APPLITOOLS_PLAYWRIGHT_VERSION ]; then packagejson=`cat package.json`; yarn upgrade --no-lockfile playwright@$APPLITOOLS_PLAYWRIGHT_VERSION; echo \"$packagejson\" > package.json; fi",
|
|
40
45
|
"deps": "bongo deps",
|
|
41
46
|
"gh:test": "gh workflow run test.yml --ref $(git rev-parse --abbrev-ref HEAD) -f packages='spec-playwright' -f links='types utils test-utils'",
|
|
42
|
-
"gh:publish": "gh workflow run publish.yml --ref $(git rev-parse --abbrev-ref HEAD)
|
|
47
|
+
"gh:publish": "gh workflow run publish-spec-playwright.yml --ref $(git rev-parse --abbrev-ref HEAD)",
|
|
43
48
|
"preversion": "bongo preversion",
|
|
44
49
|
"version": "bongo version",
|
|
45
50
|
"postversion": "bongo postversion --skip-release-notification"
|
|
@@ -50,32 +55,35 @@
|
|
|
50
55
|
}
|
|
51
56
|
},
|
|
52
57
|
"dependencies": {
|
|
53
|
-
"@applitools/types": "1.
|
|
54
|
-
"@applitools/utils": "1.
|
|
58
|
+
"@applitools/types": "1.5.6",
|
|
59
|
+
"@applitools/utils": "1.3.10"
|
|
55
60
|
},
|
|
56
61
|
"devDependencies": {
|
|
57
|
-
"@applitools/api-extractor": "^1.2.
|
|
58
|
-
"@applitools/
|
|
59
|
-
"@applitools/
|
|
60
|
-
"@applitools/test-utils": "1.
|
|
62
|
+
"@applitools/api-extractor": "^1.2.9",
|
|
63
|
+
"@applitools/bongo": "^2.1.6",
|
|
64
|
+
"@applitools/scripts": "1.1.0",
|
|
65
|
+
"@applitools/test-utils": "1.4.2",
|
|
61
66
|
"@types/mocha": "^9.0.0",
|
|
62
|
-
"@types/node": "
|
|
63
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
64
|
-
"@typescript-eslint/parser": "^
|
|
65
|
-
"eslint": "^
|
|
66
|
-
"eslint-config-prettier": "^
|
|
67
|
+
"@types/node": "12",
|
|
68
|
+
"@typescript-eslint/eslint-plugin": "^5.27.0",
|
|
69
|
+
"@typescript-eslint/parser": "^5.27.0",
|
|
70
|
+
"eslint": "^8.16.0",
|
|
71
|
+
"eslint-config-prettier": "^8.5.0",
|
|
67
72
|
"eslint-plugin-mocha-no-only": "^1.1.1",
|
|
68
73
|
"eslint-plugin-node": "^11.1.0",
|
|
69
|
-
"eslint-plugin-prettier": "^
|
|
74
|
+
"eslint-plugin-prettier": "^4.0.0",
|
|
70
75
|
"husky": "^4.3.7",
|
|
71
|
-
"mocha": "^9.
|
|
72
|
-
"playwright": "^1.
|
|
73
|
-
"prettier": "^2.
|
|
74
|
-
"ts-node": "^10.
|
|
75
|
-
"ttypescript": "^1.5.
|
|
76
|
-
"typescript": "^4.
|
|
76
|
+
"mocha": "^9.2.2",
|
|
77
|
+
"playwright": "^1.22.2",
|
|
78
|
+
"prettier": "^2.6.2",
|
|
79
|
+
"ts-node": "^10.8.0",
|
|
80
|
+
"ttypescript": "^1.5.13",
|
|
81
|
+
"typescript": "^4.7.2"
|
|
77
82
|
},
|
|
78
83
|
"peerDependencies": {
|
|
79
84
|
"playwright": ">=1.0.0"
|
|
85
|
+
},
|
|
86
|
+
"engines": {
|
|
87
|
+
"node": ">=12.13.0"
|
|
80
88
|
}
|
|
81
89
|
}
|
package/types/index.d.ts
CHANGED
|
@@ -4,15 +4,16 @@ export function isDriver(page: any): page is Driver;
|
|
|
4
4
|
export function isContext(frame: any): frame is Context;
|
|
5
5
|
export function isElement(element: any): element is Element;
|
|
6
6
|
export function isSelector(selector: any): selector is Selector;
|
|
7
|
-
export function transformSelector(selector:
|
|
7
|
+
export function transformSelector(selector: string | { selector: string | Selector; type?: string; }): Selector;
|
|
8
|
+
export function untransformSelector(selector: Selector): string | { selector: string; type?: string; };
|
|
8
9
|
export function extractContext(page: Driver | Context): Context;
|
|
9
10
|
export function isStaleElementError(err: any): boolean;
|
|
10
11
|
export function executeScript(frame: Context, script: string | ((arg: any) => any), arg: any): Promise<any>;
|
|
11
12
|
export function mainContext(frame: Context): Promise<Context>;
|
|
12
13
|
export function parentContext(frame: Context): Promise<Context>;
|
|
13
14
|
export function childContext(_frame: Context, element: Element): Promise<Context>;
|
|
14
|
-
export function findElement(frame: Context, selector: Selector, parent
|
|
15
|
-
export function findElements(frame: Context, selector: Selector, parent
|
|
15
|
+
export function findElement(frame: Context, selector: Selector, parent?: Element): Promise<Element>;
|
|
16
|
+
export function findElements(frame: Context, selector: Selector, parent?: Element): Promise<Array<Element>>;
|
|
16
17
|
export function getViewportSize(page: Driver): Promise<import('@applitools/types').Size>;
|
|
17
18
|
export function setViewportSize(page: Driver, size: import('@applitools/types').Size): Promise<void>;
|
|
18
19
|
export function getCookies(page: Driver): Promise<Array<import('@applitools/types').Cookie>>;
|
|
@@ -29,5 +30,5 @@ export function waitUntilDisplayed(frame: Context, selector: Selector): Promise<
|
|
|
29
30
|
export function build(env: any): Promise<[Driver, () => Promise<void>]>;
|
|
30
31
|
export type Driver = import('playwright').Page & { __applitoolsBrand?: never; };
|
|
31
32
|
export type Context = import('playwright').Frame & { __applitoolsBrand?: never; };
|
|
32
|
-
export type Element = import('playwright').ElementHandle
|
|
33
|
-
export type Selector = string & { __applitoolsBrand?: never; };
|
|
33
|
+
export type Element = import('playwright').ElementHandle & { __applitoolsBrand?: never; };
|
|
34
|
+
export type Selector = (string | import('playwright').Locator) & { __applitoolsBrand?: never; };
|
package/CHANGELOG.md
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# Change Log
|
|
2
|
-
|
|
3
|
-
## Unreleased
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
## 1.2.0 - 2021/11/10
|
|
7
|
-
|
|
8
|
-
- updated to @applitools/types@1.0.19 (from 1.0.15)
|
|
9
|
-
- updated to @applitools/utils@1.2.4 (from 1.2.3)
|
|
10
|
-
|
|
11
|
-
## 1.1.1 - 2021/10/20
|
|
12
|
-
|
|
13
|
-
- fix handle type parser
|
|
14
|
-
|
|
15
|
-
## 1.1.0 - 2021/10/12
|
|
16
|
-
|
|
17
|
-
- bump version
|
|
18
|
-
|
|
19
|
-
## 1.0.3 - 2021/10/12
|
|
20
|
-
|
|
21
|
-
- spec driver implementation for playwright framework
|