如何使用Selenium Webdriver . net绑定设置Chrome首选项



这是我正在使用的,用户代理可以成功设置,而下载首选项不能。

Windows 7, Chrome 26, Selenium-dotnet-2.31.2, chromedriver_win_26.0.1383.0

ChromeOptions chromeOptions = new ChromeOptions();
var prefs = new Dictionary<string, object> {
    { "download.default_directory", @"C:code" },
    { "download.prompt_for_download", false }
};
chromeOptions.AddAdditionalCapability("chrome.prefs", prefs);
chromeOptions.AddArgument("--user-agent=" + "some safari agent");
var driver = new ChromeDriver(chromeOptions);

取自chromedriver.log:

[1.201][FINE]:      Initializing session with capabilities {
   "browserName": "chrome",
   "chrome.prefs": {
      "download.default_directory": "C:\code",
      "download.prompt_for_download": false
   },
   "chrome.switches": [ "--user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version..." ],
   "chromeOptions": {
      "args": [ "--user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version..." ],
      "binary": "",
      "extensions": [  ]
   },
   "javascriptEnabled": true,
   "platform": "WINDOWS",
   "version": ""
}

检查*tempGoogleChromeUser DataDefaultPreferences处的temp Preferences文件,没有设置"default_directory""prompt_for_download"

   "download": {
      "directory_upgrade": true
   },

如果您已经更新到Chrome 36.0版本。x和Selenium 2.42,马丁斯的解决方案不再工作。

似乎已经更新了。现在可以使用以下代码

ChromeOptions options = new ChromeOptions();
options.AddUserProfilePreference(string preferenceName, object preferenceValue); 

我目前用它来改变我的打印机设置为"另存为PDF",而不是使用默认的使用这个代码为例

ChromeOptions options = new ChromeOptions();
options.AddUserProfilePreference("printing.print_preview_sticky_settings.appState", "{"version":2,"isGcpPromoDismissed":false,"selectedDestinationId":"Save as PDF");

我认为Martin的解决方案很好很准确,但是突然对我不起作用了,所以我很自然地要看看我是否能找到一个解决方案。

Selenium dotNet驱动程序不支持将chrome.prefs开箱即用。问题是chrome.prefs必须在chromeOptions节点下定义为prefsChromeOptions类不包含这个变量,所以您需要创建自己的ChromeOptions类:

public class ChromeOptionsWithPrefs: ChromeOptions
{
    public Dictionary<string,object> prefs { get; set; }
}
public static void Initialize()
{
    var options = new ChromeOptionsWithPrefs();
    options.prefs = new Dictionary<string, object>
    {
        { "intl.accept_languages", "nl" }
    };
    _driver = new ChromeDriver(@"C:pathchromedriver", options);
}

最新更新