doc-detective 4.22.0 → 4.23.0
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/common/src/schemas/schemas.json +274 -74
- package/dist/common/src/types/generated/config_v3.d.ts +1 -1
- package/dist/common/src/types/generated/context_v3.d.ts +1 -1
- package/dist/common/src/types/generated/report_v3.d.ts +1 -1
- package/dist/common/src/types/generated/resolvedTests_v3.d.ts +2 -2
- package/dist/common/src/types/generated/spec_v3.d.ts +1 -1
- package/dist/common/src/types/generated/test_v3.d.ts +1 -1
- package/dist/core/appium.d.ts +2 -1
- package/dist/core/appium.d.ts.map +1 -1
- package/dist/core/appium.js +47 -13
- package/dist/core/appium.js.map +1 -1
- package/dist/core/ptyProbeWorker.d.ts +2 -0
- package/dist/core/ptyProbeWorker.d.ts.map +1 -0
- package/dist/core/ptyProbeWorker.js +61 -0
- package/dist/core/ptyProbeWorker.js.map +1 -0
- package/dist/core/ptyWatchdog.d.ts +77 -0
- package/dist/core/ptyWatchdog.d.ts.map +1 -0
- package/dist/core/ptyWatchdog.js +179 -0
- package/dist/core/ptyWatchdog.js.map +1 -0
- package/dist/core/resolveTests.d.ts.map +1 -1
- package/dist/core/resolveTests.js +16 -4
- package/dist/core/resolveTests.js.map +1 -1
- package/dist/core/tests/appSurface.d.ts +21 -2
- package/dist/core/tests/appSurface.d.ts.map +1 -1
- package/dist/core/tests/appSurface.js +117 -3
- package/dist/core/tests/appSurface.js.map +1 -1
- package/dist/core/tests/browserWait.d.ts +1 -1
- package/dist/core/tests/browserWait.d.ts.map +1 -1
- package/dist/core/tests/browserWait.js +108 -84
- package/dist/core/tests/browserWait.js.map +1 -1
- package/dist/core/tests/findElement.d.ts.map +1 -1
- package/dist/core/tests/findElement.js +16 -5
- package/dist/core/tests/findElement.js.map +1 -1
- package/dist/core/tests/mobileBrowser.d.ts +46 -0
- package/dist/core/tests/mobileBrowser.d.ts.map +1 -0
- package/dist/core/tests/mobileBrowser.js +140 -0
- package/dist/core/tests/mobileBrowser.js.map +1 -0
- package/dist/core/tests/mobilePlatform.d.ts +1 -7
- package/dist/core/tests/mobilePlatform.d.ts.map +1 -1
- package/dist/core/tests/mobilePlatform.js +5 -27
- package/dist/core/tests/mobilePlatform.js.map +1 -1
- package/dist/core/tests.d.ts +7 -1
- package/dist/core/tests.d.ts.map +1 -1
- package/dist/core/tests.js +234 -58
- package/dist/core/tests.js.map +1 -1
- package/dist/core/utils.d.ts.map +1 -1
- package/dist/core/utils.js +26 -1
- package/dist/core/utils.js.map +1 -1
- package/dist/index.cjs +1039 -409
- package/dist/runtime/loader.d.ts.map +1 -1
- package/dist/runtime/loader.js +76 -0
- package/dist/runtime/loader.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,13 +2,15 @@ export { waitForNetworkIdle, waitForDOMStable };
|
|
|
2
2
|
// Page-readiness probes shared by goTo (navigation waitUntil) and typeKeys
|
|
3
3
|
// (browser-surface waitUntil). Moved out of goTo.ts so typeKeys can reuse
|
|
4
4
|
// them without a goTo → findElement → typeKeys → goTo import cycle.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
//
|
|
6
|
+
// Both probes inject a monitor global and poll it. The poll treats a MISSING
|
|
7
|
+
// monitor as "the page changed under us" (a navigation/redirect completing
|
|
8
|
+
// mid-wait replaces the window and wipes the global — observed on Safari,
|
|
9
|
+
// including the phase A5 XCUITest web context) and re-injects instead of
|
|
10
|
+
// throwing, so a page swap restarts the measurement rather than failing the
|
|
11
|
+
// whole navigation wait.
|
|
12
|
+
// Inject the network monitor global (idempotent per page).
|
|
13
|
+
async function injectNetworkMonitor(driver) {
|
|
12
14
|
await driver.execute(() => {
|
|
13
15
|
if (!window.__docDetectiveNetworkMonitor) {
|
|
14
16
|
const originalFetch = window.fetch;
|
|
@@ -32,59 +34,80 @@ async function waitForNetworkIdle(driver, idleTime, timeout) {
|
|
|
32
34
|
};
|
|
33
35
|
}
|
|
34
36
|
});
|
|
35
|
-
|
|
37
|
+
}
|
|
38
|
+
// Remove the network monitor and restore the patched globals (idempotent —
|
|
39
|
+
// a fresh page without the monitor is a no-op).
|
|
40
|
+
async function cleanupNetworkMonitor(driver) {
|
|
41
|
+
await driver.execute(() => {
|
|
42
|
+
if (window.__docDetectiveNetworkMonitor) {
|
|
43
|
+
// Restore original methods if they were patched
|
|
44
|
+
if (window.__docDetectiveNetworkMonitor.originalFetch) {
|
|
45
|
+
window.fetch = window.__docDetectiveNetworkMonitor.originalFetch;
|
|
46
|
+
}
|
|
47
|
+
if (window.__docDetectiveNetworkMonitor.originalXHROpen) {
|
|
48
|
+
XMLHttpRequest.prototype.open = window.__docDetectiveNetworkMonitor.originalXHROpen;
|
|
49
|
+
}
|
|
50
|
+
delete window.__docDetectiveNetworkMonitor;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Wait for network activity to be idle for a specified duration.
|
|
56
|
+
* Uses a polling approach to check for network requests.
|
|
57
|
+
*/
|
|
58
|
+
async function waitForNetworkIdle(driver, idleTime, timeout) {
|
|
59
|
+
const startTime = Date.now(); // Only for Node.js timeout tracking
|
|
60
|
+
await injectNetworkMonitor(driver);
|
|
61
|
+
// Fast path: check after 100ms. `null` = the monitor global vanished (page
|
|
62
|
+
// swap) — fall through to the poll loop, which re-injects.
|
|
36
63
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
37
64
|
const initialCheck = await driver.execute(() => {
|
|
38
65
|
const monitor = window.__docDetectiveNetworkMonitor;
|
|
66
|
+
if (!monitor)
|
|
67
|
+
return null;
|
|
39
68
|
const now = Date.now();
|
|
40
69
|
return {
|
|
41
70
|
idleFor: now - monitor.lastRequestTime,
|
|
42
71
|
requestCount: monitor.requestCount,
|
|
43
72
|
};
|
|
44
73
|
});
|
|
45
|
-
if (initialCheck
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
// Restore original methods if they were patched
|
|
50
|
-
if (window.__docDetectiveNetworkMonitor.originalFetch) {
|
|
51
|
-
window.fetch = window.__docDetectiveNetworkMonitor.originalFetch;
|
|
52
|
-
}
|
|
53
|
-
if (window.__docDetectiveNetworkMonitor.originalXHROpen) {
|
|
54
|
-
XMLHttpRequest.prototype.open = window.__docDetectiveNetworkMonitor.originalXHROpen;
|
|
55
|
-
}
|
|
56
|
-
delete window.__docDetectiveNetworkMonitor;
|
|
57
|
-
}
|
|
58
|
-
});
|
|
74
|
+
if (initialCheck &&
|
|
75
|
+
initialCheck.idleFor >= idleTime &&
|
|
76
|
+
initialCheck.requestCount === 0) {
|
|
77
|
+
await cleanupNetworkMonitor(driver);
|
|
59
78
|
return; // Fast path
|
|
60
79
|
}
|
|
61
80
|
// Poll with browser-based time checks
|
|
62
81
|
try {
|
|
82
|
+
let needsInject = !initialCheck;
|
|
63
83
|
while (true) {
|
|
64
84
|
if (Date.now() - startTime > timeout) {
|
|
65
|
-
// Clean up network monitor before throwing
|
|
66
|
-
await driver.execute(() => {
|
|
67
|
-
if (window.__docDetectiveNetworkMonitor) {
|
|
68
|
-
// Restore original methods if they were patched
|
|
69
|
-
if (window.__docDetectiveNetworkMonitor.originalFetch) {
|
|
70
|
-
window.fetch = window.__docDetectiveNetworkMonitor.originalFetch;
|
|
71
|
-
}
|
|
72
|
-
if (window.__docDetectiveNetworkMonitor.originalXHROpen) {
|
|
73
|
-
XMLHttpRequest.prototype.open = window.__docDetectiveNetworkMonitor.originalXHROpen;
|
|
74
|
-
}
|
|
75
|
-
delete window.__docDetectiveNetworkMonitor;
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
85
|
throw new Error("Network idle timeout exceeded");
|
|
79
86
|
}
|
|
87
|
+
if (needsInject) {
|
|
88
|
+
// The page changed under the wait; re-arm the monitor on the new
|
|
89
|
+
// page and keep polling (the idle measurement restarts there).
|
|
90
|
+
await injectNetworkMonitor(driver);
|
|
91
|
+
needsInject = false;
|
|
92
|
+
}
|
|
80
93
|
const state = await driver.execute(() => {
|
|
81
94
|
const monitor = window.__docDetectiveNetworkMonitor;
|
|
95
|
+
if (!monitor)
|
|
96
|
+
return null;
|
|
82
97
|
const now = Date.now();
|
|
83
98
|
return {
|
|
84
99
|
idleFor: now - monitor.lastRequestTime,
|
|
85
100
|
elapsedTotal: now - monitor.startTime,
|
|
86
101
|
};
|
|
87
102
|
});
|
|
103
|
+
if (state === null || state === undefined) {
|
|
104
|
+
// Pace the re-injection like any other poll iteration: a page that
|
|
105
|
+
// keeps replacing itself must not turn this into a tight
|
|
106
|
+
// inject+check loop hammering the webdriver session until timeout.
|
|
107
|
+
needsInject = true;
|
|
108
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
88
111
|
if (state.idleFor >= idleTime) {
|
|
89
112
|
break; // Network idle achieved
|
|
90
113
|
}
|
|
@@ -93,27 +116,11 @@ async function waitForNetworkIdle(driver, idleTime, timeout) {
|
|
|
93
116
|
}
|
|
94
117
|
finally {
|
|
95
118
|
// Always clean up network monitor
|
|
96
|
-
await driver
|
|
97
|
-
if (window.__docDetectiveNetworkMonitor) {
|
|
98
|
-
// Restore original methods if they were patched
|
|
99
|
-
if (window.__docDetectiveNetworkMonitor.originalFetch) {
|
|
100
|
-
window.fetch = window.__docDetectiveNetworkMonitor.originalFetch;
|
|
101
|
-
}
|
|
102
|
-
if (window.__docDetectiveNetworkMonitor.originalXHROpen) {
|
|
103
|
-
XMLHttpRequest.prototype.open = window.__docDetectiveNetworkMonitor.originalXHROpen;
|
|
104
|
-
}
|
|
105
|
-
delete window.__docDetectiveNetworkMonitor;
|
|
106
|
-
}
|
|
107
|
-
});
|
|
119
|
+
await cleanupNetworkMonitor(driver);
|
|
108
120
|
}
|
|
109
121
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
* Uses MutationObserver to detect changes.
|
|
113
|
-
*/
|
|
114
|
-
async function waitForDOMStable(driver, idleTime, timeout) {
|
|
115
|
-
const startTime = Date.now(); // Only for Node.js timeout tracking
|
|
116
|
-
// Initialize monitor with browser time only
|
|
122
|
+
// Inject the DOM-mutation monitor global (idempotent per page).
|
|
123
|
+
async function injectDOMMonitor(driver) {
|
|
117
124
|
await driver.execute(() => {
|
|
118
125
|
if (!window.__docDetectiveDOMMonitor) {
|
|
119
126
|
window.__docDetectiveDOMMonitor = {
|
|
@@ -138,41 +145,59 @@ async function waitForDOMStable(driver, idleTime, timeout) {
|
|
|
138
145
|
window.__docDetectiveDOMMonitor.observer = observer;
|
|
139
146
|
}
|
|
140
147
|
});
|
|
141
|
-
|
|
148
|
+
}
|
|
149
|
+
// Disconnect and remove the DOM monitor (idempotent).
|
|
150
|
+
async function cleanupDOMMonitor(driver) {
|
|
151
|
+
await driver.execute(() => {
|
|
152
|
+
if (window.__docDetectiveDOMMonitor?.observer) {
|
|
153
|
+
window.__docDetectiveDOMMonitor.observer.disconnect();
|
|
154
|
+
}
|
|
155
|
+
delete window.__docDetectiveDOMMonitor;
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Wait for the DOM to stop mutating for a specified duration.
|
|
160
|
+
* Uses a MutationObserver to detect changes.
|
|
161
|
+
*/
|
|
162
|
+
async function waitForDOMStable(driver, idleTime, timeout) {
|
|
163
|
+
const startTime = Date.now(); // Only for Node.js timeout tracking
|
|
164
|
+
await injectDOMMonitor(driver);
|
|
165
|
+
// Fast path: check after 100ms. `null` = the monitor global vanished (page
|
|
166
|
+
// swap) — fall through to the poll loop, which re-injects.
|
|
142
167
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
143
168
|
const initialCheck = await driver.execute(() => {
|
|
144
169
|
const monitor = window.__docDetectiveDOMMonitor;
|
|
170
|
+
if (!monitor)
|
|
171
|
+
return null;
|
|
145
172
|
const now = Date.now();
|
|
146
173
|
return {
|
|
147
174
|
idleFor: now - monitor.lastMutationTime,
|
|
148
175
|
mutationCount: monitor.mutationCount,
|
|
149
176
|
};
|
|
150
177
|
});
|
|
151
|
-
if (initialCheck
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
window.__docDetectiveDOMMonitor.observer.disconnect();
|
|
156
|
-
delete window.__docDetectiveDOMMonitor;
|
|
157
|
-
}
|
|
158
|
-
});
|
|
178
|
+
if (initialCheck &&
|
|
179
|
+
initialCheck.idleFor >= idleTime &&
|
|
180
|
+
initialCheck.mutationCount === 0) {
|
|
181
|
+
await cleanupDOMMonitor(driver);
|
|
159
182
|
return; // Fast path
|
|
160
183
|
}
|
|
161
184
|
// Poll with browser-based time checks
|
|
162
185
|
try {
|
|
186
|
+
let needsInject = !initialCheck;
|
|
163
187
|
while (true) {
|
|
164
188
|
if (Date.now() - startTime > timeout) {
|
|
165
|
-
// Clean up observer before throwing
|
|
166
|
-
await driver.execute(() => {
|
|
167
|
-
if (window.__docDetectiveDOMMonitor?.observer) {
|
|
168
|
-
window.__docDetectiveDOMMonitor.observer.disconnect();
|
|
169
|
-
delete window.__docDetectiveDOMMonitor;
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
189
|
throw new Error("DOM stability timeout exceeded");
|
|
173
190
|
}
|
|
191
|
+
if (needsInject) {
|
|
192
|
+
// The page changed under the wait; re-arm the observer on the new
|
|
193
|
+
// page and keep polling (the stability measurement restarts there).
|
|
194
|
+
await injectDOMMonitor(driver);
|
|
195
|
+
needsInject = false;
|
|
196
|
+
}
|
|
174
197
|
const state = await driver.execute(() => {
|
|
175
198
|
const monitor = window.__docDetectiveDOMMonitor;
|
|
199
|
+
if (!monitor)
|
|
200
|
+
return null;
|
|
176
201
|
const now = Date.now();
|
|
177
202
|
return {
|
|
178
203
|
idleFor: now - monitor.lastMutationTime,
|
|
@@ -180,30 +205,29 @@ async function waitForDOMStable(driver, idleTime, timeout) {
|
|
|
180
205
|
mutationCount: monitor.mutationCount,
|
|
181
206
|
};
|
|
182
207
|
});
|
|
208
|
+
if (state === null || state === undefined) {
|
|
209
|
+
// Pace the re-injection like any other poll iteration: a page that
|
|
210
|
+
// keeps replacing itself must not turn this into a tight
|
|
211
|
+
// inject+check loop hammering the webdriver session until timeout.
|
|
212
|
+
needsInject = true;
|
|
213
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
183
216
|
if (state.idleFor >= idleTime) {
|
|
184
|
-
// Clean up observer before returning
|
|
185
|
-
await driver.execute(() => {
|
|
186
|
-
if (window.__docDetectiveDOMMonitor?.observer) {
|
|
187
|
-
window.__docDetectiveDOMMonitor.observer.disconnect();
|
|
188
|
-
delete window.__docDetectiveDOMMonitor;
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
217
|
break; // DOM stable achieved
|
|
192
218
|
}
|
|
193
219
|
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
194
220
|
}
|
|
195
221
|
}
|
|
196
222
|
catch (error) {
|
|
197
|
-
// Clean up observer before re-throwing
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
delete window.__docDetectiveDOMMonitor;
|
|
202
|
-
}
|
|
203
|
-
});
|
|
223
|
+
// Clean up the observer before re-throwing. Every failure keeps the
|
|
224
|
+
// established "DOM stability check failed" wording (including the plain
|
|
225
|
+
// timeout, matching the pre-refactor contract goTo callers assert on).
|
|
226
|
+
await cleanupDOMMonitor(driver);
|
|
204
227
|
throw new Error(`DOM stability check failed: ${error.message}`, {
|
|
205
228
|
cause: error,
|
|
206
229
|
});
|
|
207
230
|
}
|
|
231
|
+
await cleanupDOMMonitor(driver);
|
|
208
232
|
}
|
|
209
233
|
//# sourceMappingURL=browserWait.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserWait.js","sourceRoot":"","sources":["../../../src/core/tests/browserWait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;AAEhD,2EAA2E;AAC3E,0EAA0E;AAC1E,oEAAoE;
|
|
1
|
+
{"version":3,"file":"browserWait.js","sourceRoot":"","sources":["../../../src/core/tests/browserWait.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findElement.d.ts","sourceRoot":"","sources":["../../../src/core/tests/findElement.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,WAAW,EAAE,CAAC;AA6BvB,iBAAe,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IAAC,UAAU,CAAC,EAAE,GAAG,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"findElement.d.ts","sourceRoot":"","sources":["../../../src/core/tests/findElement.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,WAAW,EAAE,CAAC;AA6BvB,iBAAe,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IAAC,UAAU,CAAC,EAAE,GAAG,CAAA;CAAE,gBA2P7I"}
|
|
@@ -140,9 +140,12 @@ async function findElement({ config, step, driver, click, appSession }) {
|
|
|
140
140
|
result.outputs.found = true;
|
|
141
141
|
await finalizeFound({ result });
|
|
142
142
|
// Shorthand carries no sub-effect fields, so button defaults to left.
|
|
143
|
+
// Argument-less click() maps to the classic element-click endpoint;
|
|
144
|
+
// passing options makes wdio emit W3C pointer actions, which device
|
|
145
|
+
// browsers (XCUITest web context, phase A5) reject.
|
|
143
146
|
if (click) {
|
|
144
147
|
try {
|
|
145
|
-
await element.click(
|
|
148
|
+
await element.click();
|
|
146
149
|
result.description += " Clicked element.";
|
|
147
150
|
}
|
|
148
151
|
catch (error) {
|
|
@@ -225,12 +228,20 @@ async function findElement({ config, step, driver, click, appSession }) {
|
|
|
225
228
|
await moveTo({ config, step: moveToStep, driver, element });
|
|
226
229
|
result.description = result.description + " Moved to element.";
|
|
227
230
|
}
|
|
228
|
-
// Click element
|
|
231
|
+
// Click element. A left/default click is argument-less: with options wdio
|
|
232
|
+
// emits W3C pointer actions, which device browsers (XCUITest web context,
|
|
233
|
+
// phase A5) reject — the bare form maps to the classic element-click
|
|
234
|
+
// endpoint and works everywhere. Non-left buttons genuinely need the
|
|
235
|
+
// actions path, so they keep the options form (desktop-only).
|
|
229
236
|
if (step.find.click || click) {
|
|
230
237
|
try {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
238
|
+
const button = step.find.click?.button || "left";
|
|
239
|
+
if (button === "left") {
|
|
240
|
+
await element.click();
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
await element.click({ button });
|
|
244
|
+
}
|
|
234
245
|
result.description += " Clicked element.";
|
|
235
246
|
}
|
|
236
247
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findElement.js","sourceRoot":"","sources":["../../../src/core/tests/findElement.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"findElement.js","sourceRoot":"","sources":["../../../src/core/tests/findElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB,oEAAoE;AACpE,0EAA0E;AAC1E,4EAA4E;AAC5E,8EAA8E;AAC9E,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,6EAA6E;AAC7E,uEAAuE;AACvE,+EAA+E;AAC/E,qCAAqC;AACrC,EAAE;AACF,uEAAuE;AACvE,6EAA6E;AAC7E,+EAA+E;AAC/E,KAAK,UAAU,aAAa,CAAC,EAAE,MAAM,EAAmB;IACtD,MAAM,KAAK,GAA4B;QACrC,EAAE,SAAS,EAAE,yBAAyB,EAAE,QAAQ,EAAE,MAAM,EAAE;KAC3D,CAAC;IACF,MAAM,GAAG,GAAG,qBAAqB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/D,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,0BAA0B,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5E,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wBAAwB;AACxB,KAAK,UAAU,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAA0E;IAC5I,IAAI,MAAM,GAAQ;QAChB,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,qCAAqC;QAClD,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,wBAAwB;IACxB,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,MAAM,CAAC,WAAW,GAAG,4BAA4B,WAAW,CAAC,MAAM,EAAE,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,sCAAsC;IACtC,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC;IAE1B,4EAA4E;IAC5E,wEAAwE;IACxE,0DAA0D;IAC1D,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACnE,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;gBACvB,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;gBAClC,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;gBACvB,MAAM,CAAC,WAAW;oBAChB,8HAA8H,CAAC;gBACjI,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,mEAAmE;YACnE,sDAAsD;YACtD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,KAAM,EAAE,UAAU,CAAC,CAAC;YACtE,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;gBACvB,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC;gBACpC,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAM,CAAC,MAAM,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC;gBACjC,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,2DAA2D;gBAC3D,6DAA6D;gBAC7D,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI;gBAClC,QAAQ,EAAE,MAAM,CAAC,KAAM,CAAC,QAAQ;aACjC,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;gBACjC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC7B,OAAO,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACnE,CAAC;YAAC,MAAM,CAAC;gBACP,qDAAqD;YACvD,CAAC;YACD,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;gBACvB,MAAM,CAAC,WAAW;oBAChB,sHAAsH,CAAC;gBACzH,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC5B,MAAM,CAAC,WAAW,IAAI,mBAAmB,CAAC;gBAC5C,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;oBACvB,MAAM,CAAC,WAAW,IAAI,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC3E,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,uEAAuE;IACvE,wEAAwE;IACxE,0EAA0E;IAC1E,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACrE,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACvB,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;YACtC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC;IACrC,CAAC;IAED,oCAAoC;IACpC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,sBAAsB,CAAC;YACxD,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,MAAM;SACP,CAAC,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,WAAW,IAAI,qBAAqB,OAAO,GAAG,CAAC;YACtD,MAAM,CAAC,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YACtD,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YAC5B,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAChC,sEAAsE;YACtE,oEAAoE;YACpE,oEAAoE;YACpE,oDAAoD;YACpD,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;oBACtB,MAAM,CAAC,WAAW,IAAI,mBAAmB,CAAC;gBAC5C,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;oBACvB,MAAM,CAAC,WAAW,IAAI,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACzE,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YACD,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,qEAAqE;YACrE,kEAAkE;YAClE,MAAM,CAAC,WAAW,GAAG,uCAAuC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YAC7B,OAAO,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,uBAAuB;IACvB,IAAI,CAAC,IAAI,GAAG;QACV,GAAG,IAAI,CAAC,IAAI;QACZ,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE;QAClC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI;QAClC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE;QACxC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK;QACjC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK;QAC/B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK;KAC9B,CAAC;IACF,kCAAkC;IAClC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IAED,mDAAmD;IACnD,IAAI,OAAY,CAAC;IAEjB,6CAA6C;IAC7C,MAAM,EACJ,OAAO,EAAE,YAAY,EACrB,OAAO,EACP,KAAK,GACN,GAAG,MAAM,qBAAqB,CAAC;QAC9B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,SAAS;QACzC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS;QAC/C,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;QAC9B,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;QACtC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;QACpC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB;QAC5C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;QAClC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;QAC1B,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,CAAC,WAAW,GAAG,KAAK,IAAI,+BAA+B,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAC7B,OAAO,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,YAAY,CAAC;IACvB,MAAM,CAAC,WAAW,IAAI,qBAAqB,OAAO,GAAG,CAAC;IAEtD,uBAAuB;IACvB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,CAAC,WAAW,GAAG,2CAA2C,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAC7B,OAAO,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,yBAAyB;IACzB,MAAM,CAAC,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAC5B,wEAAwE;IACxE,yDAAyD;IACzD,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEhC,kBAAkB;IAClB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACrB,IAAI,UAAU,GAAG;YACf,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAC5B,SAAS,EAAE,QAAQ;YACnB,MAAM,EAAE;gBACN,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;aACL;SACF,CAAC;QAEF,MAAM,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,GAAG,oBAAoB,CAAC;IACjE,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,qEAAqE;IACrE,qEAAqE;IACrE,8DAA8D;IAC9D,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC;YACjD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAClC,CAAC;YACD,MAAM,CAAC,WAAW,IAAI,mBAAmB,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACvB,MAAM,CAAC,WAAW,IAAI,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC;YACzE,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,YAAY;IACZ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;SACrB,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC;YAChC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACjC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACvB,MAAM,CAAC,WAAW,GAAG,GAAG,MAAM,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,WAAW,IAAI,cAAc,CAAC;QACvC,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO;IACP,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
type MobileTarget = "android" | "ios";
|
|
2
|
+
declare const MOBILE_CHROMEDRIVER_DIR = "chromedriver-mobile";
|
|
3
|
+
export { mobileBrowserSupport, mobileBrowserConfigError, buildMobileBrowserCapabilities, defaultMobileBrowserName, mobileBrowserGate, MOBILE_CHROMEDRIVER_DIR, };
|
|
4
|
+
declare function defaultMobileBrowserName(platform: MobileTarget): string;
|
|
5
|
+
declare function mobileBrowserSupport({ platform, browserName, }: {
|
|
6
|
+
platform: MobileTarget;
|
|
7
|
+
browserName: string;
|
|
8
|
+
}): {
|
|
9
|
+
supported: true;
|
|
10
|
+
} | {
|
|
11
|
+
supported: false;
|
|
12
|
+
reason: string;
|
|
13
|
+
};
|
|
14
|
+
declare function mobileBrowserConfigError(browser: {
|
|
15
|
+
headless?: boolean;
|
|
16
|
+
window?: any;
|
|
17
|
+
viewport?: any;
|
|
18
|
+
} | undefined): string | null;
|
|
19
|
+
declare function mobileBrowserGate({ platform, browser, hasBrowserStep, hasAppStep, }: {
|
|
20
|
+
platform: MobileTarget;
|
|
21
|
+
browser?: {
|
|
22
|
+
name?: string;
|
|
23
|
+
headless?: boolean;
|
|
24
|
+
window?: any;
|
|
25
|
+
viewport?: any;
|
|
26
|
+
};
|
|
27
|
+
hasBrowserStep: boolean;
|
|
28
|
+
hasAppStep: boolean;
|
|
29
|
+
}): {
|
|
30
|
+
action: "proceed";
|
|
31
|
+
browserName: string | null;
|
|
32
|
+
} | {
|
|
33
|
+
action: "skip";
|
|
34
|
+
level: "warning";
|
|
35
|
+
reason: string;
|
|
36
|
+
} | {
|
|
37
|
+
action: "fail";
|
|
38
|
+
reason: string;
|
|
39
|
+
};
|
|
40
|
+
declare function buildMobileBrowserCapabilities({ platform, udid, cacheDir, timeout, }: {
|
|
41
|
+
platform: MobileTarget;
|
|
42
|
+
udid: string;
|
|
43
|
+
cacheDir: string;
|
|
44
|
+
timeout?: number;
|
|
45
|
+
}): Record<string, any>;
|
|
46
|
+
//# sourceMappingURL=mobileBrowser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobileBrowser.d.ts","sourceRoot":"","sources":["../../../src/core/tests/mobileBrowser.ts"],"names":[],"mappings":"AAUA,KAAK,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC;AAatC,QAAA,MAAM,uBAAuB,wBAAwB,CAAC;AAEtD,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,wBAAwB,EACxB,iBAAiB,EACjB,uBAAuB,GACxB,CAAC;AAIF,iBAAS,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAEhE;AAKD,iBAAS,oBAAoB,CAAC,EAC5B,QAAQ,EACR,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAO7D;AAOD,iBAAS,wBAAwB,CAC/B,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,GAAG,SAAS,GACxE,MAAM,GAAG,IAAI,CAcf;AAOD,iBAAS,iBAAiB,CAAC,EACzB,QAAQ,EACR,OAAO,EACP,cAAc,EACd,UAAU,GACX,EAAE;IACD,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,GAAG,CAAC;QACb,QAAQ,CAAC,EAAE,GAAG,CAAC;KAChB,CAAC;IACF,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB,GACG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACjD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA0BrC;AAOD,iBAAS,8BAA8B,CAAC,EACtC,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,OAAO,GACR,EAAE;IACD,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAiDtB"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
// Native app surfaces phase A5: mobile web browsers on managed devices.
|
|
2
|
+
// With a mobile platform entry, `browsers` means the browser ON the device,
|
|
3
|
+
// driven through the same per-device Appium session the app surfaces use:
|
|
4
|
+
// Chrome on the Android emulator (UiAutomator2 + server-managed chromedriver)
|
|
5
|
+
// and Safari on the iOS simulator (XCUITest). Everything here is pure —
|
|
6
|
+
// support-matrix decisions, config rejection, and capability shapes — so the
|
|
7
|
+
// preflights stay unit-testable without a device.
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
// The device browser each mobile target supports. There is exactly one per
|
|
10
|
+
// platform — the on-device browser is part of the device image, not an
|
|
11
|
+
// installable engine choice, so unsupported names SKIP (they can never
|
|
12
|
+
// become available on that target) rather than falling back.
|
|
13
|
+
const SUPPORTED_MOBILE_BROWSER = {
|
|
14
|
+
android: "chrome",
|
|
15
|
+
ios: "safari",
|
|
16
|
+
};
|
|
17
|
+
// Subdirectory of the Doc Detective cache where the Appium server stores the
|
|
18
|
+
// chromedrivers it auto-downloads to match the device's Chrome version.
|
|
19
|
+
const MOBILE_CHROMEDRIVER_DIR = "chromedriver-mobile";
|
|
20
|
+
export { mobileBrowserSupport, mobileBrowserConfigError, buildMobileBrowserCapabilities, defaultMobileBrowserName, mobileBrowserGate, MOBILE_CHROMEDRIVER_DIR, };
|
|
21
|
+
// The browser a mobile context gets when the runOn entry names none — the
|
|
22
|
+
// mobile analog of the desktop first-available default.
|
|
23
|
+
function defaultMobileBrowserName(platform) {
|
|
24
|
+
return SUPPORTED_MOBILE_BROWSER[platform];
|
|
25
|
+
}
|
|
26
|
+
// The A5 support matrix: chrome+android and safari+ios are the only pairs.
|
|
27
|
+
// The reason names both the rejected and the supported browser so the fix is
|
|
28
|
+
// one edit away.
|
|
29
|
+
function mobileBrowserSupport({ platform, browserName, }) {
|
|
30
|
+
const supported = SUPPORTED_MOBILE_BROWSER[platform];
|
|
31
|
+
if (browserName === supported)
|
|
32
|
+
return { supported: true };
|
|
33
|
+
return {
|
|
34
|
+
supported: false,
|
|
35
|
+
reason: `Skipping context: '${browserName}' isn't available on ${platform}. '${supported}' is the supported ${platform} browser — set browsers: "${supported}" (or omit browsers) on the ${platform} runOn entry.`,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Device-fixed browser config is rejected loudly rather than silently
|
|
39
|
+
// ignored: `headless` belongs to the device descriptor, and window/viewport
|
|
40
|
+
// dimensions are fixed by the device's screen. `headless: true` is the
|
|
41
|
+
// schema-injected default (AJV useDefaults), so only an authored `false` is
|
|
42
|
+
// distinguishable and rejectable.
|
|
43
|
+
function mobileBrowserConfigError(browser) {
|
|
44
|
+
if (!browser)
|
|
45
|
+
return null;
|
|
46
|
+
if (browser.headless === false) {
|
|
47
|
+
return "browser headless is meaningless for a device browser — the device owns its display. Set headless on the device descriptor (device.headless) instead.";
|
|
48
|
+
}
|
|
49
|
+
const authoredDimensions = (value) => value && typeof value === "object" && Object.keys(value).length > 0;
|
|
50
|
+
if (authoredDimensions(browser.window)) {
|
|
51
|
+
return "browser window dimensions are fixed by the device's screen and can't be set on a mobile context. Choose a different device (device.deviceType) if you need another size.";
|
|
52
|
+
}
|
|
53
|
+
if (authoredDimensions(browser.viewport)) {
|
|
54
|
+
return "browser viewport dimensions are fixed by the device's screen and can't be set on a mobile context. Choose a different device (device.deviceType) if you need another size.";
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
// The one decision point the mobile preflights consult before any toolchain
|
|
59
|
+
// work: does this context get a device-browser session, a SKIP, or a FAIL?
|
|
60
|
+
// Order matters — the mixed guard first (a scope limit, so SKIP, and config
|
|
61
|
+
// on a context that can't run at all shouldn't fail the run), then the loud
|
|
62
|
+
// config rejection, then the support matrix with the platform default filled.
|
|
63
|
+
function mobileBrowserGate({ platform, browser, hasBrowserStep, hasAppStep, }) {
|
|
64
|
+
if (!hasBrowserStep)
|
|
65
|
+
return { action: "proceed", browserName: null };
|
|
66
|
+
if (hasAppStep) {
|
|
67
|
+
// Interleaving native app surfaces and the device browser in one context
|
|
68
|
+
// needs foreground + NATIVE_APP/WEBVIEW context switching, which lands
|
|
69
|
+
// with the mobile interaction vocabulary (phase A6). Both halves run
|
|
70
|
+
// today — in separate tests/contexts.
|
|
71
|
+
return {
|
|
72
|
+
action: "skip",
|
|
73
|
+
level: "warning",
|
|
74
|
+
reason: `Skipping context on '${platform}': mixing native app surfaces and browser steps in one mobile context isn't supported yet — put the web steps and the app steps in separate tests or contexts. Mobile-web-only and native-app-only contexts both run today.`,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const configError = mobileBrowserConfigError(browser);
|
|
78
|
+
if (configError) {
|
|
79
|
+
return {
|
|
80
|
+
action: "fail",
|
|
81
|
+
reason: `Mobile context on '${platform}': ${configError}`,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const browserName = browser?.name ?? defaultMobileBrowserName(platform);
|
|
85
|
+
const support = mobileBrowserSupport({ platform, browserName });
|
|
86
|
+
if (!support.supported) {
|
|
87
|
+
return { action: "skip", level: "warning", reason: support.reason };
|
|
88
|
+
}
|
|
89
|
+
return { action: "proceed", browserName };
|
|
90
|
+
}
|
|
91
|
+
// Session capabilities for the device browser. Mirrors the per-platform app
|
|
92
|
+
// capability shapes in appSurface.ts (APP_DRIVER_PLATFORMS) — same drivers,
|
|
93
|
+
// same udid pinning, same WDA timeout floor and derived-data opt-in — but
|
|
94
|
+
// with `browserName` in place of an app identifier, which puts the session
|
|
95
|
+
// in a web context from the start.
|
|
96
|
+
function buildMobileBrowserCapabilities({ platform, udid, cacheDir, timeout, }) {
|
|
97
|
+
if (platform === "android") {
|
|
98
|
+
return {
|
|
99
|
+
platformName: "Android",
|
|
100
|
+
"appium:automationName": "UiAutomator2",
|
|
101
|
+
browserName: "Chrome",
|
|
102
|
+
"appium:udid": udid,
|
|
103
|
+
"appium:newCommandTimeout": 600,
|
|
104
|
+
// adb operations can be slow on a cold emulator (same floor as app
|
|
105
|
+
// sessions).
|
|
106
|
+
"appium:adbExecTimeout": 120000,
|
|
107
|
+
"wdio:enforceWebDriverClassic": true,
|
|
108
|
+
// On-device chromedriver management: the server downloads a
|
|
109
|
+
// chromedriver matching the device's Chrome version. Requires the
|
|
110
|
+
// Appium server to run with
|
|
111
|
+
// --allow-insecure=uiautomator2:chromedriver_autodownload. The
|
|
112
|
+
// download lands in the Doc Detective cache so later runs reuse it.
|
|
113
|
+
"appium:chromedriverAutodownload": true,
|
|
114
|
+
"appium:chromedriverExecutableDir": path.join(cacheDir, MOBILE_CHROMEDRIVER_DIR),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const capabilities = {
|
|
118
|
+
platformName: "iOS",
|
|
119
|
+
"appium:automationName": "XCUITest",
|
|
120
|
+
browserName: "Safari",
|
|
121
|
+
"appium:udid": udid,
|
|
122
|
+
"appium:newCommandTimeout": 600,
|
|
123
|
+
"wdio:enforceWebDriverClassic": true,
|
|
124
|
+
};
|
|
125
|
+
// The first-ever XCUITest session cold-builds WebDriverAgent via
|
|
126
|
+
// xcodebuild (~10 min on CI). App surfaces carry an authored startSurface
|
|
127
|
+
// timeout for this; a mobile-web session has no step to author one on, so
|
|
128
|
+
// the default ceiling matches the generous one the apps-ios fixtures use.
|
|
129
|
+
const effectiveTimeout = timeout ?? 900000;
|
|
130
|
+
capabilities["appium:wdaLaunchTimeout"] = Math.max(effectiveTimeout, 120000);
|
|
131
|
+
capabilities["appium:wdaConnectionTimeout"] = Math.max(effectiveTimeout, 120000);
|
|
132
|
+
// Same opt-in derived-data sharing as iOS app sessions (see appSurface.ts
|
|
133
|
+
// for the caching contract).
|
|
134
|
+
const derivedDataPath = process.env.DOC_DETECTIVE_IOS_WDA_DERIVED_DATA_PATH;
|
|
135
|
+
if (derivedDataPath && derivedDataPath.trim()) {
|
|
136
|
+
capabilities["appium:derivedDataPath"] = derivedDataPath.trim();
|
|
137
|
+
}
|
|
138
|
+
return capabilities;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=mobileBrowser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobileBrowser.js","sourceRoot":"","sources":["../../../src/core/tests/mobileBrowser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
export { isMobileTargetPlatform
|
|
1
|
+
export { isMobileTargetPlatform };
|
|
2
2
|
type MobileTarget = "android" | "ios";
|
|
3
3
|
declare function isMobileTargetPlatform(platform: unknown): MobileTarget | null;
|
|
4
|
-
declare function mobileContextSkipReason({ platform, }: {
|
|
5
|
-
platform: MobileTarget;
|
|
6
|
-
}): {
|
|
7
|
-
level: "warning" | "info";
|
|
8
|
-
reason: string;
|
|
9
|
-
};
|
|
10
4
|
//# sourceMappingURL=mobilePlatform.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobilePlatform.d.ts","sourceRoot":"","sources":["../../../src/core/tests/mobilePlatform.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mobilePlatform.d.ts","sourceRoot":"","sources":["../../../src/core/tests/mobilePlatform.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAElC,KAAK,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC;AAGtC,iBAAS,sBAAsB,CAAC,QAAQ,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAGtE"}
|