2017-10-28 88 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或任何東西,水豚不會得到捕獲圖像。 –