How to set Chrome preferences using Selenium Webdriver .NET binding?

匿名 (未验证) 提交于 2019-12-03 02:30:02

问题:

Here is what I'm using, user agent can be successfully set, while download preferences cannot.

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

ChromeOptions chromeOptions = new ChromeOptions(); var prefs = new Dictionary {     { "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);

Taken from 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": ""  }

Check the temp Preferences file at *temp\Google\Chrome\User Data\Default\Preferences, no "default_directory" and "prompt_for_download" are set.

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

回答1:

The Selenium dotNet driver does not support setting the chrome.prefs out of the box. The problem is that chrome.prefs must be defined as prefs under the chromeOptions node. The ChromeOptions class does not contain this variable, so you'll need to create your own ChromeOptions class:

public class ChromeOptionsWithPrefs: ChromeOptions {     public Dictionary prefs { get; set; } }  public static void Initialize() {     var options = new ChromeOptionsWithPrefs();     options.prefs = new Dictionary     {         { "intl.accept_languages", "nl" }     };     _driver = new ChromeDriver(@"C:\path\chromedriver", options); }


回答2:

If you have updated to Chrome Version 36.0.x and Selenium 2.42, Martins solution no longer works.

It seems to have been updated. You now can use the following code

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

I currently use it to change my Printer settings to "Save as PDF" instead of the default using this code as an example

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

I thought Martin's solution was very good and accurate, but it suddenly stopped working for me, so naturally I had to see if I could find a solution.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!