Ruby类中的可选哈希选项

时间:2018-11-19 09:51:21

标签: ruby cucumber capybara

我正在尝试使用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']

2 个答案:

答案 0 :(得分:1)

您可以通过Capabilities设置任何#[]=键,并在蛇形情况下设置该键

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

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

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

可能更有意义

答案 1 :(得分:0)

您可以执行以下操作:

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

让我知道是否有帮助!