@applitools/spec-driver-puppeteer 1.1.71 → 1.1.73
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 +55 -0
- package/dist/spec-driver.js +40 -56
- package/package.json +4 -4
- package/types/index.d.ts +18 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,60 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.1.73](https://github.com/applitools/eyes.sdk.javascript1/compare/js/spec-driver-puppeteer@1.1.72...js/spec-driver-puppeteer@1.1.73) (2023-08-18)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Code Refactoring
|
|
7
|
+
|
|
8
|
+
* refactored spec driver interface ([#1839](https://github.com/applitools/eyes.sdk.javascript1/issues/1839)) ([aa49ec2](https://github.com/applitools/eyes.sdk.javascript1/commit/aa49ec2a7d14b8529acc3a8a4c2baecfa113d98a))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* @applitools/utils bumped to 1.5.1
|
|
14
|
+
#### Code Refactoring
|
|
15
|
+
|
|
16
|
+
* refactored spec driver interface ([#1839](https://github.com/applitools/eyes.sdk.javascript1/issues/1839)) ([aa49ec2](https://github.com/applitools/eyes.sdk.javascript1/commit/aa49ec2a7d14b8529acc3a8a4c2baecfa113d98a))
|
|
17
|
+
* @applitools/logger bumped to 2.0.8
|
|
18
|
+
#### Code Refactoring
|
|
19
|
+
|
|
20
|
+
* refactored spec driver interface ([#1839](https://github.com/applitools/eyes.sdk.javascript1/issues/1839)) ([aa49ec2](https://github.com/applitools/eyes.sdk.javascript1/commit/aa49ec2a7d14b8529acc3a8a4c2baecfa113d98a))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
* @applitools/snippets bumped to 2.4.23
|
|
25
|
+
#### Code Refactoring
|
|
26
|
+
|
|
27
|
+
* refactored spec driver interface ([#1839](https://github.com/applitools/eyes.sdk.javascript1/issues/1839)) ([aa49ec2](https://github.com/applitools/eyes.sdk.javascript1/commit/aa49ec2a7d14b8529acc3a8a4c2baecfa113d98a))
|
|
28
|
+
* @applitools/driver bumped to 1.13.5
|
|
29
|
+
#### Bug Fixes
|
|
30
|
+
|
|
31
|
+
* optimize driver usage in close ([#1867](https://github.com/applitools/eyes.sdk.javascript1/issues/1867)) ([60dff6b](https://github.com/applitools/eyes.sdk.javascript1/commit/60dff6b160e69d3893c91a1125d668fa18b43072))
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
#### Code Refactoring
|
|
35
|
+
|
|
36
|
+
* refactored spec driver interface ([#1839](https://github.com/applitools/eyes.sdk.javascript1/issues/1839)) ([aa49ec2](https://github.com/applitools/eyes.sdk.javascript1/commit/aa49ec2a7d14b8529acc3a8a4c2baecfa113d98a))
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
## [1.1.72](https://github.com/applitools/eyes.sdk.javascript1/compare/js/spec-driver-puppeteer@1.1.71...js/spec-driver-puppeteer@1.1.72) (2023-08-03)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
### Dependencies
|
|
45
|
+
|
|
46
|
+
* @applitools/driver bumped to 1.13.4
|
|
47
|
+
#### Bug Fixes
|
|
48
|
+
|
|
49
|
+
* extract device orientation from a browser for web executions ([d8d4e91](https://github.com/applitools/eyes.sdk.javascript1/commit/d8d4e919965fb9105915e762c397ec2cc57a8a71))
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
* @applitools/snippets bumped to 2.4.22
|
|
54
|
+
#### Bug Fixes
|
|
55
|
+
|
|
56
|
+
* improve orientation extraction for ios devices ([378d989](https://github.com/applitools/eyes.sdk.javascript1/commit/378d9894e4fbc7247087ccb8c46266dc4737e2e5))
|
|
57
|
+
|
|
3
58
|
## [1.1.71](https://github.com/applitools/eyes.sdk.javascript1/compare/js/spec-driver-puppeteer@1.1.70...js/spec-driver-puppeteer@1.1.71) (2023-07-21)
|
|
4
59
|
|
|
5
60
|
|
package/dist/spec-driver.js
CHANGED
|
@@ -23,10 +23,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.build = exports.
|
|
26
|
+
exports.build = exports.takeScreenshot = exports.visit = exports.getUrl = exports.getTitle = exports.getCookies = exports.setViewportSize = exports.getViewportSize = exports.getDriverInfo = exports.childContext = exports.parentContext = exports.mainContext = exports.click = exports.hover = exports.setElementText = exports.findElements = exports.findElement = exports.executeScript = exports.extractContext = exports.toSimpleCommonSelector = exports.toSelector = exports.isStaleElementError = exports.isSelector = exports.isElement = exports.isContext = exports.isDriver = void 0;
|
|
27
27
|
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
-
// #region HELPERS
|
|
29
|
-
const XPATH_SELECTOR_START = ['/', '(', '../', './', '*/'];
|
|
30
28
|
async function handleToObject(handle) {
|
|
31
29
|
const [, type] = handle.toString().split('@');
|
|
32
30
|
if (type === 'array') {
|
|
@@ -98,11 +96,10 @@ function scriptRunner(script, arg, ...elements) {
|
|
|
98
96
|
}
|
|
99
97
|
}
|
|
100
98
|
}
|
|
99
|
+
const XPATH_SELECTOR_START = ['/', '(', '../', './', '*/'];
|
|
101
100
|
function isXpathSelector(selector) {
|
|
102
101
|
return XPATH_SELECTOR_START.some(start => selector.startsWith(start));
|
|
103
102
|
}
|
|
104
|
-
// #endregion
|
|
105
|
-
// #region UTILITY
|
|
106
103
|
function isDriver(page) {
|
|
107
104
|
if (!page)
|
|
108
105
|
return false;
|
|
@@ -125,40 +122,61 @@ function isSelector(selector) {
|
|
|
125
122
|
return utils.types.isString(selector);
|
|
126
123
|
}
|
|
127
124
|
exports.isSelector = isSelector;
|
|
128
|
-
function
|
|
125
|
+
function isStaleElementError(err) {
|
|
126
|
+
var _a, _b, _c;
|
|
127
|
+
return (((_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.includes('Execution context was destroyed')) ||
|
|
128
|
+
((_b = err === null || err === void 0 ? void 0 : err.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot find context with specified id')) ||
|
|
129
|
+
((_c = err === null || err === void 0 ? void 0 : err.message) === null || _c === void 0 ? void 0 : _c.includes('JSHandles can be evaluated only in the context they were created')));
|
|
130
|
+
}
|
|
131
|
+
exports.isStaleElementError = isStaleElementError;
|
|
132
|
+
function toSelector(selector) {
|
|
129
133
|
if (utils.types.has(selector, 'selector'))
|
|
130
134
|
return selector.selector;
|
|
131
135
|
return selector;
|
|
132
136
|
}
|
|
133
|
-
exports.
|
|
134
|
-
function
|
|
137
|
+
exports.toSelector = toSelector;
|
|
138
|
+
function toSimpleCommonSelector(selector) {
|
|
135
139
|
if (utils.types.isString(selector)) {
|
|
136
140
|
return { type: isXpathSelector(selector) ? 'xpath' : 'css', selector };
|
|
137
141
|
}
|
|
138
142
|
return selector;
|
|
139
143
|
}
|
|
140
|
-
exports.
|
|
144
|
+
exports.toSimpleCommonSelector = toSimpleCommonSelector;
|
|
141
145
|
function extractContext(page) {
|
|
142
146
|
return isDriver(page) ? page.mainFrame() : page;
|
|
143
147
|
}
|
|
144
148
|
exports.extractContext = extractContext;
|
|
145
|
-
function isStaleElementError(err) {
|
|
146
|
-
var _a, _b, _c;
|
|
147
|
-
return (((_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.includes('Execution context was destroyed')) ||
|
|
148
|
-
((_b = err === null || err === void 0 ? void 0 : err.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot find context with specified id')) ||
|
|
149
|
-
((_c = err === null || err === void 0 ? void 0 : err.message) === null || _c === void 0 ? void 0 : _c.includes('JSHandles can be evaluated only in the context they were created')));
|
|
150
|
-
}
|
|
151
|
-
exports.isStaleElementError = isStaleElementError;
|
|
152
|
-
// #endregion
|
|
153
|
-
// #region COMMANDS
|
|
154
149
|
async function executeScript(frame, script, arg) {
|
|
155
150
|
script = utils.types.isString(script) ? script : `function() {return (${script.toString()}).apply(null, arguments)}`;
|
|
156
151
|
const result = await frame.evaluateHandle(scriptRunner, script, ...transformArgument(arg));
|
|
157
152
|
return handleToObject(result);
|
|
158
153
|
}
|
|
159
154
|
exports.executeScript = executeScript;
|
|
155
|
+
async function findElement(frame, selector, parent) {
|
|
156
|
+
const root = parent !== null && parent !== void 0 ? parent : frame;
|
|
157
|
+
return (isXpathSelector(selector) ? root.$x(selector).then(elements => elements[0]) : root.$(selector));
|
|
158
|
+
}
|
|
159
|
+
exports.findElement = findElement;
|
|
160
|
+
async function findElements(frame, selector, parent) {
|
|
161
|
+
const root = parent !== null && parent !== void 0 ? parent : frame;
|
|
162
|
+
return (isXpathSelector(selector) ? root.$x(selector) : root.$$(selector));
|
|
163
|
+
}
|
|
164
|
+
exports.findElements = findElements;
|
|
165
|
+
async function setElementText(frame, element, text) {
|
|
166
|
+
const resolvedElement = isSelector(element) ? await findElement(frame, element) : element;
|
|
167
|
+
await (resolvedElement === null || resolvedElement === void 0 ? void 0 : resolvedElement.evaluate(element => (element.value = '')));
|
|
168
|
+
await (resolvedElement === null || resolvedElement === void 0 ? void 0 : resolvedElement.type(text));
|
|
169
|
+
}
|
|
170
|
+
exports.setElementText = setElementText;
|
|
171
|
+
async function hover(_frame, element) {
|
|
172
|
+
await element.hover();
|
|
173
|
+
}
|
|
174
|
+
exports.hover = hover;
|
|
175
|
+
async function click(_frame, element) {
|
|
176
|
+
await element.click();
|
|
177
|
+
}
|
|
178
|
+
exports.click = click;
|
|
160
179
|
async function mainContext(frame) {
|
|
161
|
-
frame = extractContext(frame);
|
|
162
180
|
let mainFrame = frame;
|
|
163
181
|
while (mainFrame.parentFrame()) {
|
|
164
182
|
mainFrame = mainFrame.parentFrame();
|
|
@@ -168,7 +186,6 @@ async function mainContext(frame) {
|
|
|
168
186
|
exports.mainContext = mainContext;
|
|
169
187
|
async function parentContext(frame) {
|
|
170
188
|
var _a;
|
|
171
|
-
frame = extractContext(frame);
|
|
172
189
|
return (_a = frame.parentFrame()) !== null && _a !== void 0 ? _a : frame;
|
|
173
190
|
}
|
|
174
191
|
exports.parentContext = parentContext;
|
|
@@ -177,22 +194,10 @@ async function childContext(_frame, element) {
|
|
|
177
194
|
return frame;
|
|
178
195
|
}
|
|
179
196
|
exports.childContext = childContext;
|
|
180
|
-
async function
|
|
181
|
-
|
|
182
|
-
return (isXpathSelector(selector) ? root.$x(selector).then(elements => elements[0]) : root.$(selector));
|
|
183
|
-
}
|
|
184
|
-
exports.findElement = findElement;
|
|
185
|
-
async function findElements(frame, selector, parent) {
|
|
186
|
-
const root = parent !== null && parent !== void 0 ? parent : frame;
|
|
187
|
-
return (isXpathSelector(selector) ? root.$x(selector) : root.$$(selector));
|
|
188
|
-
}
|
|
189
|
-
exports.findElements = findElements;
|
|
190
|
-
async function setElementText(frame, element, text) {
|
|
191
|
-
const resolvedElement = isSelector(element) ? await findElement(frame, element) : element;
|
|
192
|
-
await (resolvedElement === null || resolvedElement === void 0 ? void 0 : resolvedElement.evaluate(element => (element.value = '')));
|
|
193
|
-
await (resolvedElement === null || resolvedElement === void 0 ? void 0 : resolvedElement.type(text));
|
|
197
|
+
async function getDriverInfo(_page) {
|
|
198
|
+
return { features: { allCookies: true } };
|
|
194
199
|
}
|
|
195
|
-
exports.
|
|
200
|
+
exports.getDriverInfo = getDriverInfo;
|
|
196
201
|
async function getViewportSize(page) {
|
|
197
202
|
return page.viewport();
|
|
198
203
|
}
|
|
@@ -218,10 +223,6 @@ async function getCookies(page) {
|
|
|
218
223
|
});
|
|
219
224
|
}
|
|
220
225
|
exports.getCookies = getCookies;
|
|
221
|
-
async function getDriverInfo(_page) {
|
|
222
|
-
return { features: { allCookies: true } };
|
|
223
|
-
}
|
|
224
|
-
exports.getDriverInfo = getDriverInfo;
|
|
225
226
|
async function getTitle(page) {
|
|
226
227
|
return page.title();
|
|
227
228
|
}
|
|
@@ -239,22 +240,6 @@ async function takeScreenshot(page) {
|
|
|
239
240
|
return result;
|
|
240
241
|
}
|
|
241
242
|
exports.takeScreenshot = takeScreenshot;
|
|
242
|
-
async function click(frame, element) {
|
|
243
|
-
const resolvedElement = isSelector(element) ? await findElement(frame, element) : element;
|
|
244
|
-
await (resolvedElement === null || resolvedElement === void 0 ? void 0 : resolvedElement.click());
|
|
245
|
-
}
|
|
246
|
-
exports.click = click;
|
|
247
|
-
async function hover(frame, element) {
|
|
248
|
-
const resolvedElement = isSelector(element) ? await findElement(frame, element) : element;
|
|
249
|
-
await (resolvedElement === null || resolvedElement === void 0 ? void 0 : resolvedElement.hover());
|
|
250
|
-
}
|
|
251
|
-
exports.hover = hover;
|
|
252
|
-
async function waitUntilDisplayed(frame, selector) {
|
|
253
|
-
await frame.waitForSelector(selector);
|
|
254
|
-
}
|
|
255
|
-
exports.waitUntilDisplayed = waitUntilDisplayed;
|
|
256
|
-
// #endregion
|
|
257
|
-
// #region BUILD
|
|
258
243
|
const browserNames = ['chrome', 'firefox'];
|
|
259
244
|
/*
|
|
260
245
|
* Spawn a browser with a given configuration (INTERNAL USE ONLY)
|
|
@@ -304,4 +289,3 @@ async function build(env) {
|
|
|
304
289
|
return [page, () => driver.close()];
|
|
305
290
|
}
|
|
306
291
|
exports.build = build;
|
|
307
|
-
// #endregion
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applitools/spec-driver-puppeteer",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.73",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"puppeteer",
|
|
6
6
|
"chrome devtools protocol",
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
"test": "run --top-level mocha './test/**/*.spec.ts' --exit",
|
|
38
38
|
"setup": "yarn puppeteer:setup",
|
|
39
39
|
"puppeteer:setup": "PUPPETEER_PRODUCT=firefox node --require puppeteer/install.js --eval null",
|
|
40
|
-
"up:framework": "
|
|
40
|
+
"up:framework": "yarn add --dev --caret puppeteer${APPLITOOLS_FRAMEWORK_VERSION:+@$APPLITOOLS_FRAMEWORK_VERSION}"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@applitools/driver": "1.13.
|
|
44
|
-
"@applitools/utils": "1.5.
|
|
43
|
+
"@applitools/driver": "1.13.5",
|
|
44
|
+
"@applitools/utils": "1.5.1"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@applitools/api-extractor": "^1.2.21",
|
package/types/index.d.ts
CHANGED
|
@@ -1,34 +1,40 @@
|
|
|
1
|
-
declare const _default:
|
|
1
|
+
declare const _default: SpecDriver;
|
|
2
2
|
export default _default;
|
|
3
3
|
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<globalThis.Element>;
|
|
6
6
|
export function isSelector(selector: any): selector is Selector;
|
|
7
|
-
export function transformSelector(selector: import('@applitools/driver').CommonSelector<Selector>): Selector;
|
|
8
|
-
export function untransformSelector(selector: Selector): import('@applitools/driver').CommonSelector;
|
|
9
|
-
export function extractContext(page: Driver | Context): Context;
|
|
10
7
|
export function isStaleElementError(err: any): boolean;
|
|
8
|
+
export function toSelector(selector: import('@applitools/driver').CommonSelector<Selector>): Selector;
|
|
9
|
+
export function toSimpleCommonSelector(selector: Selector): import('@applitools/driver').CommonSelector;
|
|
10
|
+
export function extractContext(page: Driver): Context;
|
|
11
11
|
export function executeScript(frame: Context, script: string | ((arg: any) => any), arg: any): Promise<any>;
|
|
12
|
-
export function mainContext(frame: Context): Promise<Context>;
|
|
13
|
-
export function parentContext(frame: Context): Promise<Context>;
|
|
14
|
-
export function childContext(_frame: Context, element: Element<globalThis.Element>): Promise<Context>;
|
|
15
12
|
export function findElement(frame: Context, selector: Selector, parent?: undefined | Element<globalThis.Element>): Promise<null | Element<globalThis.Element>>;
|
|
16
13
|
export function findElements(frame: Context, selector: Selector, parent?: undefined | Element<globalThis.Element>): Promise<Array<Element<globalThis.Element>>>;
|
|
17
14
|
export function setElementText(frame: Context, element: Selector | Element<globalThis.Element>, text: string): Promise<void>;
|
|
15
|
+
export function hover(_frame: Context, element: Element<globalThis.Element>): Promise<void>;
|
|
16
|
+
export function click(_frame: Context, element: Element<globalThis.Element>): Promise<void>;
|
|
17
|
+
export function mainContext(frame: Context): Promise<Context>;
|
|
18
|
+
export function parentContext(frame: Context): Promise<Context>;
|
|
19
|
+
export function childContext(_frame: Context, element: Element<globalThis.Element>): Promise<Context>;
|
|
20
|
+
export function getDriverInfo(_page: Driver): Promise<import('@applitools/driver').DriverInfo>;
|
|
18
21
|
export function getViewportSize(page: Driver): Promise<{ width: number; height: number; }>;
|
|
19
22
|
export function setViewportSize(page: Driver, size: { width: number; height: number; }): Promise<void>;
|
|
20
23
|
export function getCookies(page: Driver): Promise<Array<import('@applitools/driver').Cookie>>;
|
|
21
|
-
export function getDriverInfo(_page: Driver): Promise<import('@applitools/driver').DriverInfo>;
|
|
22
24
|
export function getTitle(page: Driver): Promise<string>;
|
|
23
25
|
export function getUrl(page: Driver): Promise<string>;
|
|
24
26
|
export function visit(page: Driver, url: string): Promise<void>;
|
|
25
27
|
export function takeScreenshot(page: Driver): Promise<Buffer>;
|
|
26
|
-
export function click(frame: Context, element: Selector | Element<globalThis.Element>): Promise<void>;
|
|
27
|
-
export function hover(frame: Context, element: Selector | Element<globalThis.Element>): Promise<void>;
|
|
28
|
-
export function waitUntilDisplayed(frame: Context, selector: Selector): Promise<void>;
|
|
29
28
|
export function build(env: any): Promise<[Driver, () => Promise<void>]>;
|
|
30
29
|
export type Driver = import('puppeteer').Page & { __applitoolsBrand?: undefined; };
|
|
31
30
|
export type Context = import('puppeteer').Frame & { __applitoolsBrand?: undefined; };
|
|
32
31
|
export type Element<T extends globalThis.Element = globalThis.Element> = import('puppeteer').ElementHandle<T> & { __applitoolsBrand?: undefined; };
|
|
33
32
|
export type Selector = string & { __applitoolsBrand?: undefined; };
|
|
34
|
-
export type
|
|
33
|
+
export type PrimarySpecType = {
|
|
34
|
+
driver: Driver;
|
|
35
|
+
context: Context;
|
|
36
|
+
element: Element<globalThis.Element>;
|
|
37
|
+
selector: Selector;
|
|
38
|
+
secondary: never;
|
|
39
|
+
};
|
|
40
|
+
export type SpecDriver = import('@applitools/driver').SpecDriver<PrimarySpecType>;
|