2017-09-06 31 views
3

我正在嘗試使用Puppeteer進行端到端測試。這些測試需要訪問DevTools的網絡仿真功能(例如模擬脫機瀏覽)。Puppeteer:有沒有辦法訪問DevTools Network API?

到目前爲止,我使用的是chrome-remote-interface,但對我來說太低級了。

據我所知,Puppeteer沒有公開DevTools的網絡功能(DevTools協議中的emulateNetworkConditions)。

在Puppeteer中是否有逃生艙口來訪問這些功能?在DevTools API可訪問的上下文中執行Javascript代碼段的方法?

感謝

編輯: OK,這樣看來,我可以用這樣的解決缺乏API的:

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

但我想它是壞的形式,可以隨時都在我的腳下滑動?

+0

沒有任何時候,我想,但只有當底層API以意想不到的方式發生變化。 – wOxxOm

回答

6

更新:無頭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(); 
}); 
+0

好吧,我不知道那個無頭的Chrome無法被遏制。至於將原始協議消息發送到頁面的能力是否會在某個時候暴露出來?或者它會保持原樣,還是隱藏在封閉物之內?基本上,我可以依靠它嗎? – Rom1

+0

@ebidel,因爲它被添加到鉻,我們如何使用它? https://chromium.googlesource.com/chromium/src/+/8931a104b145ccf92390f6f48fba6553a1af92e4%5E%21/#F0 –

+0

應該立即開箱即用。你在看什麼? – ebidel

相關問題