2017-10-28 89 views
0

硒驱动程序的截图这是我的水豚配置:水豚:不能利用Mac

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 

这里是我的Gemfile:

gem 'capybara' 
gem 'capybara-selenium' 

但是当一个测试失败,我不能创建截图。请告诉我如何。

+0

问题是什么?有什么异常? –

回答

0

我现在可以解决这个问题。我错过了这行:

Capybara.current_driver = :headless_chrome 

,所以该完整的设置应该是:

# 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 

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

# 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 
+0

您注册的驱动程序与Capybara提供的默认设置完全相同,因此您应该只需设置Capybara.javascript_driver = selenium_chrome或Capybara.javascript_driver = selenium_chrome_headless即可,无需注册自己的驱动程序如果您需要'capybara/rspec',它会根据元数据自动在default和javascript之间切换'current_driver'。如果你只是想总是使用JS驱动程序,然后设置'Capybara.default_driver =:selenium_chrome'等。当测试应用程序时,你真的不应该手动设置'current_driver'。 –

+0

此外,你可以将'Capybara.save_path'设置为你想要的基础,然后调用'page.save_screenshot(<从 例子中计算文件名,full:true)'''page.save_page()''而不是每次截取屏幕时都需要计算路径 –

+0

@ThomasWalpole我不知道为什么,但是如果我没有设置Capybara.current_driver =:selenium_chrome或任何东西,水豚不会得到捕获图像。 –