Puppeteer:有没有办法访问DevTools网络API?

Rom*_*om1 7 javascript google-chrome-devtools puppeteer

我正在尝试使用Puppeteer进行端到端测试.这些测试需要访问DevTools的网络仿真功能(例如,模拟离线浏览).

到目前为止,我使用的是chrome-remote-interface,但它对我来说太低级了.

据我所知,Puppeteer没有暴露网络DevTools功能(emulateNetworkConditions在DevTools协议中).

Puppeteer中是否有一个逃生舱来访问这些功能,例如在可以访问DevTools API的上下文中执行Javascript片段的方法?

谢谢

编辑: 好的,所以似乎我可以使用这样的东西来解决缺少API的问题:

    const client = page._client;
    const res = await client.send('Network.emulateNetworkConditions',
      { offline: true, latency: 40, downloadThroughput: 40*1024*1024, 
      uploadThroughput: 40*1024*1024 });
Run Code Online (Sandbox Code Playgroud)

但是我认为它是Bad Form并且可能随时在我的脚下滑倒?

ebi*_*del 8

更新:无头Chrome现在支持网络限制!

在Puppeteer中,您可以模拟设备(https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pageemulateoptions),但不能模拟网络条件.这是我们正在考虑的事情,但无头Chrome需要首先支持网络限制.

要模拟设备,我将使用以下设备中的预定义设备DeviceDescriptors:

const puppeteer = require('puppeteer');
const devices = require('puppeteer/DeviceDescriptors');
const iPhone = devices['iPhone 6'];

puppeteer.launch().then(async browser => {
  const page = await browser.newPage();
  await page.emulate(iPhone);
  await page.goto('https://www.google.com');
  // other actions...
  browser.close();
});
Run Code Online (Sandbox Code Playgroud)