2013-04-05 142 views
13

這是我正在使用的,用戶代理可以成功設置,而下載首選項不能。如何使用Selenium Webdriver .NET綁定來設置Chrome首選項?

Windows 7中,26鉻,硒 - 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 
    }, 

回答

19

Selenium dotNet驅動程序不支持設置chrome.prefs開箱即用。問題是必須在chromeOptions節點下定義爲prefs。該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); 
} 
+0

工程就像一個魅力。謝謝。你怎麼知道這件事的?任何參考? – 2013-08-12 21:05:14

+6

我從https://code.google.com/p/chromedriver/wiki/CapabilitiesAndSwitches#List_of_recognized_capabilities瞭解到,這些首選項應該是chromeOptions的一部分。然後我使用JetBrains dotPeek反向設計了Selenium .NET驅動程序,以查看它是如何將選項傳遞給chromedriver.exe的。顯然,ChromeOptions是chromeOptions-object chromedriver期待的一款封裝程序。 .NET庫將ChromeOptions序列化爲JSON並將其傳遞給chromedriver。通過繼承ChromeOptions並添加您自己的屬性,您可以添加更多選項:-) – 2013-08-13 06:17:36

+2

Bravo,Martin!這工作非常好!儘管.NET樣式和一致性規則要求將大寫屬性設爲大寫,但讀者的一小部分免責聲明不會使'prefs'屬性大寫。否則,Chrome驅動程序將無法正確解析它,並會在被調用時發生錯誤。 – 2014-01-03 17:27:04

23

如果你已經更新到Chrome瀏覽器版本36.0.x和硒2.42,馬丁斯解決方案不再有效。

它似乎已經更新。您現在可以使用下面的代碼

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

我現在用它來改變我的打印機設置使用此代碼爲例

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

我認爲馬丁的解決方案,以「保存爲PDF」,而不是默認的非常好,準確,但它突然停止對我的工作,所以自然我必須看看我能否找到解決方案。

相關問題