Chrome DevTools Protocol

在 Selenium 中使用 Chrome DevTools Protocol 的範例。在 WebDriver BiDi 實作完成之前,CDP 支援是暫時的。

許多瀏覽器提供「DevTools」—— 一組與瀏覽器整合的工具,開發人員可以使用這些工具來偵錯 Web 應用程式並探索其頁面的效能。 Google Chrome 的 DevTools 使用一種稱為 Chrome DevTools Protocol(或簡稱「CDP」)的協定。顧名思義,這不是為測試而設計的,也沒有穩定的 API,因此功能高度依賴於瀏覽器的版本。

Selenium 正在努力實作一個基於標準、跨瀏覽器、穩定的 CDP 替代方案,稱為 [WebDriver BiDi]。 在對這個新協定的支援完成之前,Selenium 計劃在適用的情況下提供對 CDP 功能的存取。

搭配 Selenium 使用 Chrome DevTools Protocol

Chrome 和 Edge 有一種方法可以發送基本的 CDP 命令。 這不適用於需要雙向通訊的功能,並且您需要知道何時啟用哪些網域以及網域/方法/參數的確切名稱和類型。

    Map<String, Object> cookie = new HashMap<>();
    cookie.put("name", "cheese");
    cookie.put("value", "gouda");
    cookie.put("domain", "www.selenium.dev");
    cookie.put("secure", true);
    ((HasCdp) driver).executeCdpCommand("Network.setCookie", cookie);
    cookie = {'name': 'cheese',
              'value': 'gouda',
              'domain': 'www.selenium.dev',
              'secure': True}

    driver.execute_cdp_cmd('Network.setCookie', cookie)
            var cookie = new Dictionary<string, object>
            {
                { "name", "cheese" },
                { "value", "gouda" },
                { "domain", "www.selenium.dev" },
                { "secure", true }
            };
            ((ChromeDriver)driver).ExecuteCdpCommand("Network.setCookie", cookie);
    driver.execute_cdp('Network.setCookie',
                       name: 'cheese',
                       value: 'gouda',
                       domain: 'www.selenium.dev',
                       secure: true)

為了更輕鬆地使用 CDP 並提供對更進階功能的存取,Selenium binding 會自動為最常見的網域產生類別和方法。 但是,CDP 方法和實作可能會因版本而異,因此您需要保持 Chrome 版本和 DevTools 版本匹配。 Selenium 在任何給定時間都支援 Chrome 的 3 個最新版本,並嘗試安排發布時間,以確保可以存取最新版本。

對於多個 binding 來說,這種限制帶來了額外的挑戰,其中動態產生的 CDP 支援需要使用者定期更新其程式碼,以參考正確的 CDP 版本。 在某些情況下,已經建立了一個理想化的實作,它應該適用於任何版本的 CDP,而無需使用者更改其程式碼,但這並非總是可行的。

如何在 Selenium 測試中使用 CDP 的範例可以在以下頁面中找到,但我們想指出幾個常見的範例,它們的實際價值有限。

  • 地理位置 — 幾乎所有網站都使用 IP 位址來確定實際位置,因此設定模擬地理位置很少能達到預期的效果。
  • 覆寫裝置指標 — Chrome 提供了一個很棒的 API,用於在 Options 類別中設定 行動裝置模擬,這通常優於嘗試使用 CDP 來執行此操作。

Chrome DevTools 日誌記錄功能

使用 CDP 的日誌記錄功能。

Chrome DevTools 網路功能

使用 CDP 的網路功能。

Chrome DevTools 腳本功能

使用 CDP 的腳本功能。

上次修改時間:2024年7月10日:Release 4.22 Updates (#1765) (fa7b1165ed0)