@skrillex1224/playwright-toolkit 2.1.45 → 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.cjs
CHANGED
|
@@ -2308,8 +2308,11 @@ var Mutation = {
|
|
|
2308
2308
|
* @param {Object} [options] - 配置选项
|
|
2309
2309
|
* @param {number} [options.stableTime] - 无变化持续时间后 resolve (毫秒, 默认: 5000)
|
|
2310
2310
|
* @param {number} [options.timeout] - 整体超时时间 (毫秒, 默认: 60000)
|
|
2311
|
-
* @param {Function} [options.onMutation] - 变化时的回调钩子
|
|
2312
|
-
*
|
|
2311
|
+
* @param {Function} [options.onMutation] - 变化时的回调钩子
|
|
2312
|
+
* 签名: ({ mutationCount, innerHTML, innerText }) => any
|
|
2313
|
+
* 返回 null/undefined: 正常重置稳定计时
|
|
2314
|
+
* 返回其他值: 暂停稳定计时(timeout 仍然生效)
|
|
2315
|
+
* @returns {Promise<{ mutationCount: number, stableTime: number, wasPaused: boolean }>}
|
|
2313
2316
|
*/
|
|
2314
2317
|
async waitForStable(page, selectors, options = {}) {
|
|
2315
2318
|
const selectorList = Array.isArray(selectors) ? selectors : [selectors];
|
|
@@ -2317,25 +2320,28 @@ var Mutation = {
|
|
|
2317
2320
|
const timeout = options.timeout ?? 6e4;
|
|
2318
2321
|
const onMutation = options.onMutation;
|
|
2319
2322
|
logger9.start("waitForStable", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, \u7A33\u5B9A\u65F6\u95F4=${stableTime}ms`);
|
|
2320
|
-
const eventName = generateKey("pk_mut_evt");
|
|
2321
2323
|
const callbackName = generateKey("pk_mut_cb");
|
|
2322
2324
|
if (onMutation) {
|
|
2323
2325
|
try {
|
|
2324
|
-
await page.exposeFunction(callbackName, (
|
|
2326
|
+
await page.exposeFunction(callbackName, async (context) => {
|
|
2325
2327
|
try {
|
|
2326
|
-
onMutation(
|
|
2328
|
+
const result2 = await onMutation(context);
|
|
2329
|
+
return result2 === null || result2 === void 0 ? "__CONTINUE__" : "__PAUSE__";
|
|
2327
2330
|
} catch (e) {
|
|
2331
|
+
return "__CONTINUE__";
|
|
2328
2332
|
}
|
|
2329
2333
|
});
|
|
2330
2334
|
} catch (e) {
|
|
2331
2335
|
}
|
|
2332
2336
|
}
|
|
2333
2337
|
const result = await page.evaluate(
|
|
2334
|
-
async ({ selectorList: selectorList2, stableTime: stableTime2, timeout: timeout2,
|
|
2338
|
+
async ({ selectorList: selectorList2, stableTime: stableTime2, timeout: timeout2, callbackName: callbackName2, hasCallback }) => {
|
|
2335
2339
|
return new Promise((resolve, reject) => {
|
|
2336
2340
|
let mutationCount = 0;
|
|
2337
2341
|
let stableTimer = null;
|
|
2338
2342
|
let timeoutTimer = null;
|
|
2343
|
+
let isPaused = false;
|
|
2344
|
+
let wasPaused = false;
|
|
2339
2345
|
const observers = [];
|
|
2340
2346
|
const cleanup = () => {
|
|
2341
2347
|
observers.forEach((obs) => obs.disconnect());
|
|
@@ -2344,24 +2350,53 @@ var Mutation = {
|
|
|
2344
2350
|
};
|
|
2345
2351
|
const resetStableTimer = () => {
|
|
2346
2352
|
if (stableTimer) clearTimeout(stableTimer);
|
|
2353
|
+
if (isPaused) return;
|
|
2347
2354
|
stableTimer = setTimeout(() => {
|
|
2348
2355
|
cleanup();
|
|
2349
|
-
resolve({ mutationCount, stableTime: stableTime2 });
|
|
2356
|
+
resolve({ mutationCount, stableTime: stableTime2, wasPaused });
|
|
2350
2357
|
}, stableTime2);
|
|
2351
2358
|
};
|
|
2359
|
+
const pauseStableTimer = () => {
|
|
2360
|
+
if (stableTimer) {
|
|
2361
|
+
clearTimeout(stableTimer);
|
|
2362
|
+
stableTimer = null;
|
|
2363
|
+
}
|
|
2364
|
+
isPaused = true;
|
|
2365
|
+
wasPaused = true;
|
|
2366
|
+
};
|
|
2367
|
+
const resumeStableTimer = () => {
|
|
2368
|
+
isPaused = false;
|
|
2369
|
+
resetStableTimer();
|
|
2370
|
+
};
|
|
2352
2371
|
timeoutTimer = setTimeout(() => {
|
|
2353
2372
|
cleanup();
|
|
2354
|
-
reject(new Error(`waitForStable \u8D85\u65F6 (${timeout2}ms), \u5DF2\u68C0\u6D4B\u5230 ${mutationCount} \u6B21\u53D8\u5316`));
|
|
2373
|
+
reject(new Error(`waitForStable \u8D85\u65F6 (${timeout2}ms), \u5DF2\u68C0\u6D4B\u5230 ${mutationCount} \u6B21\u53D8\u5316, isPaused=${isPaused}`));
|
|
2355
2374
|
}, timeout2);
|
|
2356
2375
|
selectorList2.forEach((selector) => {
|
|
2357
2376
|
const elements = document.querySelectorAll(selector);
|
|
2358
2377
|
elements.forEach((element) => {
|
|
2359
|
-
const observer = new MutationObserver((mutations) => {
|
|
2378
|
+
const observer = new MutationObserver(async (mutations) => {
|
|
2360
2379
|
mutationCount += mutations.length;
|
|
2361
2380
|
if (hasCallback && window[callbackName2]) {
|
|
2362
|
-
|
|
2381
|
+
const innerHTML = element.innerHTML || "";
|
|
2382
|
+
const innerText = element.innerText || element.textContent || "";
|
|
2383
|
+
try {
|
|
2384
|
+
const signal = await window[callbackName2]({
|
|
2385
|
+
mutationCount,
|
|
2386
|
+
innerHTML,
|
|
2387
|
+
innerText
|
|
2388
|
+
});
|
|
2389
|
+
if (signal === "__PAUSE__") {
|
|
2390
|
+
pauseStableTimer();
|
|
2391
|
+
} else {
|
|
2392
|
+
resumeStableTimer();
|
|
2393
|
+
}
|
|
2394
|
+
} catch (e) {
|
|
2395
|
+
resumeStableTimer();
|
|
2396
|
+
}
|
|
2397
|
+
} else {
|
|
2398
|
+
resetStableTimer();
|
|
2363
2399
|
}
|
|
2364
|
-
resetStableTimer();
|
|
2365
2400
|
});
|
|
2366
2401
|
observer.observe(element, {
|
|
2367
2402
|
childList: true,
|
|
@@ -2374,15 +2409,38 @@ var Mutation = {
|
|
|
2374
2409
|
});
|
|
2375
2410
|
if (observers.length === 0) {
|
|
2376
2411
|
cleanup();
|
|
2377
|
-
resolve({ mutationCount: 0, stableTime: 0 });
|
|
2412
|
+
resolve({ mutationCount: 0, stableTime: 0, wasPaused: false });
|
|
2378
2413
|
return;
|
|
2379
2414
|
}
|
|
2380
|
-
|
|
2415
|
+
const runInitialCheck = async () => {
|
|
2416
|
+
if (hasCallback && window[callbackName2]) {
|
|
2417
|
+
const firstSelector = selectorList2[0];
|
|
2418
|
+
const firstElement = document.querySelector(firstSelector);
|
|
2419
|
+
if (firstElement) {
|
|
2420
|
+
const innerHTML = firstElement.innerHTML || "";
|
|
2421
|
+
const innerText = firstElement.innerText || firstElement.textContent || "";
|
|
2422
|
+
try {
|
|
2423
|
+
const signal = await window[callbackName2]({
|
|
2424
|
+
mutationCount: 0,
|
|
2425
|
+
innerHTML,
|
|
2426
|
+
innerText
|
|
2427
|
+
});
|
|
2428
|
+
if (signal === "__PAUSE__") {
|
|
2429
|
+
pauseStableTimer();
|
|
2430
|
+
return;
|
|
2431
|
+
}
|
|
2432
|
+
} catch (e) {
|
|
2433
|
+
}
|
|
2434
|
+
}
|
|
2435
|
+
}
|
|
2436
|
+
resetStableTimer();
|
|
2437
|
+
};
|
|
2438
|
+
runInitialCheck();
|
|
2381
2439
|
});
|
|
2382
2440
|
},
|
|
2383
|
-
{ selectorList, stableTime, timeout,
|
|
2441
|
+
{ selectorList, stableTime, timeout, callbackName, hasCallback: !!onMutation }
|
|
2384
2442
|
);
|
|
2385
|
-
logger9.success("waitForStable", `DOM \u7A33\u5B9A, \u603B\u5171 ${result.mutationCount} \u6B21\u53D8\u5316`);
|
|
2443
|
+
logger9.success("waitForStable", `DOM \u7A33\u5B9A, \u603B\u5171 ${result.mutationCount} \u6B21\u53D8\u5316${result.wasPaused ? ", \u66FE\u6682\u505C\u8BA1\u65F6" : ""}`);
|
|
2386
2444
|
return result;
|
|
2387
2445
|
},
|
|
2388
2446
|
/**
|