首页 > 解决方案 > 从 Puppeteer 浏览器/页面上下文中提取本机界面

问题描述

是否可以从 Browser 或 Page 实例检索本机接口以检查对象是否是instanceofthis 接口?

例如,在一个开玩笑的测试上下文中(由于某些原因 CanvasRenderingContext2D 不可用,因为它是节点上下文而不是 JSDOM 或浏览器 API 的其他模拟):

it("should create an instance of CanvasRenderingContext2D", async () => {
  expect.assertions(1);

  const context = await page.evaluate(() => {
    return document.createElement("canvas").getContext("2d");
  });

  // Could a JSHandle be used somehow?
  const CanvasRenderingContext2DInterface = await page.evaluateHandle(() => CanvasRenderingContext2D);

  expect(context).toBeInstanceOf(CanvasRenderingContext2DInterface);
});

标签: javascriptjestjspuppeteer

解决方案


实例检查应直接在 Puppeteer 浏览器/页面中进行评估,否则执行上下文不同。

it("should create an instance of CanvasRenderingContext2D", async () => {
  expect.assertions(1);

  const isInstanceOfCanvasRenderingContext2D = await page.evaluate(
    () =>
      document.createElement("canvas").getContext("2d") instanceof CanvasRenderingContext2D
  );
  expect(isInstanceOfCanvasRenderingContext2D).toBeTruthy();
});

推荐阅读