7

Môi trường: Mac OS X 10.8.3, Ruby 2.0.0p0, selenium-webdriver 2.32.1, ChromeDriver 26.0.1383.0.Tiểu sử tùy chỉnh cho Chrome

Tôi muốn thay đổi ngôn ngữ trình duyệt mặc định. Tôi đang thử nghiệm nếu trang web phát hiện ngôn ngữ trình duyệt chính xác và hiển thị các trang bằng ngôn ngữ.

tôi đã có thể thiết lập ngôn ngữ Firefox để Đức:

require "selenium-webdriver" 

profile = Selenium::WebDriver::Firefox::Profile.new 
profile["intl.accept_languages"] = "de" 

caps = Selenium::WebDriver::Remote::Capabilities.firefox(firefox_profile: profile) 
caps.platform = "Linux" 
caps.version = 20 

driver = Selenium::WebDriver.for( 
:remote, 
url: "http://USERNAME:[email protected]:80/wd/hub", 
desired_capabilities: caps) 

driver.navigate.to "http://sandbox.translatewiki.net/" 

Tôi muốn làm điều tương tự sử dụng Chrome (và các trình duyệt khác, nếu có thể).

Tôi đã thử một số cách để mở trang bằng tiếng Đức trong Chrome, nhưng mỗi khi trang được hiển thị bằng tiếng Anh, thay vì bằng tiếng Đức.

require "selenium-webdriver" 

profile = Selenium::WebDriver::Chrome::Profile.new 
profile["intl.accept_languages"] = "de" 

caps = Selenium::WebDriver::Remote::Capabilities.chrome(firefox_profile: profile) 
caps.platform = "Linux" 
caps.version = "" 

driver = Selenium::WebDriver.for( 
:remote, 
url: "http://USERNAME:[email protected]:80/wd/hub", 
desired_capabilities: caps) 

driver.navigate.to "http://sandbox.translatewiki.net/" 

Nếu tôi thay đổi firefox_profile: profile-profile: profile hoặc chrome_profile: profile, trang mở bằng tiếng Anh (thay vì bằng tiếng Đức) mỗi lần.

Theo như tôi có thể thấy trong số API docs, chỉ hỗ trợ :firefox_profile.

Tôi có thể làm điều đó trên local machine, nhưng không phải khi sử dụng Phòng thí nghiệm nước sốt.

+0

Vì vậy, nếu bạn vượt qua: firefox_profile cho mũ Chrome, nó có hoạt động hay không? – p0deje

+0

@ p0deje: Nó không hoạt động. Tôi đã từng làm gì, Chrome luôn mở trang bằng tiếng Anh, thay vì bằng tiếng Đức. –

+1

Bạn có chắc chắn rằng nếu bạn đặt ngôn ngữ mặc định trong trình duyệt, trang của bạn tải chính xác không? – fotanus

Trả lời

3

này nên làm việc:

require "selenium-webdriver" 

profile = Selenium::WebDriver::Chrome::Profile.new 
profile["intl.accept_languages"] = "de" 

caps = Selenium::WebDriver::Remote::Capabilities.chrome(
    platform: "Linux", 
    version: "", 
    'chrome.profile' => profile.as_json['zip'] 
) 

Selenium::WebDriver.for(:remote, 
    url: "http://[email protected]:80/wd/hub", 
    desired_capabilities: caps 
) 
+0

Tôi biết Jari là người duy nhất có thể trả lời câu hỏi này! – p0deje

+0

500 danh tiếng tốt nhất từ ​​trước tới nay. :) –

+0

Điều này đã được xác minh để hoạt động chưa? Nó có vẻ rất gần với giải pháp đề xuất của tôi rằng nó sẽ làm tôi ngạc nhiên nếu một người làm việc và người kia thì không. –

0

Tôi nhìn thấy những dịch Đức trên máy tính địa phương của tôi sử dụng:

