@progress/kendo-e2e 2.0.0 → 2.1.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.
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function capture({ browser, host, pages, root, output, viewportSize, selector, tolerance, createDiff }: {
|
|
2
|
+
browser: any;
|
|
3
|
+
host: any;
|
|
4
|
+
pages: any;
|
|
5
|
+
root: any;
|
|
6
|
+
output: any;
|
|
7
|
+
viewportSize: any;
|
|
8
|
+
selector: any;
|
|
9
|
+
tolerance: any;
|
|
10
|
+
createDiff: any;
|
|
11
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint @typescript-eslint/no-var-requires: "off" */
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
27
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
28
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
29
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
30
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
31
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
32
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.capture = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const { promisify } = require('util');
|
|
39
|
+
const webdriver = require('selenium-webdriver');
|
|
40
|
+
const { Builder, By } = webdriver;
|
|
41
|
+
const chrome = require('selenium-webdriver/chrome');
|
|
42
|
+
const firefox = require('selenium-webdriver/firefox');
|
|
43
|
+
const path = require('path');
|
|
44
|
+
const looksSameCallback = require('looks-same');
|
|
45
|
+
const looksSame = promisify(looksSameCallback);
|
|
46
|
+
const sharp = require('sharp');
|
|
47
|
+
const WIDTH = 1024;
|
|
48
|
+
const HEIGHT = 768;
|
|
49
|
+
function capture({ browser, host, pages, root, output, viewportSize, selector, tolerance, createDiff }) {
|
|
50
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
const size = viewportSize || { width: WIDTH, height: HEIGHT };
|
|
52
|
+
const ChromeOptions = new chrome.Options()
|
|
53
|
+
.headless()
|
|
54
|
+
.addArguments('--force-device-scale-factor=1')
|
|
55
|
+
.addArguments('--disable-extensions')
|
|
56
|
+
.addArguments('--disable-notifications')
|
|
57
|
+
.addArguments('--ignore-certificate-errors')
|
|
58
|
+
.windowSize(size);
|
|
59
|
+
const FirefoxOptions = new firefox.Options()
|
|
60
|
+
.headless()
|
|
61
|
+
.windowSize(size);
|
|
62
|
+
const driver = new Builder()
|
|
63
|
+
.forBrowser(browser)
|
|
64
|
+
.setChromeOptions(ChromeOptions)
|
|
65
|
+
.setFirefoxOptions(FirefoxOptions)
|
|
66
|
+
.build();
|
|
67
|
+
yield setViewportSize(driver, size);
|
|
68
|
+
// console.time('runTests');
|
|
69
|
+
try {
|
|
70
|
+
for (const page of pages) {
|
|
71
|
+
const name = path.basename(page, '.html');
|
|
72
|
+
const url = host + page;
|
|
73
|
+
const relativePath = path.relative(root, page);
|
|
74
|
+
const outputPath = path.dirname(path.join(output, relativePath));
|
|
75
|
+
fs.mkdirSync(outputPath, { recursive: true });
|
|
76
|
+
// console.group(`Running test for ${url}...`);
|
|
77
|
+
// console.time('runTest');
|
|
78
|
+
yield runTest({ driver, url, name, outputPath, selector, tolerance, createDiff });
|
|
79
|
+
// console.timeEnd('runTest');
|
|
80
|
+
// console.groupEnd();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
console.error('Error during capture:', e);
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
// console.time('driver quit');
|
|
88
|
+
yield driver.quit();
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
exports.capture = capture;
|
|
93
|
+
function setViewportSize(driver, size) {
|
|
94
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
+
const { innerSize, outerSize } = yield driver.executeScript(`
|
|
96
|
+
return {
|
|
97
|
+
outerSize: {
|
|
98
|
+
width: window.outerWidth,
|
|
99
|
+
height: window.outerHeight
|
|
100
|
+
},
|
|
101
|
+
innerSize: {
|
|
102
|
+
width: window.innerWidth,
|
|
103
|
+
height: window.innerHeight
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
`);
|
|
107
|
+
const chromeSize = {
|
|
108
|
+
width: outerSize.width - innerSize.width,
|
|
109
|
+
height: outerSize.height - innerSize.height
|
|
110
|
+
};
|
|
111
|
+
const width = size.width + chromeSize.width;
|
|
112
|
+
const height = size.height + chromeSize.height;
|
|
113
|
+
yield driver.manage().window().setRect(width, height);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
function elementOrViewport(driver, selector) {
|
|
117
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
118
|
+
let element;
|
|
119
|
+
try {
|
|
120
|
+
element = yield driver.findElement(By.css(selector));
|
|
121
|
+
// console.log(`Taking screenshot of element ${selector}`);
|
|
122
|
+
return element;
|
|
123
|
+
}
|
|
124
|
+
catch (e) {
|
|
125
|
+
// console.log('Taking screenshot of viewport');
|
|
126
|
+
return driver;
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
const writeFile = (png, filename) => __awaiter(void 0, void 0, void 0, function* () {
|
|
131
|
+
const optimized = yield sharp(png).png().toBuffer();
|
|
132
|
+
fs.writeFileSync(filename, optimized);
|
|
133
|
+
});
|
|
134
|
+
const createDiffImage = (current, reference, filename, tolerance) => {
|
|
135
|
+
const diffImageSettings = {
|
|
136
|
+
reference,
|
|
137
|
+
current,
|
|
138
|
+
diff: filename,
|
|
139
|
+
highlightColor: '#ff00ff',
|
|
140
|
+
strict: false,
|
|
141
|
+
tolerance: tolerance
|
|
142
|
+
};
|
|
143
|
+
looksSame.createDiff(diffImageSettings);
|
|
144
|
+
};
|
|
145
|
+
function runTest({ driver, url, name, outputPath, selector, tolerance, createDiff }) {
|
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
// console.time('driver.get url');
|
|
148
|
+
yield driver.get(url);
|
|
149
|
+
// console.timeEnd('driver.get url');
|
|
150
|
+
// console.time('driver.findElement');
|
|
151
|
+
const element = yield elementOrViewport(driver, selector);
|
|
152
|
+
// console.timeEnd('driver.findElement'); // eslint-disable-line padding-line-between-statements
|
|
153
|
+
// console.time('driver.takeScreenshot');
|
|
154
|
+
const data = yield element.takeScreenshot();
|
|
155
|
+
// console.timeEnd('driver.takeScreenshot'); // eslint-disable-line padding-line-between-statements
|
|
156
|
+
const png = Buffer.from(data, 'base64');
|
|
157
|
+
const filename = `./${outputPath}/${name}.png`;
|
|
158
|
+
const diffname = `./${outputPath}/${name}_diff_${Date.now()}.png`;
|
|
159
|
+
if (!fs.existsSync(filename)) {
|
|
160
|
+
// initial run, write file
|
|
161
|
+
yield writeFile(png, filename);
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
// console.time('looksSame.compare');
|
|
165
|
+
const { equal } = yield looksSame(png, filename, { strict: false, tolerance: tolerance });
|
|
166
|
+
// console.timeEnd('looksSame.compare');
|
|
167
|
+
// overwrite file only if there are visual differences
|
|
168
|
+
if (!equal) {
|
|
169
|
+
if (createDiff) {
|
|
170
|
+
// console.time('looksSame.createDiff');
|
|
171
|
+
createDiffImage(png, filename, diffname, tolerance);
|
|
172
|
+
// console.timeEnd('looksSame.createDiff');
|
|
173
|
+
}
|
|
174
|
+
yield writeFile(png, filename);
|
|
175
|
+
}
|
|
176
|
+
return true;
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/snapshot-cli/capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/* eslint @typescript-eslint/no-var-requires: "off" */
|
|
4
|
+
/* eslint @typescript-eslint/ban-ts-comment: "off" */
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const capture_1 = require("./capture");
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
const glob = require('glob');
|
|
9
|
+
const program = require('commander');
|
|
10
|
+
const { createServer } = require('http-server');
|
|
11
|
+
const version = JSON.parse(fs.readFileSync(`${__dirname}/../../package.json`, { encoding: 'utf-8' })).version;
|
|
12
|
+
const configName = `${process.cwd()}/.snapshotrc`;
|
|
13
|
+
function readConfig() {
|
|
14
|
+
if (!fs.existsSync(configName)) {
|
|
15
|
+
console.info('No config file found. Using defaults.');
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
return JSON.parse(fs.readFileSync(configName, { encoding: 'utf-8' }));
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
console.error('Can not parse .snapshotrc');
|
|
23
|
+
console.error(e);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const snapshotrc = readConfig();
|
|
28
|
+
function parseViewportSize(val) {
|
|
29
|
+
val = val.split(',');
|
|
30
|
+
return { width: Number(val[0]), height: Number(val[1]) };
|
|
31
|
+
}
|
|
32
|
+
program
|
|
33
|
+
.version(version)
|
|
34
|
+
.usage('[options] ')
|
|
35
|
+
.option('--output <dir>', 'Output directory for the captured screenshots', snapshotrc.output || 'snapshots')
|
|
36
|
+
.option('--serve <glob>', 'Pages to serve with an embedded HTTP server', snapshotrc.serve || false)
|
|
37
|
+
.option('--port <number>', 'Port number for the embedded HTTP server (--serve)', snapshotrc.port || 8081)
|
|
38
|
+
.option('--browser <firefox|chrome>', 'Browser that will take screenshots', snapshotrc.browser || 'firefox')
|
|
39
|
+
.option('--viewport-size <width,height>', 'Initial window size (default: 1024,768)', parseViewportSize)
|
|
40
|
+
.option('--selector <css selector>', 'Scope screenshot to specific selector. Leave empty for viewport', snapshotrc.selector || '')
|
|
41
|
+
.option('--tolerance <number>', 'Tolerance to use when comparing', snapshotrc.tolerance || 0)
|
|
42
|
+
.option('--create-diff <boolean>', 'Create diff image', snapshotrc.createDiff || false)
|
|
43
|
+
.parse(process.argv);
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
const { browser, serve, port, output, viewportSize, selector, tolerance, createDiff } = Object.assign(Object.assign({}, snapshotrc), program);
|
|
46
|
+
// @ts-ignore
|
|
47
|
+
const pages = glob.sync(serve);
|
|
48
|
+
const root = serve.substring(0, serve.indexOf('*') - 1);
|
|
49
|
+
const server = createServer({
|
|
50
|
+
root: './',
|
|
51
|
+
showDotfiles: false,
|
|
52
|
+
port
|
|
53
|
+
});
|
|
54
|
+
server.listen(port);
|
|
55
|
+
(0, capture_1.capture)({
|
|
56
|
+
host: `http://localhost:${port}/`,
|
|
57
|
+
browser,
|
|
58
|
+
output,
|
|
59
|
+
pages,
|
|
60
|
+
root,
|
|
61
|
+
viewportSize,
|
|
62
|
+
selector,
|
|
63
|
+
tolerance,
|
|
64
|
+
createDiff
|
|
65
|
+
})
|
|
66
|
+
.then(() => {
|
|
67
|
+
server.close();
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/snapshot-cli/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@progress/kendo-e2e",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "Kendo UI end-to-end test utilities.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"snapshot": "./dist/snapshot-cli/index.js"
|
|
8
|
+
},
|
|
6
9
|
"typings": "dist/index.d.ts",
|
|
7
10
|
"files": [
|
|
8
11
|
"dist"
|
|
9
12
|
],
|
|
10
13
|
"scripts": {
|
|
11
|
-
"lint": "npx eslint src/**/*.ts tests/**/*.ts",
|
|
12
|
-
"build": "
|
|
14
|
+
"lint": "npx eslint ./src/**/*.ts ./tests/**/*.ts",
|
|
15
|
+
"build": "npx tsc",
|
|
13
16
|
"test:a11y": "npx jest tests/a11y",
|
|
14
17
|
"test:e2e": "npx jest tests/e2e",
|
|
15
18
|
"test:rendering": "npx jest tests/rendering",
|
|
16
19
|
"test:visual": "npx jest tests/visual",
|
|
20
|
+
"test:snapshot": "cd tests/snapshot-cli && chmod +x run.sh && ./run.sh",
|
|
17
21
|
"semantic-release": "semantic-release"
|
|
18
22
|
},
|
|
19
23
|
"repository": {
|
|
@@ -28,6 +32,10 @@
|
|
|
28
32
|
{
|
|
29
33
|
"name": "master",
|
|
30
34
|
"channel": "latest"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "snapshot-cli",
|
|
38
|
+
"channel": "dev"
|
|
31
39
|
}
|
|
32
40
|
]
|
|
33
41
|
},
|
|
@@ -53,6 +61,9 @@
|
|
|
53
61
|
"dependencies": {
|
|
54
62
|
"@axe-core/webdriverjs": "4.8.1",
|
|
55
63
|
"@types/selenium-webdriver": "4.1.19",
|
|
64
|
+
"commander": "^2.13.0",
|
|
65
|
+
"glob": "^7.1.6",
|
|
66
|
+
"http-server": "^14.1.1",
|
|
56
67
|
"js-beautify": "^1.14.7",
|
|
57
68
|
"jsdom": "^16.7.0",
|
|
58
69
|
"looks-same": "^7.3.0",
|
|
@@ -60,7 +71,8 @@
|
|
|
60
71
|
"react": "^18.2.0",
|
|
61
72
|
"react-dom": "^18.2.0",
|
|
62
73
|
"sanitize-html": "^2.10.0",
|
|
63
|
-
"selenium-webdriver": "4.15.0"
|
|
74
|
+
"selenium-webdriver": "4.15.0",
|
|
75
|
+
"sharp": "^0.33.0"
|
|
64
76
|
},
|
|
65
77
|
"devDependencies": {
|
|
66
78
|
"@commitlint/cli": "^17.6.6",
|