Class: Capybara::Widgets::Widget
- Inherits:
-
Object
- Object
- Capybara::Widgets::Widget
show all
- Includes:
- DSL, AsyncHelper
- Defined in:
- lib/capybara/widgets/core/widget.rb
Direct Known Subclasses
Page
Class Method Summary
collapse
Instance Method Summary
collapse
#eventually
Constructor Details
#initialize(*search_scope) ⇒ Widget
Returns a new instance of Widget.
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/capybara/widgets/core/widget.rb', line 10
def initialize(*search_scope)
case search_scope.length
when 0
@root = page
when 1
@root = search_scope[0].respond_to?(:find) ? search_scope[0] : page.find(search_scope[0])
else
@root = page.find(*search_scope)
end
@narrowed = false
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_sym, *arguments, &block) ⇒ Object
delegate missing methods to the @root node
88
89
90
91
92
93
94
|
# File 'lib/capybara/widgets/core/widget.rb', line 88
def method_missing(method_sym, *arguments, &block)
if root.respond_to? method_sym
root.send(method_sym, *arguments, &block)
else
super
end
end
|
Class Method Details
.component(name, klass, *query) ⇒ Object
46
47
48
49
50
51
|
# File 'lib/capybara/widgets/core/widget.rb', line 46
def component(name, klass, *query)
define_method name do
component_root = query.length > 0 ? root.find(*query) : root
klass.new(component_root)
end
end
|
.element(name, *query) ⇒ Object
53
54
55
56
57
58
59
|
# File 'lib/capybara/widgets/core/widget.rb', line 53
def element(name, *query)
define_method("#{name}!") { root.find(*query).click }
define_method(name) { root.find(*query) }
define_method("#{name}=") { |arg| root.find(*query).set(arg) }
define_method("has_#{name}?") { |*args| root.has_selector?(*query, *args) }
define_method("has_no_#{name}?") { |*args| root.has_no_selector?(*query, *args) }
end
|
.required_component(*component_names) ⇒ Object
Also known as:
required_components
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/capybara/widgets/core/widget.rb', line 67
def required_component(*component_names)
define_method(:components_loaded?) do
component_names.map do |name|
component = self.send(name)
if component.respond_to?(:elements_loaded?)
component.elements_loaded?
else
true
end
end.count(false) == 0
end
end
|
.required_element(*element_names) ⇒ Object
Also known as:
required_elements
61
62
63
|
# File 'lib/capybara/widgets/core/widget.rb', line 61
def required_element(*element_names)
define_method(:elements_loaded?) { element_names.map { |name| self.send("has_#{name}?") }.count(false) == 0 }
end
|
Instance Method Details
#displayed? ⇒ Boolean
83
84
85
|
# File 'lib/capybara/widgets/core/widget.rb', line 83
def displayed?
root.visible?
end
|
#element(*query) ⇒ Object
37
38
39
|
# File 'lib/capybara/widgets/core/widget.rb', line 37
def element(*query)
root.find(*query)
end
|
#has_element?(*query) ⇒ Boolean
41
42
43
|
# File 'lib/capybara/widgets/core/widget.rb', line 41
def has_element?(*query)
root.has_selector?(*query)
end
|
#narrow ⇒ Object
override this method if you need to narrow down search context for a particular UI widget / block
33
34
35
|
# File 'lib/capybara/widgets/core/widget.rb', line 33
def narrow
@root
end
|
#root ⇒ Object
running narrow only before a first call to root, useful when you want to call a method on widget that uses “page” and you don’t want to run “narrow” during init
24
25
26
27
28
29
30
|
# File 'lib/capybara/widgets/core/widget.rb', line 24
def root
unless @narrowed
@narrowed = true
@root = narrow
end
@root
end
|