profile = Selenium::WebDriver::Chrome::Profile.new 
profile["intl.accept_languages"] = "de" 
@driver = Selenium::WebDriver.for :chrome, :profile => profile 
@target = 'http://sandbox.translatewiki.net/' 

OSX: 10.7.5

ruby ​​1.9.3p0 (2011/10/30 sửa đổi 33.570) [x86_64-darwin11. 4.2]

+0

Giàu, như câu cuối cùng trong câu hỏi của tôi nói, tôi có thể làm điều đó trên một máy tính địa phương (xin vui lòng thông báo liên kết đến bài viết blog của tôi), nhưng không phải khi sử dụng phòng thí nghiệm Sauce. –

+1

Tôi nhận được 'tùy chọn chrome không được nhận dạng: hồ sơ' khi tôi làm điều này ... –

1

Rất tiếc, tài liệu dành cho SauceLabs + Chrome + Selenium + Ruby rất không nhất quán và đôi khi mâu thuẫn. Rất tiếc, tôi không có tài khoản SauceLabs để kiểm tra để tất cả những gì tôi có thể làm là cung cấp cho bạn các đề xuất.

This documentation cho biết đây là sự cố đã biết mà ChromeDriver không hỗ trợ hồ sơ tùy chỉnh. This post cho biết cách đặt hồ sơ tùy chỉnh cho Chrome. Đi con số.

Đặt cấu hình hoặc ngôn ngữ mặc định cho vấn đề đó KHÔNG phải là một phần của tiêu chuẩn WebDriver wire protocol để bạn có thể không may mắn.

Một giải pháp khác là đặt trình duyệt của bạn sử dụng proxy và trong proxy thêm/thay thế tiêu đề Chấp nhận ngôn ngữ trong proxy.

Tuy nhiên, nhìn qua mã Selenium Ruby, nó trông giống như bài đó có thể là trên một cái gì đó, vì vậy cung cấp cho một thử này:

profile = Selenium::WebDriver::Chrome::Profile.new 
profile["intl.accept_languages"] = "de" 

caps = Selenium::WebDriver::Remote::Capabilities.chrome 
caps['chromeOptions'] = { 'profile' => profile.as_json['zip'] } 
driver = Selenium::WebDriver.for( 
:remote, 
url: "http://USERNAME:[email protected]:80/wd/hub", 
desired_capabilities: caps) 

driver.navigate.to "http://sandbox.translatewiki.net/" 

EDIT: Có vẻ như --lang- chuyển đổi không làm những gì bạn muốn, vì vậy hãy bỏ qua những điều sau. Tôi để nó ở đây vì hậu thế.

này có thể làm việc (quên về cấu hình, sử dụng dòng lệnh chuyển mạch):

caps = Selenium::WebDriver::Remote::Capabilities.chrome 
caps['chrome.switches'] = ['--lang-de'] 
+0

Lab nước sốt không có tài khoản miễn phí ... :) –

+0

Tôi không thể tìm thấy chuyển đổi' --lang-de' tại http: //src.chromium .org/svn/trunk/src/chrome/common/chrome_switches.cc Bạn tìm thấy nó ở đâu? –

+0

Tôi tìm thấy công tắc '--lang' + mã quốc gia [ở đây] (http://peter.sh/experiments/chromium-command-line-switches/) và [tại đây] (http://src.chromium.org /svn/trunk/src/ui/base/ui_base_switches.cc). Nó có thể không hoạt động, nhưng đó là một khả năng. Bạn đã thử liên hệ với SauceLabs về điều này chưa? Thực sự họ nên có câu trả lời cho bạn. –

0

Đối với bây giờ bạn chỉ có thể sử dụng phương pháp này

def launch_browser options={} 

    language = options.fetch(:language, "en_US") 
    url = options.fetch(:url, "www.google.com") 

    prefs = { 
     :intl => { 
      :accept_languages => language 
     } 
    } 
    browser = Watir::Browser.new :chrome, :prefs => prefs 

    browser.goto url 
    end 

và sau đó bạn chỉ cần gọi

launch_browser :language => "de" 
Các vấn đề liên quan