AD

2024-04-08

[筆記] 解決 remote chrome 不支援 network throttling

我之前遇到一個專案,需要在弱網環境測試影片播放的狀況。

一般 webdriver 用 set_network_conditions 就可以設定網路速度,但是我們需要使用 remote webdriver 來連線倒 webdriver 的 docker,這時就會發現 remote webdriver 沒有 set_network_conditions,會有這樣的錯誤:

AttributeError: module 'selenium.webdriver.chromium.webdriver' has no attribute 'set_network_conditions'

搜尋之後也確實發現官方說 vendor-specific endpoints 目前只支援 vendor-specific webdriver class(set_network_conditions 只有特定供應商比方 webdriver.Chrome 能使用),所以 webdriver.Remote 確實沒有 set_network_conditions。

一開始前人使用的方法是一個 docker 包含整個作業系統和測試的 code,雖然不常需要改動,但如果真的需要,每次要對 code 做小調整都要整個 docker 重包,實在很不放便,於是我想說還是該解決一下這個問題⋯⋯

雖然 webdriver.Remote 不支援 set_network_conditions,但 docker webdriver 和 selenium webdriver 當然還是有這個功能的,所以這裡使用 types.MethodType,將 ChromiumRemoteConnection 中的 set_network_conditions 和 get_network_conditions 方法綁定到 driver 物件上。

範例 code 如下:

這樣就成功讓 docker webdriver 限速了,有需要時都能夠方便的修改 code 了~

如果文章有幫助到你可以在 LikeCoin 上幫我拍手喔