Puppeteer Element Handle在导航时会丢失上下文

时间:2017-10-13 14:28:37

标签: puppeteer

我正在尝试做什么:

我正在尝试获取我的故事书项目中每个元素示例的屏幕截图。我试图这样做的方法是点击元素然后截图,点击下一个,截图等。

以下是附加代码:

test('no visual regression for button', async () => {
  const selector = 'a[href*="?selectedKind=Buttons&selectedStory="]';
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('http://localhost:8080');
  let examples = await page.$$(selector);
  await examples.map( async(example) => {
    await example.click();
    const screen = await page.screenshot();
    expect(screen).toMatchImageSnapshot();
  });
  await browser.close();
});

但是当我运行此代码时,我收到以下错误:

Protocol error (Runtime.callFunctionOn): Target closed.

  at Session._onClosed (../../node_modules/puppeteer/lib/Connection.js:209:23)
  at Connection._onClose (../../node_modules/puppeteer/lib/Connection.js:116:15)
  at Connection.dispose (../../node_modules/puppeteer/lib/Connection.js:121:10)
  at Browser.close (../../node_modules/puppeteer/lib/Browser.js:60:22)
  at Object.<anonymous>.test (__tests__/visual.spec.js:21:17)
      at <anonymous>
  at process._tickCallback (internal/process/next_tick.js:169:7)

我相信这是因为元素失去了它的上下文或类似的东西,我不知道用什么方法来解决这个问题。您能提供更深入的解释或可能的解决方案吗?我发现API文档根本没用。

1 个答案:

答案 0 :(得分:0)

一旦页面导航作为垃圾收集发生,就会调用ElementHandle.dispose(),如docs中所述。因此,当您致电element.click()时,它会导航并且其余元素不再指向任何内容。