page.waitForFunction 未按预期工作 Playwright.js
page.waitForFunction not working as expected Playwright.js
我正在尝试在 page.waitForFunction 中调试我的逻辑,但我注销的任何内容都没有打印出来。如果我尝试使用 VScode 调试器,它会忽略回调函数内的任何断点。如果我在 await page.waitForFunction()
调用之前放置一个断点,然后尝试单步执行它,我最终会进入 /internal/async_hooks
,然后卡在一堆节点内部。同样,如果我尝试在回调中放置一个断点并跳转到那里,它不会停止。
我不知道发生了什么。我用错了吗?或者完全误解它是如何工作的?
这是一个简单的例子。
const { chromium } = require("playwright");
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
const i = 0;
await page
.waitForFunction(
(i) => {
i++;
console.log(`---> evaluating # ${i}`);
if (i < 3) return false;
return true;
},
i,
{ timeout: 3000 }
)
.catch(console.error);
console.log("done");
await browser.close();
})();
对于这段代码,我希望它能注销
// ---> evaluating #1
// ---> evaluating #2
// done
相反,回调中的任何内容都不会注销,它只是注销
// done
如果我总是在回调中 return false
,那么它会按预期出现 Timeout 3000ms exceeded.Error
错误,所以它好像在工作,但我无法调试发生了什么在回调中。
有几件事:
首先,您传递给 waitForFunction
的函数正在浏览器内部执行。因此,您不会在您的应用程序中看到该日志,除非您使用 console
事件获取日志。
其次,与上一点有关。该函数将始终在 i
参数中得到 0
,因为 i
在浏览器中递增。这不会影响将一遍又一遍传递的变量。
我正在尝试在 page.waitForFunction 中调试我的逻辑,但我注销的任何内容都没有打印出来。如果我尝试使用 VScode 调试器,它会忽略回调函数内的任何断点。如果我在 await page.waitForFunction()
调用之前放置一个断点,然后尝试单步执行它,我最终会进入 /internal/async_hooks
,然后卡在一堆节点内部。同样,如果我尝试在回调中放置一个断点并跳转到那里,它不会停止。
我不知道发生了什么。我用错了吗?或者完全误解它是如何工作的?
这是一个简单的例子。
const { chromium } = require("playwright");
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
const i = 0;
await page
.waitForFunction(
(i) => {
i++;
console.log(`---> evaluating # ${i}`);
if (i < 3) return false;
return true;
},
i,
{ timeout: 3000 }
)
.catch(console.error);
console.log("done");
await browser.close();
})();
对于这段代码,我希望它能注销
// ---> evaluating #1
// ---> evaluating #2
// done
相反,回调中的任何内容都不会注销,它只是注销
// done
如果我总是在回调中 return false
,那么它会按预期出现 Timeout 3000ms exceeded.Error
错误,所以它好像在工作,但我无法调试发生了什么在回调中。
有几件事:
首先,您传递给 waitForFunction
的函数正在浏览器内部执行。因此,您不会在您的应用程序中看到该日志,除非您使用 console
事件获取日志。
其次,与上一点有关。该函数将始终在 i
参数中得到 0
,因为 i
在浏览器中递增。这不会影响将一遍又一遍传递的变量。