无法在无头模式下使用firefox,Capybara和Docker运行selenium

时间:2017-10-05 00:28:03

标签: ruby selenium firefox rspec capybara

我正在尝试使用Selenium和Firefox与Capybara进行测试。当我运行测试时,它会对“http://127.0.0.1:4444:/sessions”发出POST请求,它会启动一个geckodriver的服务器,并且我有一个超时错误。我尝试通过执行以下命令手动执行此操作:

curl -d '{"desiredCapabilities": {"browserName": "firefox", "version": "", "platform": "ANY", "javascriptEnabled": 1, "cssSelectorsEnabled": 1, "takesScreenshot": 1, "nativeEvents": 0, "rotatable": 0, "unexpectedAlertBehaviour": "ignore", "moz:firefoxOptions": {"args": ["-headless"]}}, "capabilities": {"firstMatch": [{"browserName": "firefox", "moz:firefoxOptions": {}}]}}' http://127.0.0.1:4444/session

它失败了,我收到了这条消息:Error: GDK_BACKEND does not match available displays。当我认识xvfb-run geckodriver时,它有效,但我必须找到一种方法,用RSpec在无头模式下启动geckodriver。

我在docker env上,所以我没有安装xserver。

我该怎么办?

修改

我有:

Firefox 52.4
Geckodriver 0.19.0
Capybara 2.13
Selenium-webdriver 3.6

这是我的硒配置:

Capybara.register_driver :selenium do |app|
  require 'selenium/webdriver'
  Capybara::Selenium::Driver.new(app, :browser => :firefox)
end

所有东西都在码头上运行。

1 个答案:

答案 0 :(得分:7)

既然您拥有Firefox 56(geckodriver 0.19支持并且还支持无头模式,Firefox 52没有),您需要配置驱动程序以启用无头模式。

的内容
Capybara.register_driver :selenium do |app|
  browser_options = ::Selenium::WebDriver::Firefox::Options.new()
  browser_options.args << '--headless'

  Capybara::Selenium::Driver.new(
    app,
    browser: :firefox,
    options: browser_options
  )
end

应该这样做。