我正在尝试使用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']
。
答案 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)
让我知道是否有帮助!