Capybara:无法在 Mac 上使用 selenium 驱动程序截取屏幕截图

Trầ*_* Dự 2 selenium ruby-on-rails capybara

这是我的 Capybara 配置:

require 'selenium/webdriver'

# Configure Capypara with javascript client
Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome)
end

Capybara.register_driver :headless_chrome do |app|
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    chromeOptions: { args: %w(headless disable-gpu) }
  )
  Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: capabilities)
end

Capybara.javascript_driver = :headless_chrome
#Capybara.javascript_driver = :chrome


# Take screenshot for every feature test failed
RSpec.configure do |config|
  config.after(:each, :type => :feature) do |example|
    if example.exception
      meta = example.metadata
      name = "test-failure-#{File.basename(meta[:file_path])}-#{meta[:line_number]}.png"

      # Save screenshots in CI
      screenshot_root_path = ENV["CIRCLE_ARTIFACTS"] || Rails.root.join("tmp", "capybara")

      screenshot_path = [screenshot_root_path, 'feature_tests', name].join("/")

      page.save_screenshot(screenshot_path, full: true)
      puts  "Screenshot Taken: #{screenshot_path}\n"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我的 Gemfile:

 gem 'capybara'
 gem 'capybara-selenium'
Run Code Online (Sandbox Code Playgroud)

但是当测试失败时,我无法创建屏幕截图。请告诉我怎么做。

Trầ*_* Dự 7

我现在可以解决这个问题。我想念这一行:

Capybara.current_driver = :headless_chrome
Run Code Online (Sandbox Code Playgroud)

所以完整的设置应该是:

# Configure Capypara with javascript client
Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome)
end

Capybara.register_driver :headless_chrome do |app|
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    chromeOptions: { args: %w(headless disable-gpu) }
  )
  Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: capabilities)
end

Capybara.current_driver = :headless_chrome  # add more here
Capybara.javascript_driver = :headless_chrome
Run Code Online (Sandbox Code Playgroud)

这是自定义代码处理捕获屏幕截图并保存网页:

# Take screenshot for every feature test failed
def file_path(example, filetype)
  meta = example.metadata
  name = "feature-#{File.basename(meta[:file_path])}-line:#{meta[:line_number]}.#{filetype}"
  screenshot_root_path = ENV["CIRCLE_ARTIFACTS"] || Rails.root.join("tmp", "capybara")
  screenshot_path = [screenshot_root_path, 'feature_tests', name].join("/")

  puts  "Screenshot Taken: #{screenshot_path}\n"
  screenshot_path
end

RSpec.configure do |config|
  config.before(:each, :type => :feature) do
    Capybara.page.current_window.resize_to(1024, 768)
  end

  config.after(:each, :type => :feature) do |example|
    if example.exception
      page.save_screenshot(file_path(example, 'png'), full: true)
      save_page(file_path(example, 'html'))
    end
  end
end
Run Code Online (Sandbox Code Playgroud)