7

环境:Mac OS X 10.8.3、Ruby 2.0.0p0、selenium-webdriver 2.32.1、ChromeDriver 26.0.1383.0。

我想更改默认浏览器语言。我正在测试该站点是否正确检测到浏览器语言并以该语言显示页面。

我能够将 Firefox 语言设置为德语:

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:ACCESS-KEY@ondemand.saucelabs.com:80/wd/hub", 
desired_capabilities: caps)

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

我想使用 Chrome(和其他浏览器,如果可能的话)做同样的事情。

我尝试了几件事试图在 Chrome 中以德语打开页面,但每次页面都以英语而不是德语显示。

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:ACCESS-KEY@ondemand.saucelabs.com:80/wd/hub", 
desired_capabilities: caps)

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

如果我更改firefox_profile: profileprofile: profileor chrome_profile: profile,则页面每次都以英语(而不是德语)打开。

据我在API 文档中看到的,仅:firefox_profile支持。

我能够在本地机器上做到这一点,但在使用 Sauce Labs 时却不行。

4

4 回答 4

3

这应该有效:

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://...@ondemand.saucelabs.com:80/wd/hub", 
  desired_capabilities: caps
)
于 2013-05-07T10:37:28.257 回答
1

哇,SauceLabs + Chrome + Selenium + Ruby 的文档非常不一致,有时甚至相互矛盾。不幸的是,我没有要测试的 SauceLabs 帐户,所以我所能做的就是给你一些建议。

该文档说 ChromeDriver 不支持自定义配置文件是一个已知问题。 这篇文章展示了如何为 Chrome 设置自定义配置文件。去搞清楚。

为此设置配置文件或默认语言不是标准WebDriver 有线协议的一部分,因此您可能不走运。

一种解决方法是将浏览器设置为使用代理并在代理中添加/替换代理中的 Accept-Language 标头。

尽管如此,通过 Selenium Ruby 代码,看起来那个帖子可能是关于什么的,所以试试这个:

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:ACCESS-KEY@ondemand.saucelabs.com:80/wd/hub", 
desired_capabilities: caps)

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

编辑:似乎--lang-开关没有做你想做的事,所以忽略以下内容。我把它留在这里留给后代。

这可能有效(忘记配置文件,使用命令行开关):

caps = Selenium::WebDriver::Remote::Capabilities.chrome
caps['chrome.switches'] = ['--lang-de']
于 2013-05-04T08:48:42.493 回答
0

现在你可以只使用这个方法

  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

然后你只需要打电话

    launch_browser :language => "de"
于 2014-02-21T11:32:13.723 回答
0

我在本地机器上看到德语翻译,使用:

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

操作系统:10.7.5

ruby 1.9.3p0(2011-10-30 修订版 33570)[x86_64-darwin11.4.2]

于 2013-04-25T15:32:05.147 回答