ruby Selenium Webdriver -设置首选浏览器语言DE

xmq68pz9  于 2023-08-04  发布在  Ruby
关注(0)|答案(6)|浏览(116)

我在使用Selenium Webdriver和Ruby的无头Chrome中设置首选(接受的语言)时遇到问题。我使用以下WebDriver设置:

Selenium::WebDriver::Chrome.driver_path = @config[<path to the Chrome Driver>]

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
options.add_argument('--disable-translate')
options.add_argument("--lang=de")

字符串
驱动程序然后初始化为:

@selenium_driver = Selenium::WebDriver.for :chrome, options: options


一切正常,但在某些页面上,即使我导航到德语页面的URL,Chrome也会返回英文内容(例如:page.de)。在这些情况下,由于内部转发到www.example.com,Chrome驱动程序返回英文内容page.de/en。我没有在查询的URL中指定en路径。
我尝试使用Webdriver首选项设置语言:

options.add_preference('accept_languages', 'de')


而不是add_argument,但它不会改变任何行为。
有没有人知道如何强制Ruby中由Selenium Webdriver控制的无头Chrome以定义的语言请求页面内容,或者-不是最佳的,但它可能有助于作为一种解决方案-停止转发?
任何帮助非常感谢
最佳
克里德

p8h8hvxi

p8h8hvxi1#

我找到了一个适合我的解决方案。在许多情况下,问题是坐在屏幕前,根本没有足够精确地工作;- )
而不是使用

options.add_argument("--lang=de")

字符串
你必须使用

options.add_argument("--lang=de-DE")


当我使用IETF语言标记时,我最初发布的代码可以按预期工作。

jvlzgdj9

jvlzgdj92#

我在我的test_helper.rb中使用这个对我来说很好。

Capybara.register_driver :selenium do |app|
  Chromedriver.set_version "2.36"

  desired_capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    'chromeOptions' => {
      'prefs' => {
        'intl.accept_languages' => 'en-US'
     },
     args: ['disable-gpu', 'headless']
   }
  )

  Capybara::Selenium::Driver.new(app, { browser: :chrome, desired_capabilities: desired_capabilities })
end

Capybara.javascript_driver = :chrome
Capybara.default_driver = :selenium

字符串

siotufzp

siotufzp3#

这个prefs散列在options散列中对我来说很有用。它位于driven_by :selenium行的末尾。
(内部test/application_syste_test_case.rb

# frozen_string_literal: true

require 'test_helper'
require 'capybara/rails'

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :chrome, screen_size: [1400, 1400], options: { prefs: { 'intl.accept_languages' => 'de,de-DE;q=0.9,en;q=0.1' } }

# ...

字符串

2021-06-14更新:

上一个示例生成以下弃用警告:
WARN Selenium [DEPRECATION] :prefs is deprecated. Use Selenium::WebDriver::Chrome::Options#add_preference instead.
IMO,下面的解决方案是丑陋的,但我张贴时,它是完全弃用和原来的停止工作.

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by(:selenium,
    using: :chrome,
    screen_size: [1400, 1400],
    options: {
      options: Selenium::WebDriver::Chrome::Options.new(
        prefs: { 'intl.accept_languages' => 'de,de-DE;q=0.9,en;q=0.1' }
      )
    },
  )

blmhpbnm

blmhpbnm4#

你应该可以通过添加一个 experimental option 来解决你的问题:

options.add_option('prefs', {'intl.accept_languages': 'en,en_US'})

字符串
我确信它可以在Python上工作,但我没有在Ruby上试过:这种方法是正确的,不确定实施。
您可以在this repository中找到处理Python代码中问题的代码,以及在this Q&A中找到如何在Ruby中实现experimental_options

cs7cruho

cs7cruho5#

为我工作:

options = Selenium::WebDriver::Firefox::Options.new
options.add_preference("intl.accept_languages", 'de-DE')
Capybara::Selenium::Driver.new(app, browser: :firefox, options: options)

字符串

zpjtge22

zpjtge226#

chrome_options.add_argument("--lang=en")
 
chrome_options.add_argument("--enable-experimental-accessibility-language-detection-dynamic")

chrome_options.add_argument("--enable-experimental-accessibility-language-detection")

字符串
这应该有助于设置语言为英语的chrome无头模式

相关问题