Class: Capybara::Widgets::Widget
- Inherits:
-
Object
- Object
- Capybara::Widgets::Widget
show all
- Includes:
- DSL
- Defined in:
- lib/capybara/widgets/core/widget.rb
Direct Known Subclasses
Page
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(*search_scope) ⇒ Widget
Returns a new instance of Widget.
8
9
10
11
12
13
14
15
16
17
18
|
# File 'lib/capybara/widgets/core/widget.rb', line 8
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
82
83
84
85
86
87
88
|
# File 'lib/capybara/widgets/core/widget.rb', line 82
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
44
45
46
47
48
49
|
# File 'lib/capybara/widgets/core/widget.rb', line 44
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
51
52
53
54
55
56
57
|
# File 'lib/capybara/widgets/core/widget.rb', line 51
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
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/capybara/widgets/core/widget.rb', line 65
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
59
60
61
|
# File 'lib/capybara/widgets/core/widget.rb', line 59
def required_element(*element_names)
define_method(:elements_loaded?) { element_names.map { |name| self.send("has_#{name}?") }.count(false) == 0 }
end
|
Instance Method Details
#element(*query) ⇒ Object
35
36
37
|
# File 'lib/capybara/widgets/core/widget.rb', line 35
def element(*query)
root.find(*query)
end
|
#has_element?(*query) ⇒ Boolean
39
40
41
|
# File 'lib/capybara/widgets/core/widget.rb', line 39
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
31
32
33
|
# File 'lib/capybara/widgets/core/widget.rb', line 31
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
22
23
24
25
26
27
28
|
# File 'lib/capybara/widgets/core/widget.rb', line 22
def root
unless @narrowed
@narrowed = true
@root = narrow
end
@root
end
|