【问题标题】:How to set Chrome preferences using Selenium Webdriver .NET binding?如何使用 Selenium Webdriver .NET 绑定设置 Chrome 首选项?
【发布时间】:2013-03-27 08:11:27
【问题描述】:

这是我用的,用户代理可以设置成功,而下载偏好设置不行。

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这就像最新 chrome 的魅力。你让我开心.. :)
    【解决方案2】:

    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:\path\chromedriver", options);
    }
    

    【讨论】:

    • 像魅力一样工作。谢谢你。你是怎么知道的?有参考吗?
    • 我从code.google.com/p/chromedriver/wiki/… 了解到,首选项应该是 chromeOptions 的一部分。然后,我使用 JetBrains dotPeek 对 Selenium .NET 驱动程序进行了逆向工程,以查看它如何将选项传递给 chromedriver.exe。显然 ChromeOptions 是 chromeDriver 期望的 chromeOptions-object 的包装器。 .NET 库将 ChromeOptions 序列化为 JSON 并将其传递给 chromedriver。通过从 ChromeOptions 继承并添加您自己的属性,您可以添加更多选项 :-)
    • 太棒了,马丁!这非常有效!对读者的一个小小的免责声明,尽管 .NET 样式和一致性规则要求将 Properties 大写,但不要将 prefs 属性大写。否则,Chrome 驱动程序将无法正确解析它,并会在调用时出错。
    • 对于那些不能让它工作的人,请参阅下面 Ben 的解决方案。
    • 如果这个答案不再有效,不应该将其删除或标记吗?
    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 2019-12-14
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2019-02-05
    相关资源
    最近更新 更多