如果通过元素句柄并且上下文被破坏,waitForFunction将失败

时间:2019-07-16 11:43:25

标签: javascript puppeteer

如果我将元素句柄(在body中)作为waitForFunction的参数传递,然后破坏了上下文(由于导航),则该承诺将失败。

我无法改进waitForFunction内部的代码,因为失败发生在操纵up的一方。

是否不等待使此代码正常工作而不添加catch

it('should survive navigations with handles', async({page, server}) => {
  await page.goto(server.EMPTY_PAGE);
  const body = await page.$('BODY');
  const watchdog = page.waitForFunction(el => !node.isConnected, {}, body);
  await page.goto(server.PREFIX + '/consolelog.html');
  await watchdog;
});

1 个答案:

答案 0 :(得分:0)

一个可能的解决方案是添加一些样板。运行一个函数以使用该元素声明一个变量,然后检查该变量。

fit('should survive navigations with handles', async({page, server}) => {
  await page.goto(server.EMPTY_PAGE);
  await page.evaluate(() => {
    window.__node = document.querySelector('BODY');
  });
  const watchdog = page.waitForFunction(() => !(window.__node && window.__node.isConnected));
  await page.goto(server.PREFIX + '/consolelog.html');
  await watchdog;
});