2012-03-27 27 views
5

Tôi đã tìm cách thiết lập tùy chọn trình điều khiển cho trình điều khiển chrome bằng java trong hai ngày qua mà không có may mắn.Selenium 2 tùy chọn trình điều khiển chrome java tương đương với RubyBindings

Tuy nhiên, tôi đã tìm thấy giải pháp trong Ruby Ruby Bindings ruby ​​và muốn biết liệu có một dòng tương đương java tôi có thể sử dụng cho việc này hay không.

Mã ruby ​​như sau:

profile = Selenium::WebDriver::Chrome::Profile.new 
profile['download.prompt_for_download'] = false 
profile['download.default_directory'] = "/path/to/dir" 

driver = Selenium::WebDriver.for :chrome, :profile => profile 

Trong khi tìm kiếm tôi thấy chrome mà không có một hồ sơ tôi có thể sử dụng như lớp FirefoxProfile, vì vậy tôi bắt đầu bằng cách sử dụng lớp DesireCapabilities để thay thế. Sau khi điều tra sâu hơn vào vấn đề này, tôi thấy rằng tôi có thể thiết lập các "công tắc" và "prefs" VIA capabilities.setCapabilitiy và kết thúc với những điều sau đây:

Map<String, String> prefs = new Hashtable<String, String>(); 
prefs.put("download.prompt_for_download", "false"); 
prefs.put("download.default_directory", "/path/to/dir"); 
prefs.put("download.extensions_to_open", "pdf"); 

DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
capabilities.setCapability("chrome.prefs", prefs); 
dr = new ChromeDriver(capabilities); 

Tuy nhiên tôi đã không thể làm việc này, mặc định thư mục tải xuống chưa bao giờ được thay đổi thành thư mục được chỉ định khi đã bắt đầu. Tôi không chắc chắn nếu có vấn đề với cách tôi đang cố gắng thiết lập khả năng này hoặc nếu vấn đề nằm ở nơi khác.

Cuối cùng tôi cuối cùng sử dụng các giải pháp đề xuất ở đây:
http://dkage.wordpress.com/2012/03/10/mid-air-trick-make-selenium-download-files/

nhưng tôi muốn biết nếu nó có thể làm điều này sạch hơn, nhưng chỉ thiết lập các ưu đãi trực tiếp thay vì sử dụng giao diện người dùng

Bất kỳ trợ giúp nào được đánh giá cao, Cảm ơn!

Cập nhật:
Đáng ngạc nhiên là sau khi cập nhật Selenium 2 lên phiên bản 2.24.1 (và các cửa sổ chrome 22), các mã trên với Maps hoạt động như mong đợi, vấn đề duy nhất bây giờ là họ phản đối những việc sử dụng hàm tạo ChromeDriver (khả năng DesiredCapabilities) và thay vào đó, tôi khuyên bạn nên sử dụng lớp ChromeOptions mà tôi không thể làm việc cho kịch bản trên.

Dưới đây là các trang wiki giải thích việc sử dụng cả hai ChromeOptions và DesiredCapabilities: http://code.google.com/p/chromedriver/wiki/CapabilitiesAndSwitches

Trả lời

2

Các Ruby bindings thực sự mở rộng đó để:

{ 
    "download": { 
     "prompt_for_download": false, 
     "default_directory": "/path/to/dir" 
    } 
} 

Cố gắng xây dựng prefs Java của bạn phản đối như vậy và xem nếu nó hoạt động. Chuỗi vs boolean false cũng có thể là một vấn đề.

+0

Cảm ơn đề nghị này, tôi không nhận thấy rằng các ràng buộc mở rộng như thế. Thật không may mặc dù làm như vậy vẫn không giúp đỡ (tôi đã loại trừ các "prompt_for_download" như chrome đã làm nó theo mặc định để tránh khả năng của một vấn đề có) – Zero4573

0

Hãy thử điều này (Hãy tha thứ cho java của tôi mà là khá gỉ, nhưng hy vọng bạn sẽ có được ý tưởng)

Dictionary download = new Dictionary(); 
download["default_directory"] = "/path/to/dir"; 
Dictionary prefs = new Dictionary(); 
prefs["browser"] = download; 

DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
capabilities.setCapability("chrome.prefs", prefs); 
WebDriver driver = new ChromeDriver(capabilities); 

Cập nhật: Tôi chỉ duyệt mã và có vẻ như những gì tôi đề nghị trên có thể sẽ không hoạt động. Lớp hồ sơ chrome ruby ​​tạo tệp zip có cấu trúc tệp hồ sơ chrome trong đó để hỗ trợ tùy chọn chrome. Tôi không thể tìm thấy mã cơ sở như vậy trong java. Có một hồ sơ Firefox trong java mà điều simliar cho firefox, nhưng rõ ràng rằng sẽ không làm việc cho chrome. Vì vậy, trong ngắn hạn, tính năng này chưa được hỗ trợ trong java.

+0

Từ những gì tôi có thể thấy ý tưởng là giống như một trong những đề nghị của jarib, ngoại trừ chúng tôi đang sử dụng "trình duyệt" thay vì "tải xuống". Tôi đã thử thay đổi điều này quá nhưng tiếc là điều này vẫn không làm cho nó hoạt động (lưu ý rằng từ điển và hashtables cả hai thực hiện Bản đồ vì vậy nó không quan trọng nếu tôi sử dụng từ điển hoặc hashtables) – Zero4573

+0

Tôi tự hỏi nếu bạn đặt tạo một chuỗi json cho prefs ví dụ: capability.setCapability ("chrome.prefs", "{\" tải xuống \ ": {\" default_directory \ ": \"/path/to/dir \ "}}"); – KailuoWang

+0

Tôi chỉ duyệt mã có vẻ như những gì tôi đề xuất ở trên có thể sẽ không hoạt động. Lớp hồ sơ chrome ruby ​​tạo tệp zip vật lý với cấu trúc tệp hồ sơ chrome trong đó để hỗ trợ tùy chọn chrome. Tôi không thể tìm thấy mã cơ sở như vậy trong java. Có một hồ sơ Firefox trong java mà điều simliar cho firefox, nhưng rõ ràng rằng sẽ không làm việc cho chrome. – KailuoWang

0

Phiên bản mới hơn (Tôi đã thử nghiệm Chrome 44.0.2403.125, Selenium 2.47.1 và ChromeDriver 2.17.340128) làm việc với những điều sau đây:

ChromeOptions options = new ChromeOptions(); 
Map<String, Object> prefs = new HashMap<String, Object>(); 
prefs.put("download.default_directory", "/path/to/directory"); 
options.setExperimentalOption("prefs", prefs); 
ChromeDriver chromeDriver = new ChromeDriver(options); 
Các vấn đề liên quan