capybara_error_intel 1.0.2 → 2.0.0
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.
- checksums.yaml +5 -5
- data/.rubocop.yml +3 -1
- data/.travis.yml +3 -3
- data/CHANGELOG.md +11 -0
- data/Gemfile +2 -0
- data/README.md +40 -3
- data/Rakefile +3 -1
- data/bin/console +2 -0
- data/capybara_error_intel.gemspec +3 -3
- data/lib/capybara_error_intel/dsl.rb +38 -28
- data/lib/capybara_error_intel/version.rb +3 -1
- data/lib/capybara_error_intel.rb +2 -0
- metadata +31 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 90940dfb41a47dfa93a86282cefe1c87189c9ea73053e1db884575597bcc4751
|
4
|
+
data.tar.gz: bec5f80170054c4bf50e34db6c86b3da7dff102f21f19fac442b7d099fea32bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ca83fca2fab6a4c9b0ac762dbb3033d6c56526f3ec5d4f62f57cce747dd5911f063fc3e01e66b1256aa87cf5523ee862cd079a1148943d9e8c27a322690b2b1
|
7
|
+
data.tar.gz: b820708110e40f20c9c52ba1730b8ddb5d5d0537d97e9eca8d03c7d48203eb63d85ce561134859adbe9b5b043fccd5d138961f4d4464cd19957caa7773fc28e9
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
sudo: false
|
2
2
|
language: ruby
|
3
3
|
rvm:
|
4
|
+
- 3.0.0
|
5
|
+
- 2.6.3
|
4
6
|
- 2.3.1
|
5
|
-
|
6
|
-
- 2.1.0
|
7
|
-
before_install: gem install bundler -v 1.12.5
|
7
|
+
before_install: gem install bundler
|
8
8
|
addons:
|
9
9
|
code_climate:
|
10
10
|
repo_token: d11a38ad79ee8bc4d2972305aeaf999e0de48508813f76ba0ec991842dafc45f
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# v2.0.0
|
2
|
+
|
3
|
+
- Ruby 3.x support (thanks @hasghari)
|
4
|
+
|
5
|
+
# v1.1.1
|
6
|
+
|
7
|
+
- Support capybara 3.14 module rename (thanks @tmock12) [Read More](https://github.com/dkarter/capybara_error_intel/pull/6)
|
8
|
+
|
9
|
+
# v1.1.0
|
10
|
+
|
11
|
+
- Allow Capybara 3.x, update spec for proper error text (thanks @geoffharcourt)
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|

|
2
2
|
|
3
|
-
[](https://travis-ci.org/dkarter/capybara_error_intel) [](https://codeclimate.com/github/dkarter/capybara_error_intel) [](https://codeclimate.com/github/dkarter/capybara_error_intel/coverage) [](https://codeclimate.com/github/dkarter/capybara_error_intel)
|
3
|
+
[](https://travis-ci.org/dkarter/capybara_error_intel) [](https://codeclimate.com/github/dkarter/capybara_error_intel) [](https://codeclimate.com/github/dkarter/capybara_error_intel/coverage) [](https://codeclimate.com/github/dkarter/capybara_error_intel) [](https://badge.fury.io/rb/capybara_error_intel) 
|
4
4
|
|
5
5
|
Capybara provides excellent error messages for its built in predicate methods: `has_selector?`, `has_text?`, `has_title?` etc., but when those are used from Page Objects while exposing predicate methods from the PageObjects themselves the error messages are lost and all we get is `expected true, got false`. Including this module into your PageObject by adding `include CapybaraErrorIntel::DSL` after `include Capybara::DSL` will return the heuristic error messages.
|
6
6
|
|
@@ -79,6 +79,38 @@ end
|
|
79
79
|
It should be rather trivial to add more of them. Please open an issue or submit a pull request if something you need is missing.
|
80
80
|
|
81
81
|
|
82
|
+
### Accessing original predicate methods from your Page Object
|
83
|
+
|
84
|
+
If you ever need to access the overwritten Capybara predicate methods you can do
|
85
|
+
so by using Capybara's `page` for example:
|
86
|
+
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
module Pages
|
90
|
+
class PostIndex
|
91
|
+
include Capybara::DSL
|
92
|
+
include CapybaraErrorIntel::DSL
|
93
|
+
|
94
|
+
def has_header?(header_text)
|
95
|
+
page.has_selector?('h1', text: header_text)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
```
|
101
|
+
|
102
|
+
This will allow you to have negative assertions. That being said I strongly
|
103
|
+
discourage the use of negative assertions, especially with waiting Capybara
|
104
|
+
methods such as `has_selector?` since they can make your test suite really slow.
|
105
|
+
|
106
|
+
```ruby
|
107
|
+
expect(post_index_page).to_not have_header('POSTS')
|
108
|
+
```
|
109
|
+
|
110
|
+
> Note: I'm considering changing CapybaraErrorIntel for v2 to expose the
|
111
|
+
> predicate methods as bang methods, both positive and negative e.g.
|
112
|
+
> `has_selector!` and `has_no_selector!`. Please share your thoughts in the
|
113
|
+
> issues section.
|
82
114
|
|
83
115
|
## Development
|
84
116
|
|
@@ -86,6 +118,13 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
86
118
|
|
87
119
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
88
120
|
|
121
|
+
## Releasing a New Version
|
122
|
+
0. Add a version header to the top of CHANGELOG.md and list all changes as
|
123
|
+
bullets below the new version number
|
124
|
+
1. Change the version number in `lib/capybara_error_intel/version.rb`
|
125
|
+
2. In the project's directory run `gem build capybara_error_intel.gemspec`
|
126
|
+
3. Push the gem to RubyGems `gem push capybara_error_intel-##VERSION##.gem`
|
127
|
+
|
89
128
|
## Contributing
|
90
129
|
|
91
130
|
Bug reports and pull requests are welcome on GitHub at
|
@@ -94,8 +133,6 @@ https://github.com/dkarter/capybara_error_intel
|
|
94
133
|
Please make sure the test suite passes and that you added tests for any new
|
95
134
|
method implemented.
|
96
135
|
|
97
|
-
|
98
|
-
|
99
136
|
## License
|
100
137
|
|
101
138
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'bundler/gem_tasks'
|
2
4
|
require 'rspec/core/rake_task'
|
3
5
|
require 'rubocop/rake_task'
|
@@ -5,4 +7,4 @@ require 'rubocop/rake_task'
|
|
5
7
|
RuboCop::RakeTask.new
|
6
8
|
RSpec::Core::RakeTask.new(:spec)
|
7
9
|
|
8
|
-
task default: [
|
10
|
+
task default: %i[spec rubocop]
|
data/bin/console
CHANGED
@@ -26,19 +26,19 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
27
27
|
spec.require_paths = ['lib']
|
28
28
|
|
29
|
-
spec.add_development_dependency 'bundler'
|
29
|
+
spec.add_development_dependency 'bundler'
|
30
30
|
spec.add_development_dependency 'rake', '~> 10.0'
|
31
31
|
spec.add_development_dependency 'sinatra', '~> 1.4', '>= 1.4.7'
|
32
32
|
spec.add_development_dependency 'launchy', '~> 0'
|
33
33
|
spec.add_development_dependency 'rack', '~> 1.6', '>= 1.6.4'
|
34
34
|
spec.add_development_dependency 'rack-test', '~> 0.5', '>= 0.5.4'
|
35
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0.0'
|
35
36
|
spec.add_development_dependency 'pry'
|
36
37
|
spec.add_development_dependency 'pry-byebug'
|
37
38
|
spec.add_development_dependency 'rubocop'
|
38
39
|
spec.add_development_dependency 'cadre'
|
39
40
|
spec.add_development_dependency 'simplecov'
|
40
|
-
spec.add_development_dependency 'codeclimate-test-reporter'
|
41
41
|
|
42
42
|
spec.add_runtime_dependency 'rspec', '>= 2.1', '< 4.x'
|
43
|
-
spec.add_runtime_dependency 'capybara', '
|
43
|
+
spec.add_runtime_dependency 'capybara', '>= 2.0', '< 4.x'
|
44
44
|
end
|
@@ -1,66 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module CapybaraErrorIntel
|
2
4
|
# Wraps Capybara::DSL
|
3
5
|
module DSL
|
4
|
-
def has_selector?(*args)
|
5
|
-
matcher = has_selector(*args)
|
6
|
+
def has_selector?(*args, **kwargs)
|
7
|
+
matcher = has_selector(*args, **kwargs)
|
6
8
|
match_or_error(matcher)
|
7
9
|
end
|
8
10
|
|
9
|
-
def has_css?(css, options
|
10
|
-
has_selector?(:css, css, options)
|
11
|
+
def has_css?(css, **options)
|
12
|
+
has_selector?(:css, css, **options)
|
11
13
|
end
|
12
14
|
|
13
|
-
def has_button?(locator, options
|
14
|
-
has_selector?(:button, locator, options)
|
15
|
+
def has_button?(locator, **options)
|
16
|
+
has_selector?(:button, locator, **options)
|
15
17
|
end
|
16
18
|
|
17
|
-
def has_field?(locator, options
|
18
|
-
has_selector?(:field, locator, options)
|
19
|
+
def has_field?(locator, **options)
|
20
|
+
has_selector?(:field, locator, **options)
|
19
21
|
end
|
20
22
|
|
21
|
-
def has_xpath?(_xpath, options
|
22
|
-
has_selector?(:xpath, locator, options)
|
23
|
+
def has_xpath?(_xpath, **options)
|
24
|
+
has_selector?(:xpath, locator, **options)
|
23
25
|
end
|
24
26
|
|
25
|
-
def has_checked_field?(locator, options
|
26
|
-
has_selector?(:field, locator, options.merge(checked: true))
|
27
|
+
def has_checked_field?(locator, **options)
|
28
|
+
has_selector?(:field, locator, **options.merge(checked: true))
|
27
29
|
end
|
28
30
|
|
29
|
-
def has_unchecked_field?(locator, options
|
30
|
-
has_selector?(:field, locator, options.merge(unchecked: true))
|
31
|
+
def has_unchecked_field?(locator, **options)
|
32
|
+
has_selector?(:field, locator, **options.merge(unchecked: true))
|
31
33
|
end
|
32
34
|
|
33
|
-
def has_select?(locator, options
|
34
|
-
has_selector?(:select, locator, options)
|
35
|
+
def has_select?(locator, **options)
|
36
|
+
has_selector?(:select, locator, **options)
|
35
37
|
end
|
36
38
|
|
37
|
-
def has_table?(locator, options
|
38
|
-
has_selector?(:table, locator, options)
|
39
|
+
def has_table?(locator, **options)
|
40
|
+
has_selector?(:table, locator, **options)
|
39
41
|
end
|
40
42
|
|
41
|
-
def has_text?(*args)
|
42
|
-
matcher = has_text(*args)
|
43
|
+
def has_text?(*args, **kwargs)
|
44
|
+
matcher = has_text(*args, **kwargs)
|
43
45
|
match_or_error(matcher)
|
44
46
|
end
|
45
47
|
alias has_content? has_text?
|
46
48
|
|
47
|
-
def has_title?(title, options
|
48
|
-
matcher = has_title(title, options)
|
49
|
+
def has_title?(title, **options)
|
50
|
+
matcher = has_title(title, **options)
|
49
51
|
match_or_error(matcher)
|
50
52
|
end
|
51
53
|
|
52
54
|
private
|
53
55
|
|
54
|
-
def has_selector(*args)
|
55
|
-
|
56
|
+
def has_selector(*args, **kwargs)
|
57
|
+
capybara_matcher_module::HaveSelector.new(*args, **kwargs)
|
58
|
+
end
|
59
|
+
|
60
|
+
def has_text(*args, **kwargs)
|
61
|
+
capybara_matcher_module::HaveText.new(*args, **kwargs)
|
56
62
|
end
|
57
63
|
|
58
|
-
def
|
59
|
-
|
64
|
+
def has_title(title, **options)
|
65
|
+
capybara_matcher_module::HaveTitle.new(title, **options)
|
60
66
|
end
|
61
67
|
|
62
|
-
def
|
63
|
-
Capybara::
|
68
|
+
def capybara_matcher_module
|
69
|
+
if Capybara::VERSION.to_f >= 3.14
|
70
|
+
Capybara::RSpecMatchers::Matchers
|
71
|
+
else
|
72
|
+
Capybara::RSpecMatchers
|
73
|
+
end
|
64
74
|
end
|
65
75
|
|
66
76
|
def match_or_error(matcher)
|
data/lib/capybara_error_intel.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara_error_intel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dorian Karter
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,21 +113,21 @@ dependencies:
|
|
113
113
|
- !ruby/object:Gem::Version
|
114
114
|
version: 0.5.4
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
|
-
name:
|
116
|
+
name: codeclimate-test-reporter
|
117
117
|
requirement: !ruby/object:Gem::Requirement
|
118
118
|
requirements:
|
119
|
-
- - "
|
119
|
+
- - "~>"
|
120
120
|
- !ruby/object:Gem::Version
|
121
|
-
version:
|
121
|
+
version: 1.0.0
|
122
122
|
type: :development
|
123
123
|
prerelease: false
|
124
124
|
version_requirements: !ruby/object:Gem::Requirement
|
125
125
|
requirements:
|
126
|
-
- - "
|
126
|
+
- - "~>"
|
127
127
|
- !ruby/object:Gem::Version
|
128
|
-
version:
|
128
|
+
version: 1.0.0
|
129
129
|
- !ruby/object:Gem::Dependency
|
130
|
-
name: pry
|
130
|
+
name: pry
|
131
131
|
requirement: !ruby/object:Gem::Requirement
|
132
132
|
requirements:
|
133
133
|
- - ">="
|
@@ -141,7 +141,7 @@ dependencies:
|
|
141
141
|
- !ruby/object:Gem::Version
|
142
142
|
version: '0'
|
143
143
|
- !ruby/object:Gem::Dependency
|
144
|
-
name:
|
144
|
+
name: pry-byebug
|
145
145
|
requirement: !ruby/object:Gem::Requirement
|
146
146
|
requirements:
|
147
147
|
- - ">="
|
@@ -155,7 +155,7 @@ dependencies:
|
|
155
155
|
- !ruby/object:Gem::Version
|
156
156
|
version: '0'
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
|
-
name:
|
158
|
+
name: rubocop
|
159
159
|
requirement: !ruby/object:Gem::Requirement
|
160
160
|
requirements:
|
161
161
|
- - ">="
|
@@ -169,7 +169,7 @@ dependencies:
|
|
169
169
|
- !ruby/object:Gem::Version
|
170
170
|
version: '0'
|
171
171
|
- !ruby/object:Gem::Dependency
|
172
|
-
name:
|
172
|
+
name: cadre
|
173
173
|
requirement: !ruby/object:Gem::Requirement
|
174
174
|
requirements:
|
175
175
|
- - ">="
|
@@ -183,7 +183,7 @@ dependencies:
|
|
183
183
|
- !ruby/object:Gem::Version
|
184
184
|
version: '0'
|
185
185
|
- !ruby/object:Gem::Dependency
|
186
|
-
name:
|
186
|
+
name: simplecov
|
187
187
|
requirement: !ruby/object:Gem::Requirement
|
188
188
|
requirements:
|
189
189
|
- - ">="
|
@@ -220,16 +220,22 @@ dependencies:
|
|
220
220
|
name: capybara
|
221
221
|
requirement: !ruby/object:Gem::Requirement
|
222
222
|
requirements:
|
223
|
-
- - "
|
223
|
+
- - ">="
|
224
224
|
- !ruby/object:Gem::Version
|
225
|
-
version: '2'
|
225
|
+
version: '2.0'
|
226
|
+
- - "<"
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
version: 4.x
|
226
229
|
type: :runtime
|
227
230
|
prerelease: false
|
228
231
|
version_requirements: !ruby/object:Gem::Requirement
|
229
232
|
requirements:
|
230
|
-
- - "
|
233
|
+
- - ">="
|
234
|
+
- !ruby/object:Gem::Version
|
235
|
+
version: '2.0'
|
236
|
+
- - "<"
|
231
237
|
- !ruby/object:Gem::Version
|
232
|
-
version:
|
238
|
+
version: 4.x
|
233
239
|
description: |-
|
234
240
|
Capybara provides excellent error messages for its
|
235
241
|
built in predicate methods: has_selector?, has_text?,
|
@@ -252,6 +258,7 @@ files:
|
|
252
258
|
- ".rspec"
|
253
259
|
- ".rubocop.yml"
|
254
260
|
- ".travis.yml"
|
261
|
+
- CHANGELOG.md
|
255
262
|
- Gemfile
|
256
263
|
- LICENSE.txt
|
257
264
|
- README.md
|
@@ -269,7 +276,7 @@ homepage: https://github.com/dkarter/capybara_error_intel
|
|
269
276
|
licenses:
|
270
277
|
- MIT
|
271
278
|
metadata: {}
|
272
|
-
post_install_message:
|
279
|
+
post_install_message:
|
273
280
|
rdoc_options: []
|
274
281
|
require_paths:
|
275
282
|
- lib
|
@@ -284,9 +291,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
284
291
|
- !ruby/object:Gem::Version
|
285
292
|
version: '0'
|
286
293
|
requirements: []
|
287
|
-
|
288
|
-
|
289
|
-
signing_key:
|
294
|
+
rubygems_version: 3.3.7
|
295
|
+
signing_key:
|
290
296
|
specification_version: 4
|
291
297
|
summary: Provides Capybara's heuristic error messages for Page Objects
|
292
298
|
test_files: []
|