capybara-screenshot 0.2.4 → 0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +6 -0
- data/README.md +34 -16
- data/lib/capybara-screenshot.rb +10 -13
- data/lib/capybara-screenshot/capybara.rb +5 -5
- data/lib/capybara-screenshot/minitest.rb +17 -19
- data/lib/capybara-screenshot/rspec.rb +7 -37
- data/lib/capybara-screenshot/version.rb +1 -1
- data/spec/capybara-screenshot/capybara_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -0
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
30 Oct 2012 - Significant version bump 0.3
|
2
|
+
-----------
|
3
|
+
|
4
|
+
After some consideration, and continued problems with load order of capybara-screenshot in relation to other required gems, the commits from @adzap in the pull request https://github.com/mattheworiordan/capybara-screenshot/pull/29 have been incorporated. Moving forwards, for every testing framework you use, you will be required to add an explicit require.
|
5
|
+
|
6
|
+
|
1
7
|
15 Feb 2012
|
2
8
|
-----------
|
3
9
|
|
data/README.md
CHANGED
@@ -5,34 +5,55 @@ Using this gem, whenever a [Capybara](https://github.com/jnicklas/capybara) test
|
|
5
5
|
|
6
6
|
This is a huge help when trying to diagnose a problem in your failing steps as you can view the source code and potentially how the page looked at the time of the failure.
|
7
7
|
|
8
|
-
|
8
|
+
Installation
|
9
9
|
-----
|
10
10
|
|
11
|
-
|
11
|
+
### Step 1
|
12
12
|
|
13
|
-
|
13
|
+
Using Bundler, add the following to your Gemfile
|
14
14
|
|
15
15
|
gem 'capybara-screenshot', :group => :test
|
16
16
|
|
17
|
+
or install manually using Ruby Gems:
|
18
|
+
|
19
|
+
gem install capybara-screenshot
|
20
|
+
|
21
|
+
### Step 2
|
22
|
+
|
23
|
+
For **Cucumber**, in env.rb or a support file, please add:
|
24
|
+
|
25
|
+
require 'capybara-screenshot/cucumber'
|
26
|
+
|
27
|
+
For **RSpec**, in spec_helper.rb or a support file, after the require for 'capybara/rspec', please add:
|
28
|
+
|
29
|
+
# you should require 'capybara/rspec' first
|
30
|
+
require 'capybara-screenshot/rspec'
|
31
|
+
|
32
|
+
For **Minitest**, typically in 'test/test_helper.rb', please add:
|
33
|
+
|
34
|
+
require 'capybara-screenshot/minitest'
|
35
|
+
|
36
|
+
Manual screenshots
|
37
|
+
----
|
38
|
+
|
17
39
|
If you require more control, you can generate the screenshot on demand rather than on failure. This is useful
|
18
40
|
if the failure occurs at a point where the screen shot is not as useful for debugging a rendering problem. This
|
19
41
|
can be more useful if you disable the auto-generate on failure feature with the following config
|
20
42
|
|
21
43
|
Capybara::Screenshot.autosave_on_failure = false
|
22
44
|
|
23
|
-
Anywhere the Capybara DSL methods (visit, click etc.) are available so too
|
45
|
+
Anywhere the Capybara DSL methods (visit, click etc.) are available so too are the screenshot methods.
|
24
46
|
|
25
|
-
|
47
|
+
screenshot_and_save_page
|
26
48
|
|
27
49
|
Or for screenshot only, which will automatically open the image.
|
28
50
|
|
29
|
-
|
51
|
+
screenshot_and_open_image
|
30
52
|
|
31
53
|
These are just calls on the main library methods.
|
32
54
|
|
33
|
-
|
34
|
-
|
35
|
-
Capybara::Screenshot.screen_shot_and_open_image
|
55
|
+
Capybara::Screenshot.screenshot_and_save_page
|
56
|
+
Capybara::Screenshot.screenshot_and_open_image
|
36
57
|
|
37
58
|
|
38
59
|
Driver configuration
|
@@ -70,17 +91,14 @@ Example application
|
|
70
91
|
-------------------
|
71
92
|
|
72
93
|
A simple Rails 3.1 example application has been set up at [https://github.com/mattheworiordan/capybara-screenshot-test-rails-3.1](https://github.com/mattheworiordan/capybara-screenshot-test-rails-3.1)
|
73
|
-
Git clone the app, and then run Cucumber `rake cucumber`, RSpec `
|
94
|
+
Git clone the app, and then run Cucumber `rake cucumber`, RSpec `rake spec` and Minitest `rake test` and expect intentional failures.
|
74
95
|
Now check the $APPLICATION_ROOT/tmp/capybara folder for the automatic screen shots generated from failed tests.
|
75
96
|
|
97
|
+
|
76
98
|
Common problems
|
77
99
|
---------------
|
78
100
|
|
79
|
-
If you find that screen shots are not automatically being generated, then it's
|
80
|
-
|
81
|
-
require 'capybara-screenshot/cucumber' # For Cucumber support
|
82
|
-
require 'capybara-screenshot/rspec' # For RSpec support
|
83
|
-
require 'capybara-screenshot/minitest' # For MiniSpec support
|
101
|
+
If you have recently upgraded from v0.2, or you find that screen shots are not automatically being generated, then it's most likely you have not included the necessary `require` statement for your testing framework described above. As of version 0.3, without the explicit require, Capybara-Screenshot will not automatically take screen shots. Please re-read the installation instructions above.
|
84
102
|
|
85
103
|
[Raise an issue on the Capybara-Screenshot issue tracker](https://github.com/mattheworiordan/capybara-screenshot/issues) if you are still having problems.
|
86
104
|
|
@@ -103,4 +121,4 @@ This gem was written by **Matthew O'Riordan**
|
|
103
121
|
License
|
104
122
|
-------
|
105
123
|
|
106
|
-
Copyright © 2012 Matthew O'Riordan, inc. It is free software, and may be redistributed under the terms specified in the LICENSE file.
|
124
|
+
Copyright © 2012 Matthew O'Riordan, inc. It is free software, and may be redistributed under the terms specified in the LICENSE file.
|
data/lib/capybara-screenshot.rb
CHANGED
@@ -10,19 +10,24 @@ module Capybara
|
|
10
10
|
self.registered_drivers = {}
|
11
11
|
self.filename_prefix_formatters = {}
|
12
12
|
|
13
|
-
def self.
|
13
|
+
def self.screenshot_and_save_page
|
14
14
|
saver = Saver.new(Capybara, Capybara.page)
|
15
15
|
saver.save
|
16
16
|
{:html => saver.html_path, :image => saver.screenshot_path}
|
17
17
|
end
|
18
18
|
|
19
|
-
def self.
|
19
|
+
def self.screenshot_and_open_image
|
20
20
|
require "launchy"
|
21
21
|
|
22
22
|
saver = Saver.new(Capybara, Capybara.page, false)
|
23
23
|
saver.save
|
24
24
|
Launchy.open saver.screenshot_path
|
25
|
-
{:html =>
|
25
|
+
{:html => nil, :image => saver.screenshot_path}
|
26
|
+
end
|
27
|
+
|
28
|
+
class << self
|
29
|
+
alias screen_shot_and_save_page screenshot_and_save_page
|
30
|
+
alias screen_shot_and_open_image screenshot_and_open_image
|
26
31
|
end
|
27
32
|
|
28
33
|
def self.filename_prefix_for(test_type, test)
|
@@ -92,14 +97,6 @@ Capybara::Screenshot.class_eval do
|
|
92
97
|
end
|
93
98
|
end
|
94
99
|
|
100
|
+
require 'capybara/dsl'
|
95
101
|
require 'capybara-screenshot/saver'
|
96
|
-
require 'capybara-screenshot/capybara'
|
97
|
-
|
98
|
-
# do nothing if Cucumber is not being used
|
99
|
-
if defined?(Cucumber::RbSupport::RbDsl)
|
100
|
-
require 'capybara/cucumber'
|
101
|
-
require 'capybara-screenshot/cucumber'
|
102
|
-
end
|
103
|
-
|
104
|
-
require 'capybara-screenshot/rspec' if defined?(RSpec)
|
105
|
-
require 'capybara-screenshot/minitest' if defined?(MiniTest)
|
102
|
+
require 'capybara-screenshot/capybara'
|
@@ -3,12 +3,12 @@ module Capybara
|
|
3
3
|
# Adds class methods to Capybara module and gets mixed into
|
4
4
|
# the current scope during Cucumber and RSpec tests
|
5
5
|
|
6
|
-
def
|
7
|
-
Capybara::Screenshot.
|
6
|
+
def screenshot_and_save_page
|
7
|
+
Capybara::Screenshot.screenshot_and_save_page
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
Capybara::Screenshot.
|
10
|
+
def screenshot_and_open_image
|
11
|
+
Capybara::Screenshot.screenshot_and_open_image
|
12
12
|
end
|
13
13
|
end
|
14
|
-
end
|
14
|
+
end
|
@@ -1,26 +1,24 @@
|
|
1
|
-
if
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
end
|
1
|
+
method = if ActionDispatch::IntegrationTest.respond_to? :teardown
|
2
|
+
:teardown
|
3
|
+
elsif ActionDispatch::IntegrationTest.respond_to? :add_tear_down_hook
|
4
|
+
:add_tear_down_hook
|
5
|
+
end
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
unless method.nil?
|
8
|
+
begin
|
9
|
+
ActionDispatch::IntegrationTest.send method do |context|
|
10
|
+
# by adding the argument context, MiniTest passes the context of the test
|
11
|
+
# which has an instance variable @passed indicating success / failure
|
12
|
+
failed = context.instance_variable_get(:@passed).blank?
|
14
13
|
|
15
|
-
|
16
|
-
|
14
|
+
if Capybara::Screenshot.autosave_on_failure && failed
|
15
|
+
filename_prefix = Capybara::Screenshot.filename_prefix_for(:minitest, context)
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
end
|
17
|
+
saver = Capybara::Screenshot::Saver.new(Capybara, Capybara.page, true, filename_prefix)
|
18
|
+
saver.save
|
21
19
|
end
|
22
|
-
rescue NoMethodError
|
23
|
-
# do nothing, teardown for minitest not available
|
24
20
|
end
|
21
|
+
rescue NoMethodError
|
22
|
+
# do nothing, teardown for minitest not available
|
25
23
|
end
|
26
24
|
end
|
@@ -1,43 +1,13 @@
|
|
1
1
|
RSpec.configure do |config|
|
2
2
|
# use the before hook to add an after hook that runs last
|
3
|
-
config.
|
4
|
-
Capybara::Screenshot
|
5
|
-
|
6
|
-
filename_prefix = Capybara::Screenshot.filename_prefix_for(:rspec, example)
|
3
|
+
config.after(:type => :request) do
|
4
|
+
if Capybara::Screenshot.autosave_on_failure && example.exception
|
5
|
+
filename_prefix = Capybara::Screenshot.filename_prefix_for(:rspec, example)
|
7
6
|
|
8
|
-
|
9
|
-
|
7
|
+
saver = Capybara::Screenshot::Saver.new(Capybara, Capybara.page, true, filename_prefix)
|
8
|
+
saver.save
|
10
9
|
|
11
|
-
|
12
|
-
end
|
10
|
+
example.metadata[:full_description] += "\n Screenshot: #{saver.screenshot_path}"
|
13
11
|
end
|
14
12
|
end
|
15
|
-
end
|
16
|
-
|
17
|
-
# keep a record of which example groups we've added an after hook to and add if one does not exist
|
18
|
-
module Capybara
|
19
|
-
module Screenshot
|
20
|
-
class RSpec
|
21
|
-
@@example_groups = []
|
22
|
-
def self.add_after(example_group, &block)
|
23
|
-
unless (@@example_groups & self_and_parents(example_group)).count > 0
|
24
|
-
example_group.after :each, &block
|
25
|
-
@@example_groups << example_group
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
# Return an array of current ExampleGroup and all parent ExampleGroups other than Core which has no metadata
|
31
|
-
def self.self_and_parents(example_group, children = [])
|
32
|
-
parent_is_core = example_group.superclass.metadata.nil? rescue true # don't ever raise an error if RSpec API changes in the future, lets rather do multiple screen shots as a side effect
|
33
|
-
if parent_is_core
|
34
|
-
children << example_group
|
35
|
-
children
|
36
|
-
else
|
37
|
-
children << example_group
|
38
|
-
self_and_parents(example_group.superclass, children)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
13
|
+
end
|
@@ -4,14 +4,14 @@ module Capybara::Screenshot
|
|
4
4
|
describe Capybara do
|
5
5
|
|
6
6
|
it 'should add screen shot methods to the Capybara module' do
|
7
|
-
::Capybara.should respond_to(:
|
8
|
-
::Capybara.should respond_to(:
|
7
|
+
::Capybara.should respond_to(:screenshot_and_save_page)
|
8
|
+
::Capybara.should respond_to(:screenshot_and_open_image)
|
9
9
|
end
|
10
10
|
|
11
11
|
context 'request type example', :type => :request do
|
12
12
|
it 'should have access to screen shot instance methods' do
|
13
|
-
self.should respond_to(:
|
14
|
-
self.should respond_to(:
|
13
|
+
self.should respond_to(:screenshot_and_save_page)
|
14
|
+
self.should respond_to(:screenshot_and_open_image)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-screenshot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.3'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capybara
|
@@ -100,7 +100,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
100
100
|
version: '0'
|
101
101
|
segments:
|
102
102
|
- 0
|
103
|
-
hash:
|
103
|
+
hash: 1964539847270937869
|
104
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
109
|
version: '0'
|
110
110
|
segments:
|
111
111
|
- 0
|
112
|
-
hash:
|
112
|
+
hash: 1964539847270937869
|
113
113
|
requirements: []
|
114
114
|
rubyforge_project: capybara-screenshot
|
115
115
|
rubygems_version: 1.8.24
|