2013-04-05 26 views
13

Dưới đây là những gì tôi đang sử dụng, tác nhân người dùng có thể được đặt thành công, trong khi tùy chọn tải xuống không thể.Làm cách nào để đặt tùy chọn Chrome bằng cách sử dụng liên kết Trình theo dõi web của Selenium.

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

Taken từ 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": "" 

} 

Kiểm tra tạm nộp Preferences tại *temp\Google\Chrome\User Data\Default\Preferences , không có "default_directory""prompt_for_download" được đặt.

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

Trả lời

19

Trình điều khiển Selenium dotNet không hỗ trợ đặt chrome.prefs ngoài hộp. Vấn đề là chrome.prefs phải được xác định là prefs dưới nút chromeOptions. Lớp ChromeOptions không chứa biến này, vì vậy bạn sẽ cần phải tạo lớp ChromeOptions riêng bạn:

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

Hoạt động như một sự quyến rũ. Cảm ơn bạn. Làm thế nào bạn biết điều này? Bất kỳ tài liệu tham khảo? –

+6

Tôi đã học được từ https://code.google.com/p/chromedriver/wiki/CapabilitiesAndSwitches#List_of_recognized_capabilities rằng các phần mở rộng phải là một phần của chromeOptions. Sau đó, tôi đảo ngược thiết kế trình điều khiển Selenium .NET với JetBrains dotPeek để xem cách nó chuyển các tùy chọn tới chromedriver.exe. Dường như ChromeOptions là một trình bao bọc khá hợp lý xung quanh chromeOptions-object chromedriver mong đợi. Thư viện .NET tuần tự hóa các ChromeOptions thành JSON và chuyển nó tới chromedriver. Bằng cách kế thừa từ ChromeOptions và thêm thuộc tính của riêng bạn, bạn có thể thêm các tùy chọn khác :-) –

+2

Bravo, Martin! Điều này làm việc tuyệt vời! Tuyên bố từ chối trách nhiệm nhỏ cho người đọc, mặc dù quy tắc tạo kiểu và thống nhất .NET yêu cầu Thuộc tính được viết hoa, không tận dụng thuộc tính 'prefs'. Nếu không, Trình điều khiển Chrome sẽ không thể phân tích cú pháp chính xác và sẽ thông qua lỗi khi được gọi. –

23

Nếu bạn đã cập nhật Chrome Version 36.0.x và Selenium 2,42, Martins giải pháp không còn hoạt động.

Dường như đã được cập nhật. Bây giờ bạn có thể sử dụng đoạn mã sau

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

Tôi hiện đang sử dụng nó để thay đổi các thiết lập máy in của tôi để "Save as PDF" thay vì mặc định sử dụng mã này là một ví dụ

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

Tôi nghĩ Martin của giải pháp đã rất tốt và chính xác, nhưng nó đột nhiên ngừng làm việc cho tôi, vì vậy tự nhiên tôi phải xem tôi có thể tìm ra giải pháp hay không.

Các vấn đề liên quan