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

问题描述 投票:0回答:2

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

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": ""

}

检查

*temp\Google\Chrome\User Data\Default\Preferences
处的临时首选项文件,未设置
"default_directory"
"prompt_for_download"

   "download": {
      "directory_upgrade": true
   },
c# google-chrome selenium webdriver selenium-webdriver
2个回答
33
投票

如果您已更新到 Chrome 版本 36.0.x 和 Selenium 2.42,Martin 的解决方案 不再有效。

好像已经更新了。您现在可以使用以下代码

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\");

我认为马丁的解决方案非常好且准确,但它突然对我不起作用,所以很自然地我必须看看是否能找到解决方案。


23
投票

Selenium dotNet 驱动程序不支持开箱即用设置

chrome.prefs
。问题是
chrome.prefs
必须定义为
prefs
节点下的
chromeOptions
ChromeOptions
类不包含此变量,因此您需要创建自己的
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:\path\chromedriver", options);
}
© www.soinside.com 2019 - 2024. All rights reserved.