Class: Pincers::Webdriver::Backend

Inherits:
Core::BaseBackend show all
Defined in:
lib/pincers/webdriver/backend.rb

Constant Summary collapse

DOM_PROPERTIES =
[:selected, :disabled, :checked, :value, :required]

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Core::BaseBackend

#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

#driverObject (readonly) 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_clientObject



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.headers['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_documentObject



56
57
58
# File 'lib/pincers/webdriver/backend.rb', line 56

def close_document
  driver.quit rescue nil
end

#document_rootObject



24
25
26
# File 'lib/pincers/webdriver/backend.rb', line 24

def document_root
  [driver]
end

#document_titleObject



32
33
34
# File 'lib/pincers/webdriver/backend.rb', line 32

def document_title
  driver.title
end

#document_urlObject



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

Returns:

  • (Boolean)


103
104
105
106
107
# File 'lib/pincers/webdriver/backend.rb', line 103

def element_is_actionable?(_element)
  # this is the base requisite in webdriver for actionable elements:
  # non displayed items will always error on action
  _element.displayed?
end

#extract_element_attribute(_element, _name) ⇒ Object



83
84
85
86
87
88
89
90
# File 'lib/pincers/webdriver/backend.rb', line 83

def extract_element_attribute(_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

#extract_element_html(_element) ⇒ Object



78
79
80
81
# File 'lib/pincers/webdriver/backend.rb', line 78

def extract_element_html(_element)
  return driver.page_source if _element == driver
  _element.attribute 'outerHTML'
end

#extract_element_tag(_element) ⇒ Object



68
69
70
71
# File 'lib/pincers/webdriver/backend.rb', line 68

def extract_element_tag(_element)
  _element = ensure_element _element
  _element.tag_name
end

#extract_element_text(_element) ⇒ Object



73
74
75
76
# File 'lib/pincers/webdriver/backend.rb', line 73

def extract_element_text(_element)
  _element = ensure_element _element
  _element.text
end

#fetch_cookiesObject



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

Returns:

  • (Boolean)


20
21
22
# File 'lib/pincers/webdriver/backend.rb', line 20

def javascript_enabled?
  true
end


48
49
50
# File 'lib/pincers/webdriver/backend.rb', line 48

def navigate_back(_steps)
  _steps.times { driver.navigate.back }
end


44
45
46
# File 'lib/pincers/webdriver/backend.rb', line 44

def navigate_forward(_steps)
  _steps.times { driver.navigate.forward }
end


40
41
42
# File 'lib/pincers/webdriver/backend.rb', line 40

def navigate_to(_url)
  driver.get _url
end

#refresh_documentObject



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

#submit_form(_element) ⇒ Object



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_frameObject



153
154
155
# File 'lib/pincers/webdriver/backend.rb', line 153

def switch_to_top_frame
  driver.switch_to.default_content
end