capybara-widgets 0.3.1 → 0.4.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 +4 -4
- data/capybara-widgets.gemspec +4 -3
- data/lib/capybara/widgets/core/widget.rb +30 -26
- data/lib/capybara/widgets/cucumber/widget_steps.rb +3 -3
- data/lib/capybara/widgets/rspec.rb +18 -0
- data/lib/capybara/widgets/version.rb +1 -1
- data/spec/features/widget_spec.rb +2 -2
- metadata +28 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc8ba6872d65c984e482da032b16bc77918c6847
|
4
|
+
data.tar.gz: e7f0e2119a36f16bbbca1c2e35b05ba6375f5229
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5552b63d66512fa9fe7f621c482094c2c94d4df939d3020bc38ade8775a16d1dc86f6ae191f86355b41a381e82b8d1f116ec621c3b510396448190354ca21f78
|
7
|
+
data.tar.gz: 12f25e3b3c24ed0e4935ff9a60ed3cd034aa7b6398676a6be1c68d082d271574b7242cd9c74efd38adb4dd9bd577cb68395bdab48b6e5a96a5e4b3cc5cf9f433
|
data/capybara-widgets.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Vitalii Grygoruk"]
|
10
10
|
spec.email = ["vitalii[dot]grygoruk[at]gmail[dot]com"]
|
11
11
|
spec.summary = %q{Page objects and page components for Capybara}
|
12
|
-
spec.description = %q{Easily create well-structured page and ui component classes in your Capybara
|
12
|
+
spec.description = %q{Easily create well-structured page and ui component classes in your Capybara, Cucumber/RSpec tests}
|
13
13
|
spec.homepage = ""
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
@@ -20,9 +20,10 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.7"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
-
spec.add_development_dependency "rspec", "~> 3.2"
|
24
|
-
spec.add_development_dependency "cucumber"
|
25
23
|
|
26
24
|
spec.add_dependency "capybara", "~> 2.0"
|
27
25
|
spec.add_dependency "activesupport"
|
26
|
+
spec.add_dependency "rspec", "~> 3.2"
|
27
|
+
spec.add_dependency "rspec-wait"
|
28
|
+
spec.add_development_dependency "cucumber"
|
28
29
|
end
|
@@ -29,43 +29,51 @@ module Capybara
|
|
29
29
|
@root
|
30
30
|
end
|
31
31
|
|
32
|
-
#
|
32
|
+
# @deprecated, use :root_element method instead
|
33
33
|
def narrow
|
34
34
|
@root
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
def resolve(*query_with_args)
|
38
|
+
query = query_with_args.shift
|
39
|
+
args = query_with_args
|
40
|
+
if query.is_a?(Proc)
|
41
|
+
# resolve lambda selector in scope of widget instance
|
42
|
+
return self.instance_exec(*args, &query)
|
43
|
+
else
|
44
|
+
return query, *args
|
45
|
+
end
|
43
46
|
end
|
44
47
|
|
45
48
|
class << self
|
49
|
+
|
50
|
+
## override :narrow method if :root_element is used in a class
|
51
|
+
def root_element(*query)
|
52
|
+
define_method(:root_query) { resolve(*query) }
|
53
|
+
define_method(:narrow) { root.find(*resolve(*query)) }
|
54
|
+
define_method(:has_root_element?) { page.has_selector?(*resolve(*query))}
|
55
|
+
define_method(:has_no_root_element?) { page.has_no_selector?(*resolve(*query))}
|
56
|
+
end
|
57
|
+
|
46
58
|
def component(name, klass, *query)
|
47
59
|
define_method name do |*args|
|
48
|
-
component_root = query.length > 0 ? root.find(*query, *args) : root
|
60
|
+
component_root = query.length > 0 ? root.find(*resolve(*query, *args)) : root
|
49
61
|
klass.new(component_root)
|
50
62
|
end
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
if query.is_a?(Proc)
|
57
|
-
return query.(*args)
|
58
|
-
else
|
59
|
-
return query, *args
|
63
|
+
define_method "has_#{name}?".to_sym do |*args|
|
64
|
+
root.has_selector?(*resolve(*query, *args))
|
65
|
+
end
|
66
|
+
define_method "has_no_#{name}?" do |*args|
|
67
|
+
root.has_no_selector?(*resolve(*query, *args))
|
60
68
|
end
|
61
69
|
end
|
62
70
|
|
63
71
|
def element(name, *query)
|
64
|
-
define_method("#{name}!") { |*args| root.find(*
|
65
|
-
define_method(name) { |*args| root.find(*
|
66
|
-
define_method("#{name}=") { |arg| root.find(*
|
67
|
-
define_method("has_#{name}?") { |*args| root.has_selector?(*
|
68
|
-
define_method("has_no_#{name}?") { |*args| root.has_no_selector?(*
|
72
|
+
define_method("#{name}!") { |*args| root.find(*resolve(*query, *args)).click }
|
73
|
+
define_method(name) { |*args| root.find(*resolve(*query, *args)) }
|
74
|
+
define_method("#{name}=") { |arg| root.find(*resolve(*query)).set(arg) }
|
75
|
+
define_method("has_#{name}?") { |*args| root.has_selector?(*resolve(*query, *args)) }
|
76
|
+
define_method("has_no_#{name}?") { |*args| root.has_no_selector?(*resolve(*query, *args)) }
|
69
77
|
end
|
70
78
|
|
71
79
|
def required_element(*element_names)
|
@@ -90,10 +98,6 @@ module Capybara
|
|
90
98
|
alias_method :required_components, :required_component
|
91
99
|
end
|
92
100
|
|
93
|
-
def displayed?
|
94
|
-
root.visible?
|
95
|
-
end
|
96
|
-
|
97
101
|
# delegate missing methods to the @root node
|
98
102
|
def method_missing(method_sym, *arguments, &block)
|
99
103
|
if root.respond_to? method_sym
|
@@ -21,12 +21,12 @@ When(/^I click "([^"]*)" [o|i]n a "([^"]*)"$/) do |action, widget_path|
|
|
21
21
|
target_widget.send(to_widget_action(action, '!'))
|
22
22
|
end
|
23
23
|
|
24
|
-
Then(/^the "([^"]*)" should( not)? be
|
24
|
+
Then(/^the "([^"]*)" should( not)? (be .*)$/) do |widget_path, negated, action|
|
25
25
|
target_widget = resolve_widget(widget_path)
|
26
26
|
if negated
|
27
|
-
expect(target_widget).
|
27
|
+
expect(target_widget).not_to send(to_widget_action(action))
|
28
28
|
else
|
29
|
-
expect(target_widget).to
|
29
|
+
expect(target_widget).to send(to_widget_action(action))
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -21,6 +21,24 @@ module Capybara
|
|
21
21
|
"Expected that '#{widget.class.name}' does not have '#{element}' element"
|
22
22
|
end
|
23
23
|
end
|
24
|
+
|
25
|
+
RSpec::Matchers.define :be_visible do
|
26
|
+
match do |widget|
|
27
|
+
widget.has_root_element?
|
28
|
+
end
|
29
|
+
|
30
|
+
match_when_negated do |widget|
|
31
|
+
widget.has_no_root_element?
|
32
|
+
end
|
33
|
+
|
34
|
+
failure_message do |widget|
|
35
|
+
"Expected that '#{widget.class.name}' to be visible"
|
36
|
+
end
|
37
|
+
|
38
|
+
failure_message_when_negated do |widget|
|
39
|
+
"Expected that '#{widget.class.name}' not to be visible"
|
40
|
+
end
|
41
|
+
end
|
24
42
|
end
|
25
43
|
end
|
26
44
|
end
|
@@ -5,7 +5,7 @@ describe Capybara::Widgets::Widget do
|
|
5
5
|
let(:stub_node) { Capybara::Node::Base.new(nil, nil) }
|
6
6
|
|
7
7
|
it 'has capybara page as a default root node' do
|
8
|
-
expect(
|
8
|
+
expect(klass.new.root).to eq(page)
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'can be initialized with Capybara::Node::Base' do
|
@@ -26,7 +26,7 @@ describe Capybara::Widgets::Widget do
|
|
26
26
|
|
27
27
|
it 'can have lazy-initialized root node' do
|
28
28
|
# Arrange
|
29
|
-
class MyWidget <
|
29
|
+
class MyWidget < Capybara::Widgets::Widget
|
30
30
|
attr_accessor :loaded
|
31
31
|
def initialize; self.loaded = false; end
|
32
32
|
def narrow; self.loaded = true; @root; end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-widgets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vitalii Grygoruk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -39,27 +39,27 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: capybara
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
48
|
-
type: :
|
47
|
+
version: '2.0'
|
48
|
+
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: activesupport
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
-
type: :
|
62
|
+
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
@@ -67,21 +67,21 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '2
|
75
|
+
version: '3.2'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '2
|
82
|
+
version: '3.2'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rspec-wait
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -94,8 +94,22 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
-
|
98
|
-
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: cucumber
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Easily create well-structured page and ui component classes in your Capybara,
|
112
|
+
Cucumber/RSpec tests
|
99
113
|
email:
|
100
114
|
- vitalii[dot]grygoruk[at]gmail[dot]com
|
101
115
|
executables: []
|