Ruby class 中的可选哈希选项

Optional hash option in Ruby class

我正在尝试使用 Capybara 配置驱动程序,其中选项哈希仅通过环境变量使用。

Capybara.register_driver :chrome do |app|
opts = Selenium::WebDriver::Chrome::Options.new
opts.add_argument '--start-maximized'
opts.add_argument '--disable-infobars'
opts.add_argument '--headless' if ENV['headless']
caps = Selenium::WebDriver::Remote::Capabilities.new(accept_insecure_certs: true, proxy: proxy, browserName: 'chrome' if ENV['extra_args])
Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    options: opts,
    desired_capabilities: caps
)
  end

  Capybara.app_host = location
  Capybara.default_driver = :chrome
end

这是我正在处理的行:

caps = Selenium::WebDriver::Remote::Capabilities.new(accept_insecure_certs: true, proxy: proxy, browserName: 'chrome' if ENV['extra_args])

我知道这是无效的语法,但有什么方法可以实现我在这里尝试做的事情吗? browserName 仅在设置 ENV[extra_args'] 时才需要调用。

您可以执行以下操作:

options = {accept_insecure_certs: true, proxy: proxy}
options.merge!({browserName: 'chrome'}) if ENV['extra_args]
caps = Selenium::WebDriver::Remote::Capabilities.new(options)

如果有帮助请告诉我!

您可以通过 #[]= 设置任何 Capabilities 键,使用蛇形键

...
caps = Selenium::WebDriver::Remote::Capabilities.new(accept_insecure_certs: true, proxy: proxy)
caps['browser_name'] = 'chrome' if ENV['extra_args']
...

可以,但是 Capabilities 上还有一个 browser_name= 方法,所以

...
caps = Selenium::WebDriver::Remote::Capabilities.new(accept_insecure_certs: true, proxy: proxy)
caps.browser_name = 'chrome' if ENV['extra_args']
...

可能更有意义