我正在尝试使用Puppeteer进行端到端测试。这些测试需要访问DevTools的网络仿真功能(例如,模拟离线浏览)。
到目前为止,我正在使用chrome-remote-interface,但它的级别太低了我的口味。
据我所知,Puppeteer没有公开DevTools协议中的网络DevTools功能(emulateNetworkConditions
)。
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 });
但我认为它是Bad Form并且可能随时在我的脚下滑倒?
答案 0 :(得分: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();
});