Class: Crabfarm::Dsl::Surfer::SearchContext
- Inherits:
-
Object
- Object
- Crabfarm::Dsl::Surfer::SearchContext
show all
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Defined in:
- lib/crabfarm/dsl/surfer/search_context.rb
Constant Summary
collapse
- TIMEOUT =
Default timeout for waiting operations
10.0
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(_elements, _parent) ⇒ SearchContext
Returns a new instance of SearchContext.
14
15
16
17
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 14
def initialize(_elements, _parent)
@elements = _elements
@parent = _parent
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(_method, *_args, &_block) ⇒ Object
Any methods missing are forwarded to the main element (first).
99
100
101
102
103
104
105
106
107
108
109
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 99
def method_missing(_method, *_args, &_block)
wrap_errors do
m = /^(.*)_all$/.match _method.to_s
if m then
return [] if empty?
elements.map { |e| e.send(m[1], *_args, &_block) }
else
element!.send(_method, *_args, &_block)
end
end
end
|
Instance Attribute Details
#elements ⇒ Object
Returns the value of attribute elements.
10
11
12
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 10
def elements
@elements
end
|
#parent ⇒ Object
Returns the value of attribute parent.
10
11
12
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 10
def parent
@parent
end
|
Instance Method Details
#[](*args) ⇒ Object
27
28
29
30
31
32
33
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 27
def [](*args)
if args[0].is_a? String or args[0].is_a? Symbol
attribute args[0]
else
child_context Array(elements.send(:[],*args))
end
end
|
#classes ⇒ Object
48
49
50
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 48
def classes
wrap_errors { (element!['class'] || '').split(' ') }
end
|
#each ⇒ Object
23
24
25
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 23
def each
elements.each { |el| yield child_context [el] }
end
|
#element! ⇒ Object
43
44
45
46
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 43
def element!
raise EmptySetError.new("This set is empty", self) if empty?
elements.first
end
|
#fill(_value) ⇒ Object
87
88
89
90
91
92
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 87
def fill(_value)
wrap_errors do
element!.clear
element!.send_keys _value
end
end
|
#first ⇒ Object
35
36
37
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 35
def first
if elements.first.nil? then nil else child_context [elements.first] end
end
|
#last ⇒ Object
39
40
41
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 39
def last
if elements.last.nil? then nil else child_context [elements.last] end
end
|
#respond_to?(_method, _include_all = false) ⇒ Boolean
111
112
113
114
115
116
117
118
119
120
121
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 111
def respond_to?(_method, _include_all=false)
return true if super
m = /^.*_all$/.match _method.to_s
if m then
return true if empty?
elements.first.respond_to? m[1], _include_all
else
return true if empty?
elements.first.respond_to? _method, _include_all
end
end
|
#root ⇒ Object
19
20
21
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 19
def root
@parent.root
end
|
#search(_selector = nil, _options = {}) ⇒ Object
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 52
def search(_selector=nil, _options={})
_options[:css] = _selector if _selector
wait_mode = _options.delete :wait
if wait_mode
timeout = _options.delete :timeout
timeout = TIMEOUT if timeout.nil?
wrap_errors do
wait = Selenium::WebDriver::Wait.new(timeout: timeout)
wait.until do
new_elements = search_elements _options
ok = case wait_mode
when :present then (new_elements.length > 0)
when :visible then (new_elements.length > 0 and new_elements.first.displayed?)
when :enabled then (new_elements.length > 0 and new_elements.first.displayed? and new_elements.first.enabled?)
when :not_present then (new_elements.length == 0)
when :not_visible then (not new_elements.any? { |e| e.displayed? })
else
raise SetupError.new "Invalid wait mode '#{wait_mode}'"
end
child_context new_elements if ok
end
end
else
child_context search_elements(_options)
end
end
|
#to_html ⇒ Object
94
95
96
|
# File 'lib/crabfarm/dsl/surfer/search_context.rb', line 94
def to_html
elements.map { |e| e['outerHTML'] }.join
end
|