Class: Pincers::Webdriver::Backend
Constant Summary
collapse
- DOM_PROPERTIES =
[:selected, :disabled, :checked, :value, :required]
Instance Attribute Summary collapse
-
#driver ⇒ Object
(also: #document)
readonly
Returns the value of attribute driver.
Instance Method Summary
collapse
-
#as_http_client ⇒ Object
-
#click_on_element(_element, _modifiers) ⇒ Object
-
#close_document ⇒ Object
-
#document_root ⇒ Object
-
#document_title ⇒ Object
-
#document_url ⇒ Object
-
#double_click_on_element(_element) ⇒ Object
-
#drag_and_drop(_element, _on) ⇒ Object
-
#element_is_actionable?(_element) ⇒ Boolean
-
#extract_element_attribute(_element, _name) ⇒ Object
-
#extract_element_html(_element) ⇒ Object
-
#extract_element_tag(_element) ⇒ Object
-
#extract_element_text(_element) ⇒ Object
-
#fetch_cookies ⇒ Object
-
#hover_over_element(_element) ⇒ Object
-
#initialize(_driver) ⇒ Backend
constructor
A new instance of Backend.
-
#javascript_enabled? ⇒ Boolean
-
#navigate_back(_steps) ⇒ Object
-
#navigate_forward(_steps) ⇒ Object
-
#navigate_to(_url) ⇒ Object
-
#refresh_document ⇒ Object
-
#right_click_on_element(_element) ⇒ Object
-
#search_by_css(_element, _selector, _limit) ⇒ Object
-
#search_by_xpath(_element, _selector, _limit) ⇒ Object
-
#set_element_attribute(_element, _name, _value) ⇒ Object
-
#set_element_text(_element, _value) ⇒ Object
-
#submit_form(_element) ⇒ Object
-
#switch_to_frame(_element) ⇒ Object
-
#switch_to_top_frame ⇒ Object
#clear_input, #elements_equal, #fetch_resource, #merge_http_client, #switch_to_parent_frame
Constructor Details
#initialize(_driver) ⇒ Backend
Returns a new instance of Backend.
16
17
18
|
# File 'lib/pincers/webdriver/backend.rb', line 16
def initialize(_driver)
@driver = _driver
end
|
Instance Attribute Details
#driver ⇒ Object
Also known as:
document
Returns the value of attribute driver.
12
13
14
|
# File 'lib/pincers/webdriver/backend.rb', line 12
def driver
@driver
end
|
Instance Method Details
#as_http_client ⇒ Object
157
158
159
160
161
162
163
164
|
# File 'lib/pincers/webdriver/backend.rb', line 157
def as_http_client
session = Pincers::Http::Session.new
session.['User-Agent'] = user_agent
session.proxy = proxy_address
load_cookies_in_session session
Pincers::Http::Client.new session, HttpDocument.new(self)
end
|
#click_on_element(_element, _modifiers) ⇒ Object
115
116
117
118
119
120
121
122
|
# File 'lib/pincers/webdriver/backend.rb', line 115
def click_on_element(_element, _modifiers)
_element = ensure_ready_for_input _element
if _modifiers.length == 0
_element.click
else
click_with_modifiers(_element, _modifiers)
end
end
|
#close_document ⇒ Object
56
57
58
|
# File 'lib/pincers/webdriver/backend.rb', line 56
def close_document
driver.quit rescue nil
end
|
#document_root ⇒ Object
24
25
26
|
# File 'lib/pincers/webdriver/backend.rb', line 24
def document_root
[driver]
end
|
#document_title ⇒ Object
32
33
34
|
# File 'lib/pincers/webdriver/backend.rb', line 32
def document_title
driver.title
end
|
#document_url ⇒ Object
28
29
30
|
# File 'lib/pincers/webdriver/backend.rb', line 28
def document_url
driver.current_url
end
|
#double_click_on_element(_element) ⇒ Object
129
130
131
132
|
# File 'lib/pincers/webdriver/backend.rb', line 129
def double_click_on_element(_element)
_element = ensure_ready_for_input _element
actions.double_click(_element).perform
end
|
#drag_and_drop(_element, _on) ⇒ Object
139
140
141
142
|
# File 'lib/pincers/webdriver/backend.rb', line 139
def drag_and_drop(_element, _on)
_element = ensure_input_element _element
actions.drag_and_drop(_element, _on).perform
end
|
#element_is_actionable?(_element) ⇒ Boolean
103
104
105
106
107
|
# File 'lib/pincers/webdriver/backend.rb', line 103
def element_is_actionable?(_element)
_element.displayed?
end
|
83
84
85
86
87
88
89
90
|
# File 'lib/pincers/webdriver/backend.rb', line 83
def (_element, _name)
_element = ensure_element _element
if DOM_PROPERTIES.include? _name.to_sym
driver.execute_script("return arguments[0]['#{_name}'];", _element)
else
_element[_name]
end
end
|
78
79
80
81
|
# File 'lib/pincers/webdriver/backend.rb', line 78
def (_element)
return driver.page_source if _element == driver
_element.attribute 'outerHTML'
end
|
68
69
70
71
|
# File 'lib/pincers/webdriver/backend.rb', line 68
def (_element)
_element = ensure_element _element
_element.tag_name
end
|
73
74
75
76
|
# File 'lib/pincers/webdriver/backend.rb', line 73
def (_element)
_element = ensure_element _element
_element.text
end
|
#fetch_cookies ⇒ Object
36
37
38
|
# File 'lib/pincers/webdriver/backend.rb', line 36
def fetch_cookies
driver.manage.all_cookies
end
|
#hover_over_element(_element) ⇒ Object
134
135
136
137
|
# File 'lib/pincers/webdriver/backend.rb', line 134
def hover_over_element(_element)
_element = ensure_ready_for_input _element
actions.move_to(_element).perform
end
|
#javascript_enabled? ⇒ Boolean
20
21
22
|
# File 'lib/pincers/webdriver/backend.rb', line 20
def javascript_enabled?
true
end
|
#navigate_back(_steps) ⇒ Object
48
49
50
|
# File 'lib/pincers/webdriver/backend.rb', line 48
def navigate_back(_steps)
_steps.times { driver.navigate.back }
end
|
#navigate_forward(_steps) ⇒ Object
44
45
46
|
# File 'lib/pincers/webdriver/backend.rb', line 44
def navigate_forward(_steps)
_steps.times { driver.navigate.forward }
end
|
#navigate_to(_url) ⇒ Object
40
41
42
|
# File 'lib/pincers/webdriver/backend.rb', line 40
def navigate_to(_url)
driver.get _url
end
|
#refresh_document ⇒ Object
52
53
54
|
# File 'lib/pincers/webdriver/backend.rb', line 52
def refresh_document
driver.navigate.refresh
end
|
#right_click_on_element(_element) ⇒ Object
124
125
126
127
|
# File 'lib/pincers/webdriver/backend.rb', line 124
def right_click_on_element(_element)
_element = ensure_ready_for_input _element
actions.context_click(_element).perform
end
|
#search_by_css(_element, _selector, _limit) ⇒ Object
60
61
62
|
# File 'lib/pincers/webdriver/backend.rb', line 60
def search_by_css(_element, _selector, _limit)
search _element, { css: _selector }, _limit
end
|
#search_by_xpath(_element, _selector, _limit) ⇒ Object
64
65
66
|
# File 'lib/pincers/webdriver/backend.rb', line 64
def search_by_xpath(_element, _selector, _limit)
search _element, { xpath: _selector }, _limit
end
|
#set_element_attribute(_element, _name, _value) ⇒ Object
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/pincers/webdriver/backend.rb', line 92
def set_element_attribute(_element, _name, _value)
_element = ensure_element _element
if DOM_PROPERTIES.include? _name.to_sym
driver.execute_script("arguments[0]['#{_name}'] = #{_value.to_json};", _element)
elsif _value == ''
driver.execute_script("arguments[0].removeAttribute('#{_name}')", _element)
else
driver.execute_script("arguments[0].setAttribute('#{_name}', #{_value.to_json})", _element)
end
end
|
#set_element_text(_element, _value) ⇒ Object
109
110
111
112
113
|
# File 'lib/pincers/webdriver/backend.rb', line 109
def set_element_text(_element, _value)
_element = ensure_ready_for_input _element
_element.clear
_element.send_keys _value
end
|
144
145
146
147
|
# File 'lib/pincers/webdriver/backend.rb', line 144
def submit_form(_element)
_element = ensure_element _element
_element.submit
end
|
#switch_to_frame(_element) ⇒ Object
149
150
151
|
# File 'lib/pincers/webdriver/backend.rb', line 149
def switch_to_frame(_element)
driver.switch_to.frame _element
end
|
#switch_to_top_frame ⇒ Object
153
154
155
|
# File 'lib/pincers/webdriver/backend.rb', line 153
def switch_to_top_frame
driver.switch_to.default_content
end
|