[食譜好菜] 替 Selenium WebDriver 加上 Proxy 的設定來加快測試的速度

我們使用 Selenium WebDriver 在做 Web Testing 的時候,測試對象往往已經是接近 Production 的狀態,多少會使用一些外部資源,像是 cdnjs.cloudflare.com、ajax.googleapis.com 的 CDN 服務,萬一網路不給力,整個測試行程 run 下來會多很多時間,這時候我想到可以架設 Proxy Server 來專門服務 Selenium,藉由 Proxy Server 降低存取外部資源的延遲時間,如果我們公司內部已經有架好的 Proxy Server 當然就不需要我們自己動手了。

另外要注意的是,建議從 Proxy Server 中將測試對象的 domain 設定為不要代理。

至於如何架設 Proxy Server,自行 Google 一下就很多了,以下就為大家獻上三大瀏覽器的 WebDriver 如何做 Proxy 設定?

Firefox WebDriver Proxy Settings

public static IWebDriver GenerateFirefoxDriver()
{
    var proxySettings = ConfigurationManager.AppSettings["Proxy"].Split(':');
    var proxyHost = proxySettings[0];
    var proxyPort = int.Parse(proxySettings[1]);

    var options = new FirefoxOptions();

    options.SetPreference("network.proxy.type", 1);
    options.SetPreference("network.proxy.http", proxyHost);
    options.SetPreference("network.proxy.http_port", proxyPort);
    options.SetPreference("network.proxy.ssl", proxyHost);
    options.SetPreference("network.proxy.ssl_port", proxyPort);

    return new FirefoxDriver(options);
}

FirefoxDriver 類別提供一個建構函式的多載 public FirefoxDriver(FirefoxOptions options),我們 new 一個 FirefoxOptions 呼叫 SetPreference 方法,一個一個指定 Firefox 的 Proxy 設定,相關設定值的說明可以在這裡找到。

Google Chrome Proxy Settings

public static IWebDriver GenerateChromeDriver()
{
    var proxySettings = ConfigurationManager.AppSettings["Proxy"];

    var proxy = new Proxy { HttpProxy = proxySettings, SslProxy = proxySettings };

    var options = new ChromeOptions { Proxy = proxy };

    return new ChromeDriver(options);
}

跟 FirefoxDriver 類別一樣有提供相關的建構函式多載 public ChromeDriver(ChromeOptions options),但是設定的程式碼更簡單,new 一個 ChromeOptions 指定 Proxy 的屬性值即可。

InternetExplorer(俗稱 IE) Proxy Settings

IE 的寫法跟 Chrome 一樣

public static IWebDriver GenerateInternetExplorerDriver()
{
    var proxySettings = ConfigurationManager.AppSettings["Proxy"];

    var proxy = new Proxy { HttpProxy = proxySettings, SslProxy = proxySettings };

    var options = new InternetExplorerOptions { Proxy = proxy };

    return new InternetExplorerDriver(options);
}

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學