@axe-core/watcher 3.7.0 → 3.8.0-next.90fda9a4
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/README.md +13 -2
- package/dist/Controller.js +69 -86
- package/dist/Controller.js.map +1 -1
- package/dist/EventForwarder.js +3 -12
- package/dist/EventForwarder.js.map +1 -1
- package/dist/cypress.js +16 -28
- package/dist/cypress.js.map +1 -1
- package/dist/playwright.js +10 -28
- package/dist/playwright.js.map +1 -1
- package/dist/playwrightTest.js +15 -35
- package/dist/playwrightTest.js.map +1 -1
- package/dist/playwrightWrapping.js +60 -69
- package/dist/playwrightWrapping.js.map +1 -1
- package/dist/puppeteer.d.ts +1 -1
- package/dist/puppeteer.js +19 -30
- package/dist/puppeteer.js.map +1 -1
- package/dist/puppeteerWrapping.js +68 -66
- package/dist/puppeteerWrapping.js.map +1 -1
- package/dist/sendResultsToServer.js +12 -17
- package/dist/sendResultsToServer.js.map +1 -1
- package/dist/util.js +4 -13
- package/dist/util.js.map +1 -1
- package/dist/wdio.js +26 -40
- package/dist/wdio.js.map +1 -1
- package/dist/webdriver.js +4 -15
- package/dist/webdriver.js.map +1 -1
- package/dist/webdriverWrapping.js +21 -30
- package/dist/webdriverWrapping.js.map +1 -1
- package/extension/background.js +1 -1
- package/extension/content.js +1 -1
- package/extension/content.js.LICENSE.txt +1 -1
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
# @axe-core/watcher
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Watcher automatically:
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
1. Adds accessibility scans to your end-to-end tests. Change a few lines of configuration code and you're ready to go.
|
|
6
|
+
2. Sends results to [axe Developer Hub](https://docs.deque.com/developer-hub).
|
|
7
|
+
|
|
8
|
+
From axe Developer Hub, software teams can get actionable reports. The reports are amazing because:
|
|
9
|
+
|
|
10
|
+
1. Accessibility issues are deduplicated!
|
|
11
|
+
2. Reports are "git aware", making it easy to spot new issues caused by your code changes. No more wading through technical debt.
|
|
12
|
+
3. Issues are prioritized by impact, helping you focus on the most important issues first.
|
|
13
|
+
|
|
14
|
+
Cypress, Playwright, Puppeteer, and Webdriver frameworks are all supported. Test results can be integrated with [GitHub Actions](https://docs.deque.com/developer-hub/2/en/dh-github-action) and a REST endpoint is provided so that other CI/CD systems are easy to setup.
|
|
15
|
+
|
|
16
|
+
Deque Systems has a [free and paid plan](https://www.deque.com/axe/developer-hub/) available, making axe Developer Hub suitable for all types of projects - open-source to enterprise.
|
|
6
17
|
|
|
7
18
|
For support on axe-core, watcher, and accessibility in general, please join the [axe community Slack](https://accessibility.deque.com/axe-community).
|
package/dist/Controller.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -18,94 +9,86 @@ class Controller {
|
|
|
18
9
|
constructor() {
|
|
19
10
|
this.isStopped = false;
|
|
20
11
|
}
|
|
21
|
-
start() {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
window.dispatchEvent(event);
|
|
37
|
-
});
|
|
12
|
+
async start() {
|
|
13
|
+
(0, util_1.updateAutoAnalyze)(true);
|
|
14
|
+
this.isStopped = false;
|
|
15
|
+
await this.executeScript(() => {
|
|
16
|
+
if (!['http:', 'https:', 'file:'].includes(window.location.protocol)) {
|
|
17
|
+
return Promise.resolve();
|
|
18
|
+
}
|
|
19
|
+
return new Promise(resolve => {
|
|
20
|
+
const fn = () => {
|
|
21
|
+
window.removeEventListener('axe:start-auto-mode-done', fn);
|
|
22
|
+
resolve();
|
|
23
|
+
};
|
|
24
|
+
window.addEventListener('axe:start-auto-mode-done', fn);
|
|
25
|
+
const event = new CustomEvent('axe:start-auto-mode');
|
|
26
|
+
window.dispatchEvent(event);
|
|
38
27
|
});
|
|
39
28
|
});
|
|
40
29
|
}
|
|
41
|
-
stop() {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
window.dispatchEvent(event);
|
|
57
|
-
});
|
|
30
|
+
async stop() {
|
|
31
|
+
(0, util_1.updateAutoAnalyze)(false);
|
|
32
|
+
this.isStopped = true;
|
|
33
|
+
await this.executeScript(() => {
|
|
34
|
+
if (!['http:', 'https:', 'file:'].includes(window.location.protocol)) {
|
|
35
|
+
return Promise.resolve();
|
|
36
|
+
}
|
|
37
|
+
return new Promise(resolve => {
|
|
38
|
+
const fn = () => {
|
|
39
|
+
window.removeEventListener('axe:stop-auto-mode-done', fn);
|
|
40
|
+
resolve();
|
|
41
|
+
};
|
|
42
|
+
window.addEventListener('axe:stop-auto-mode-done', fn);
|
|
43
|
+
const event = new CustomEvent('axe:stop-auto-mode');
|
|
44
|
+
window.dispatchEvent(event);
|
|
58
45
|
});
|
|
59
46
|
});
|
|
60
47
|
}
|
|
61
|
-
analyze({ __UserRequestedAnalyze = true } = {}) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
48
|
+
async analyze({ __UserRequestedAnalyze = true } = {}) {
|
|
49
|
+
// If the user didn't request an analyze, and we're in manual mode, don't do anything.
|
|
50
|
+
if (this.isStopped && !__UserRequestedAnalyze) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
await this.executeScript((userRequestedAnalyze) => {
|
|
54
|
+
if (!['http:', 'https:', 'file:'].includes(window.location.protocol)) {
|
|
55
|
+
return Promise.resolve();
|
|
66
56
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
};
|
|
76
|
-
window.addEventListener('axe:manual-mode-analyze-done', fn);
|
|
77
|
-
const event = new CustomEvent('axe:manual-mode-analyze', {
|
|
78
|
-
detail: { userRequestedAnalyze }
|
|
79
|
-
});
|
|
80
|
-
window.dispatchEvent(event);
|
|
57
|
+
return new Promise(resolve => {
|
|
58
|
+
const fn = () => {
|
|
59
|
+
window.removeEventListener('axe:manual-mode-analyze-done', fn);
|
|
60
|
+
resolve();
|
|
61
|
+
};
|
|
62
|
+
window.addEventListener('axe:manual-mode-analyze-done', fn);
|
|
63
|
+
const event = new CustomEvent('axe:manual-mode-analyze', {
|
|
64
|
+
detail: { userRequestedAnalyze }
|
|
81
65
|
});
|
|
82
|
-
|
|
83
|
-
|
|
66
|
+
window.dispatchEvent(event);
|
|
67
|
+
});
|
|
68
|
+
}, __UserRequestedAnalyze);
|
|
84
69
|
}
|
|
85
|
-
flush() {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
window.dispatchEvent(event);
|
|
105
|
-
});
|
|
70
|
+
async flush() {
|
|
71
|
+
const results = await this.executeScript(() => {
|
|
72
|
+
if (!['http:', 'https:', 'file:'].includes(window.location.protocol)) {
|
|
73
|
+
return Promise.resolve([]);
|
|
74
|
+
}
|
|
75
|
+
return new Promise(resolve => {
|
|
76
|
+
const receivedResults = [];
|
|
77
|
+
const onFlushEnd = () => {
|
|
78
|
+
window.removeEventListener('axe:flush-end', onFlushEnd);
|
|
79
|
+
window.removeEventListener('axe:result', onAxeResult);
|
|
80
|
+
resolve(receivedResults);
|
|
81
|
+
};
|
|
82
|
+
const onAxeResult = (e) => {
|
|
83
|
+
receivedResults.push(...e.detail);
|
|
84
|
+
};
|
|
85
|
+
window.addEventListener('axe:result', onAxeResult);
|
|
86
|
+
window.addEventListener('axe:flush-end', onFlushEnd);
|
|
87
|
+
const event = new CustomEvent('axe:flush-start');
|
|
88
|
+
window.dispatchEvent(event);
|
|
106
89
|
});
|
|
107
|
-
yield (0, sendResultsToServer_1.default)(results);
|
|
108
90
|
});
|
|
91
|
+
await (0, sendResultsToServer_1.default)(results);
|
|
109
92
|
}
|
|
110
93
|
}
|
|
111
94
|
exports.default = Controller;
|
package/dist/Controller.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Controller.js","sourceRoot":"","sources":["../src/Controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Controller.js","sourceRoot":"","sources":["../src/Controller.ts"],"names":[],"mappings":"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"}
|
package/dist/EventForwarder.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -44,11 +35,11 @@ class EventForwarder {
|
|
|
44
35
|
}
|
|
45
36
|
else {
|
|
46
37
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
47
|
-
on(event, (...args) =>
|
|
38
|
+
on(event, async (...args) => {
|
|
48
39
|
for (const listener of this.emitter.listeners(event)) {
|
|
49
|
-
|
|
40
|
+
await listener(...args);
|
|
50
41
|
}
|
|
51
|
-
})
|
|
42
|
+
});
|
|
52
43
|
}
|
|
53
44
|
}
|
|
54
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventForwarder.js","sourceRoot":"","sources":["../src/EventForwarder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EventForwarder.js","sourceRoot":"","sources":["../src/EventForwarder.ts"],"names":[],"mappings":";;;;;AAYA,kEAAwC;AAExC,MAAM,cAAc;IAKlB;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,uBAAY,EAAE,CAAA;QACjC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACf,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAQ,EAAE;YAC7B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAqC,CAAC,CAAA;YAChE,CAAC;QACH,CAAC,CAAA;IACH,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,EAAwB;QACrC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;YAC9C,0EAA0E;YAC1E,wEAAwE;YACxE,uBAAuB;YACvB,IAAI,KAAK,KAAK,uBAAuB,EAAE,CAAC;gBACtC,EAAE,CACA,uBAAuB,EACvB,CACE,OAAwB,EACxB,aAAiD,EACjD,EAAE,CACF,IAAI,CAAC,OAAO;qBACT,SAAS,CAAC,KAAK,CAAC;qBAChB,MAAM,CACL,CAAC,iBAAiB,EAAE,QAAQ,EAAE,EAAE,CAC9B,QAAQ,CACN,OAAO,EACP,iBAAiB,CAC+B,EACpD,aAAa,CACd,CACN,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,iEAAiE;gBACjE,EAAE,CAAC,KAAY,EAAE,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;oBAC5C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;wBACrD,MAAM,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAA;oBACzB,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,kBAAe,cAAc,CAAA"}
|
package/dist/cypress.js
CHANGED
|
@@ -1,24 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
12
|
-
var t = {};
|
|
13
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
14
|
-
t[p] = s[p];
|
|
15
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
16
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
18
|
-
t[p[i]] = s[p[i]];
|
|
19
|
-
}
|
|
20
|
-
return t;
|
|
21
|
-
};
|
|
22
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
4
|
};
|
|
@@ -34,10 +14,12 @@ const EventForwarder_1 = __importDefault(require("./EventForwarder"));
|
|
|
34
14
|
* @param config Cypress config to extend
|
|
35
15
|
*/
|
|
36
16
|
const cypressConfig = (config) => {
|
|
37
|
-
const { axe
|
|
38
|
-
(0, util_1.writeVariables)(
|
|
17
|
+
const { axe, ...userConfig } = config;
|
|
18
|
+
(0, util_1.writeVariables)({
|
|
19
|
+
...axe,
|
|
39
20
|
// Let the extension know to check for Cypress frames.
|
|
40
|
-
cypress: true
|
|
21
|
+
cypress: true
|
|
22
|
+
});
|
|
41
23
|
(0, util_1.writeManifest)({
|
|
42
24
|
all_frames: true,
|
|
43
25
|
exclude_globs: [
|
|
@@ -47,7 +29,11 @@ const cypressConfig = (config) => {
|
|
|
47
29
|
'*/__cypress/iframes/*'
|
|
48
30
|
]
|
|
49
31
|
});
|
|
50
|
-
return
|
|
32
|
+
return {
|
|
33
|
+
...userConfig,
|
|
34
|
+
e2e: {
|
|
35
|
+
...userConfig.e2e,
|
|
36
|
+
setupNodeEvents(cypressOn, ...args) {
|
|
51
37
|
var _a, _b;
|
|
52
38
|
/**
|
|
53
39
|
* If the user supplies `setupNodeEvents` config and registers events using `on` handler
|
|
@@ -89,7 +75,7 @@ const cypressConfig = (config) => {
|
|
|
89
75
|
return launchOptions;
|
|
90
76
|
});
|
|
91
77
|
// Read the results sent from the extension, then forward to the server.
|
|
92
|
-
on('after:run', () =>
|
|
78
|
+
on('after:run', async () => {
|
|
93
79
|
let results;
|
|
94
80
|
try {
|
|
95
81
|
results = fs_1.default
|
|
@@ -107,16 +93,18 @@ const cypressConfig = (config) => {
|
|
|
107
93
|
for (const result of results) {
|
|
108
94
|
const data = fs_1.default.readFileSync(`cypress/axe-watcher/${result}`, 'utf8');
|
|
109
95
|
const parsed = JSON.parse(data);
|
|
110
|
-
|
|
96
|
+
await (0, sendResultsToServer_1.default)(parsed);
|
|
111
97
|
fs_1.default.unlinkSync(`cypress/axe-watcher/${result}`);
|
|
112
98
|
}
|
|
113
|
-
})
|
|
99
|
+
});
|
|
114
100
|
/**
|
|
115
101
|
* Forward the accumulated events to cypress.
|
|
116
102
|
* For more information, see commnet on #44
|
|
117
103
|
*/
|
|
118
104
|
eventForwarder.forward(cypressOn);
|
|
119
|
-
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
120
108
|
};
|
|
121
109
|
exports.cypressConfig = cypressConfig;
|
|
122
110
|
//# sourceMappingURL=cypress.js.map
|
package/dist/cypress.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cypress.js","sourceRoot":"","sources":["../src/cypress.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cypress.js","sourceRoot":"","sources":["../src/cypress.ts"],"names":[],"mappings":"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"}
|
package/dist/playwright.js
CHANGED
|
@@ -1,24 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
12
|
-
var t = {};
|
|
13
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
14
|
-
t[p] = s[p];
|
|
15
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
16
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
18
|
-
t[p[i]] = s[p[i]];
|
|
19
|
-
}
|
|
20
|
-
return t;
|
|
21
|
-
};
|
|
22
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
4
|
};
|
|
@@ -32,14 +12,18 @@ const Controller_1 = __importDefault(require("./Controller"));
|
|
|
32
12
|
* @param opts Playwright config to extend
|
|
33
13
|
*/
|
|
34
14
|
function playwrightConfig(opts) {
|
|
35
|
-
const { axe
|
|
15
|
+
const { axe, ...config } = opts;
|
|
36
16
|
let { args = [] } = config;
|
|
37
17
|
(0, util_1.writeVariables)(axe);
|
|
38
18
|
if (config.headless) {
|
|
39
19
|
throw new util_1.HeadlessNotSupportedError('In Playwright, include "--headless=new" in the "args" property of your options instead of using "headless: true"');
|
|
40
20
|
}
|
|
41
21
|
args = args.concat(util_1.extensionArgs);
|
|
42
|
-
return
|
|
22
|
+
return {
|
|
23
|
+
...config,
|
|
24
|
+
headless: false,
|
|
25
|
+
args
|
|
26
|
+
};
|
|
43
27
|
}
|
|
44
28
|
exports.playwrightConfig = playwrightConfig;
|
|
45
29
|
class PlaywrightController extends Controller_1.default {
|
|
@@ -47,12 +31,10 @@ class PlaywrightController extends Controller_1.default {
|
|
|
47
31
|
super();
|
|
48
32
|
this.driver = driver;
|
|
49
33
|
}
|
|
50
|
-
executeScript(fn, ...args) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return result;
|
|
55
|
-
});
|
|
34
|
+
async executeScript(fn, ...args) {
|
|
35
|
+
const [arg] = args || [];
|
|
36
|
+
const result = await this.driver.evaluate(fn, arg);
|
|
37
|
+
return result;
|
|
56
38
|
}
|
|
57
39
|
}
|
|
58
40
|
exports.PlaywrightController = PlaywrightController;
|
package/dist/playwright.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright.js","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"playwright.js","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":";;;;;;AACA,iCAKe;AACf,8DAAqC;AAKrC;;;;GAIG;AAEH,SAAgB,gBAAgB,CAAC,IAAa;IAC5C,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAA;IAC/B,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,MAAM,CAAA;IAE1B,IAAA,qBAAc,EAAC,GAAG,CAAC,CAAA;IAEnB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,IAAI,gCAAyB,CACjC,kHAAkH,CACnH,CAAA;IACH,CAAC;IAED,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAa,CAAC,CAAA;IAEjC,OAAO;QACL,GAAG,MAAM;QACT,QAAQ,EAAE,KAAK;QACf,IAAI;KACL,CAAA;AACH,CAAC;AAnBD,4CAmBC;AAED,MAAa,oBAAqB,SAAQ,oBAAU;IAGlD,YAAY,MAAY;QACtB,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,EAA+B,EAC/B,GAAG,IAAe;QAElB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAA;QACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAI,EAAE,EAAE,GAAG,CAAC,CAAA;QACrD,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAhBD,oDAgBC;AAED;;GAEG;AACI,MAAM,cAAc,GAAG;AAC5B,6DAA6D;AAC7D,cAA8B;AAC9B,6DAA6D;AAC7D,oBAA0C,EAC1B,EAAE;IAClB,MAAM,IAAI,KAAK,CAAC;;;;;;GAMf,CAAC,CAAA;AACJ,CAAC,CAAA;AAbY,QAAA,cAAc,kBAa1B;AAED,2DAAqE;AAA5D,wHAAA,QAAQ,OAAsB"}
|
package/dist/playwrightTest.js
CHANGED
|
@@ -1,24 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
12
|
-
var t = {};
|
|
13
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
14
|
-
t[p] = s[p];
|
|
15
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
16
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
18
|
-
t[p[i]] = s[p[i]];
|
|
19
|
-
}
|
|
20
|
-
return t;
|
|
21
|
-
};
|
|
22
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
3
|
const playwright_1 = require("./playwright");
|
|
24
4
|
const util_1 = require("./util");
|
|
@@ -31,10 +11,7 @@ const util_1 = require("./util");
|
|
|
31
11
|
*/
|
|
32
12
|
const playwrightTest = (options) => {
|
|
33
13
|
let controller = null;
|
|
34
|
-
const { axe
|
|
35
|
-
// We must lazily require the `@playwright/test` package, as
|
|
36
|
-
// users of other platforms won't have it installed.
|
|
37
|
-
, ["axe"]);
|
|
14
|
+
const { axe, ...config } = options;
|
|
38
15
|
// We must lazily require the `@playwright/test` package, as
|
|
39
16
|
// users of other platforms won't have it installed.
|
|
40
17
|
let base;
|
|
@@ -53,20 +30,23 @@ const playwrightTest = (options) => {
|
|
|
53
30
|
// Error: First argument must use the object destructuring pattern:
|
|
54
31
|
//
|
|
55
32
|
// eslint-disable-next-line no-empty-pattern
|
|
56
|
-
context: ({}, use) =>
|
|
57
|
-
const context =
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
33
|
+
context: async ({}, use) => {
|
|
34
|
+
const context = await chromium.launchPersistentContext('', {
|
|
35
|
+
...config,
|
|
36
|
+
args: [...(config.args || []), ...util_1.extensionArgs]
|
|
37
|
+
});
|
|
38
|
+
await use(context);
|
|
39
|
+
await context.close();
|
|
40
|
+
},
|
|
41
|
+
page: async ({ page }, use) => {
|
|
62
42
|
controller = new playwright_1.PlaywrightController(page);
|
|
63
43
|
page = (0, playwright_1.wrapPlaywrightPage)(page, controller);
|
|
64
|
-
|
|
65
|
-
}
|
|
44
|
+
await use(page);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
test.afterEach(async () => {
|
|
48
|
+
await (controller === null || controller === void 0 ? void 0 : controller.flush());
|
|
66
49
|
});
|
|
67
|
-
test.afterEach(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
68
|
-
yield (controller === null || controller === void 0 ? void 0 : controller.flush());
|
|
69
|
-
}));
|
|
70
50
|
const expect = test.expect;
|
|
71
51
|
return { test, expect };
|
|
72
52
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwrightTest.js","sourceRoot":"","sources":["../src/playwrightTest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"playwrightTest.js","sourceRoot":"","sources":["../src/playwrightTest.ts"],"names":[],"mappings":";;AAUA,6CAIqB;AACrB,iCAAsD;AAYtD;;;;;;GAMG;AAEH,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAe,EAAE;IACvD,IAAI,UAAU,GAAgC,IAAI,CAAA;IAClD,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,CAAA;IAElC,4DAA4D;IAC5D,oDAAoD;IACpD,IAAI,IAAU,CAAA;IACd,IAAI,QAAsC,CAAA;IAC1C,IAAI,CAAC;QACH,CAAC;QAAA,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,mCAAmC,GAAI,KAAe,CAAC,OAAO,CAC/D,CAAA;IACH,CAAC;IAED,IAAA,qBAAc,EAAC,GAAG,CAAC,CAAA;IAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACvB,0EAA0E;QAC1E,EAAE;QACF,mEAAmE;QACnE,EAAE;QACF,4CAA4C;QAC5C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,uBAAuB,CAAC,EAAE,EAAE;gBACzD,GAAG,MAAM;gBACT,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,oBAAa,CAAC;aACjD,CAAC,CAAA;YACF,MAAM,GAAG,CAAC,OAAO,CAAC,CAAA;YAClB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QACvB,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;YAC5B,UAAU,GAAG,IAAI,iCAAoB,CAAC,IAAI,CAAC,CAAA;YAC3C,IAAI,GAAG,IAAA,+BAAkB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAA;YAC3C,MAAM,GAAG,CAAC,IAAI,CAAC,CAAA;QACjB,CAAC;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,EAAE,CAAA,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAE1B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACzB,CAAC,CAAA;AAED,kBAAe,cAAc,CAAA"}
|