@skrillex1224/playwright-toolkit 2.1.46 → 2.1.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +73 -15
- package/dist/index.cjs.map +3 -3
- package/dist/index.js +73 -15
- package/dist/index.js.map +3 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2277,8 +2277,11 @@ var Mutation = {
|
|
|
2277
2277
|
* @param {Object} [options] - 配置选项
|
|
2278
2278
|
* @param {number} [options.stableTime] - 无变化持续时间后 resolve (毫秒, 默认: 5000)
|
|
2279
2279
|
* @param {number} [options.timeout] - 整体超时时间 (毫秒, 默认: 60000)
|
|
2280
|
-
* @param {Function} [options.onMutation] - 变化时的回调钩子
|
|
2281
|
-
*
|
|
2280
|
+
* @param {Function} [options.onMutation] - 变化时的回调钩子
|
|
2281
|
+
* 签名: ({ mutationCount, innerHTML, innerText }) => any
|
|
2282
|
+
* 返回 null/undefined: 正常重置稳定计时
|
|
2283
|
+
* 返回其他值: 暂停稳定计时(timeout 仍然生效)
|
|
2284
|
+
* @returns {Promise<{ mutationCount: number, stableTime: number, wasPaused: boolean }>}
|
|
2282
2285
|
*/
|
|
2283
2286
|
async waitForStable(page, selectors, options = {}) {
|
|
2284
2287
|
const selectorList = Array.isArray(selectors) ? selectors : [selectors];
|
|
@@ -2286,25 +2289,28 @@ var Mutation = {
|
|
|
2286
2289
|
const timeout = options.timeout ?? 6e4;
|
|
2287
2290
|
const onMutation = options.onMutation;
|
|
2288
2291
|
logger9.start("waitForStable", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, \u7A33\u5B9A\u65F6\u95F4=${stableTime}ms`);
|
|
2289
|
-
const eventName = generateKey("pk_mut_evt");
|
|
2290
2292
|
const callbackName = generateKey("pk_mut_cb");
|
|
2291
2293
|
if (onMutation) {
|
|
2292
2294
|
try {
|
|
2293
|
-
await page.exposeFunction(callbackName, (
|
|
2295
|
+
await page.exposeFunction(callbackName, async (context) => {
|
|
2294
2296
|
try {
|
|
2295
|
-
onMutation(
|
|
2297
|
+
const result2 = await onMutation(context);
|
|
2298
|
+
return result2 === null || result2 === void 0 ? "__CONTINUE__" : "__PAUSE__";
|
|
2296
2299
|
} catch (e) {
|
|
2300
|
+
return "__CONTINUE__";
|
|
2297
2301
|
}
|
|
2298
2302
|
});
|
|
2299
2303
|
} catch (e) {
|
|
2300
2304
|
}
|
|
2301
2305
|
}
|
|
2302
2306
|
const result = await page.evaluate(
|
|
2303
|
-
async ({ selectorList: selectorList2, stableTime: stableTime2, timeout: timeout2,
|
|
2307
|
+
async ({ selectorList: selectorList2, stableTime: stableTime2, timeout: timeout2, callbackName: callbackName2, hasCallback }) => {
|
|
2304
2308
|
return new Promise((resolve, reject) => {
|
|
2305
2309
|
let mutationCount = 0;
|
|
2306
2310
|
let stableTimer = null;
|
|
2307
2311
|
let timeoutTimer = null;
|
|
2312
|
+
let isPaused = false;
|
|
2313
|
+
let wasPaused = false;
|
|
2308
2314
|
const observers = [];
|
|
2309
2315
|
const cleanup = () => {
|
|
2310
2316
|
observers.forEach((obs) => obs.disconnect());
|
|
@@ -2313,24 +2319,53 @@ var Mutation = {
|
|
|
2313
2319
|
};
|
|
2314
2320
|
const resetStableTimer = () => {
|
|
2315
2321
|
if (stableTimer) clearTimeout(stableTimer);
|
|
2322
|
+
if (isPaused) return;
|
|
2316
2323
|
stableTimer = setTimeout(() => {
|
|
2317
2324
|
cleanup();
|
|
2318
|
-
resolve({ mutationCount, stableTime: stableTime2 });
|
|
2325
|
+
resolve({ mutationCount, stableTime: stableTime2, wasPaused });
|
|
2319
2326
|
}, stableTime2);
|
|
2320
2327
|
};
|
|
2328
|
+
const pauseStableTimer = () => {
|
|
2329
|
+
if (stableTimer) {
|
|
2330
|
+
clearTimeout(stableTimer);
|
|
2331
|
+
stableTimer = null;
|
|
2332
|
+
}
|
|
2333
|
+
isPaused = true;
|
|
2334
|
+
wasPaused = true;
|
|
2335
|
+
};
|
|
2336
|
+
const resumeStableTimer = () => {
|
|
2337
|
+
isPaused = false;
|
|
2338
|
+
resetStableTimer();
|
|
2339
|
+
};
|
|
2321
2340
|
timeoutTimer = setTimeout(() => {
|
|
2322
2341
|
cleanup();
|
|
2323
|
-
reject(new Error(`waitForStable \u8D85\u65F6 (${timeout2}ms), \u5DF2\u68C0\u6D4B\u5230 ${mutationCount} \u6B21\u53D8\u5316`));
|
|
2342
|
+
reject(new Error(`waitForStable \u8D85\u65F6 (${timeout2}ms), \u5DF2\u68C0\u6D4B\u5230 ${mutationCount} \u6B21\u53D8\u5316, isPaused=${isPaused}`));
|
|
2324
2343
|
}, timeout2);
|
|
2325
2344
|
selectorList2.forEach((selector) => {
|
|
2326
2345
|
const elements = document.querySelectorAll(selector);
|
|
2327
2346
|
elements.forEach((element) => {
|
|
2328
|
-
const observer = new MutationObserver((mutations) => {
|
|
2347
|
+
const observer = new MutationObserver(async (mutations) => {
|
|
2329
2348
|
mutationCount += mutations.length;
|
|
2330
2349
|
if (hasCallback && window[callbackName2]) {
|
|
2331
|
-
|
|
2350
|
+
const innerHTML = element.innerHTML || "";
|
|
2351
|
+
const innerText = element.innerText || element.textContent || "";
|
|
2352
|
+
try {
|
|
2353
|
+
const signal = await window[callbackName2]({
|
|
2354
|
+
mutationCount,
|
|
2355
|
+
innerHTML,
|
|
2356
|
+
innerText
|
|
2357
|
+
});
|
|
2358
|
+
if (signal === "__PAUSE__") {
|
|
2359
|
+
pauseStableTimer();
|
|
2360
|
+
} else {
|
|
2361
|
+
resumeStableTimer();
|
|
2362
|
+
}
|
|
2363
|
+
} catch (e) {
|
|
2364
|
+
resumeStableTimer();
|
|
2365
|
+
}
|
|
2366
|
+
} else {
|
|
2367
|
+
resetStableTimer();
|
|
2332
2368
|
}
|
|
2333
|
-
resetStableTimer();
|
|
2334
2369
|
});
|
|
2335
2370
|
observer.observe(element, {
|
|
2336
2371
|
childList: true,
|
|
@@ -2343,15 +2378,38 @@ var Mutation = {
|
|
|
2343
2378
|
});
|
|
2344
2379
|
if (observers.length === 0) {
|
|
2345
2380
|
cleanup();
|
|
2346
|
-
resolve({ mutationCount: 0, stableTime: 0 });
|
|
2381
|
+
resolve({ mutationCount: 0, stableTime: 0, wasPaused: false });
|
|
2347
2382
|
return;
|
|
2348
2383
|
}
|
|
2349
|
-
|
|
2384
|
+
const runInitialCheck = async () => {
|
|
2385
|
+
if (hasCallback && window[callbackName2]) {
|
|
2386
|
+
const firstSelector = selectorList2[0];
|
|
2387
|
+
const firstElement = document.querySelector(firstSelector);
|
|
2388
|
+
if (firstElement) {
|
|
2389
|
+
const innerHTML = firstElement.innerHTML || "";
|
|
2390
|
+
const innerText = firstElement.innerText || firstElement.textContent || "";
|
|
2391
|
+
try {
|
|
2392
|
+
const signal = await window[callbackName2]({
|
|
2393
|
+
mutationCount: 0,
|
|
2394
|
+
innerHTML,
|
|
2395
|
+
innerText
|
|
2396
|
+
});
|
|
2397
|
+
if (signal === "__PAUSE__") {
|
|
2398
|
+
pauseStableTimer();
|
|
2399
|
+
return;
|
|
2400
|
+
}
|
|
2401
|
+
} catch (e) {
|
|
2402
|
+
}
|
|
2403
|
+
}
|
|
2404
|
+
}
|
|
2405
|
+
resetStableTimer();
|
|
2406
|
+
};
|
|
2407
|
+
runInitialCheck();
|
|
2350
2408
|
});
|
|
2351
2409
|
},
|
|
2352
|
-
{ selectorList, stableTime, timeout,
|
|
2410
|
+
{ selectorList, stableTime, timeout, callbackName, hasCallback: !!onMutation }
|
|
2353
2411
|
);
|
|
2354
|
-
logger9.success("waitForStable", `DOM \u7A33\u5B9A, \u603B\u5171 ${result.mutationCount} \u6B21\u53D8\u5316`);
|
|
2412
|
+
logger9.success("waitForStable", `DOM \u7A33\u5B9A, \u603B\u5171 ${result.mutationCount} \u6B21\u53D8\u5316${result.wasPaused ? ", \u66FE\u6682\u505C\u8BA1\u65F6" : ""}`);
|
|
2355
2413
|
return result;
|
|
2356
2414
|
},
|
|
2357
2415
|
/**
|