Edited at

CapybaraでJSを使ったテストは save_screenshot が便利

More than 3 years have passed since last update.


概要

CapybaraでSeleniumやpoltergeistをつかってjs: trueなテストを書くときに、テストが失敗した瞬間の画面が欲しかったりする。

JavaScriptを使わないテストでは save_and_open_page と書けばその時の画面を保存してくれるが、CSSやJSが使われていない.htmlが保存されるので、レイアウトも整っていないし、テストの時に実際にどのような画面が表示されていたのか分かりにくい。


そこで save_screenshot

page.save_screenshot 'screenshot.png'

とすると、その時の画面のスクリーンショットがscreenshot.pngという名前で保存されるので便利。


rails_helper.rb

def take_screenshot

page.save_screenshot "tmp/capybara/screenshot-#{DateTime.now}.png"
end

と追記しておくと


foo_spec.rb

it 'save screenshot' js: true do

visit '/bar'
take_screenshot
end

とかけるし、save_and_open_pageした時と同じディレクトリにスクリーンショットが保存されるのでさらに便利。