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 在浏览器中递增。这不会影响将一遍又一遍传递的变量。