2015-12-14 55 views
0

Capybara截圖不會在步驟失敗時拍攝快照。我使用下面的代碼:Capybara屏幕截圖不會在步驟失敗時拍攝快照...?

Capybara.save_and_open_page_path = "/file/path" 
Capybara::Screenshot.register_filename_prefix_formatter(:rspec) do |example| 
"screenshot_#{example.description.gsub(' ', '-').gsub(/^.*\/spec\//,'')}" 
end 

我看到它在整個場景結束後需要截圖,但沒有在步驟失敗。我想截圖,而步驟失敗...請幫助

回答

0

你可以使用after掛鉤來做到這一點。 https://www.relishapp.com/rspec/rspec-core/v/2-2/docs/hooks/before-and-after-hooks

由於有提到,後鉤子將即使例如失敗

+0

其實,我想在每個場景中註銷,因此如果場景中途失敗,則不會採用失敗步驟的屏幕截圖,而是會在註銷後採取屏幕截圖。要麼我需要找出一種方法來捕獲故障步驟的屏幕截圖或重置會話。我沒有運氣,以及使用水豚重置會議。 – SaeeK

+0

@Subash測試失敗,失敗 - 它不會繼續運行其餘的。然而,它會在鉤子後運行 - 你是否試圖在掛鉤後登出?如果是這樣的話,你需要檢查後面的鉤子定義的順序,以便在鉤住這個標誌之前調用截圖的後鉤子(如果你需要的話,實際上不需要註銷每個測試)已經正確掛鉤設置capybaras - 因爲重置會話將具有相同的效果) –

+0

即使我設置Capybara :: Screenshot之前掛鉤,它永遠不會捕獲故障步驟截圖。重置會話水豚也不會重置會話/刪除cookie。我想使用After hook註銷,但要確保屏幕截圖可以在失敗步驟中捕獲。請幫忙 – SaeeK

0

在你spec_helper執行,你可以做設置你的後鉤做這樣的事情:

RSpec.configure do |config| 
    config.after(:each) do |example| 
    if example.exception 
     file_name = 'failed_%s.png' % rand(1000).to_s # name your screenshot whatever you'd like 
     page.save_screenshot(file_name) 
    end 
    end 
end