8

我正在尝试使用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 });

但我想这是糟糕的形式,可能随时从我脚下滑落?

4

1 回答 1

9

更新:无头 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();
});
于 2017-09-06T22:04:55.553 回答