class Pincers::Webdriver::Backend
Constants
- DOM_PROPERTIES
Attributes
document[R]
driver[R]
Public Class Methods
new(_driver)
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 16 def initialize(_driver) @driver = _driver end
Public Instance Methods
as_http_client()
click to toggle source
# 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)
click to toggle source
# 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()
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 56 def close_document driver.quit rescue nil end
document_root()
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 24 def document_root [driver] end
document_title()
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 32 def document_title driver.title end
document_url()
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 28 def document_url driver.current_url end
double_click_on_element(_element)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 73 def extract_element_text(_element) _element = ensure_element _element _element.text end
hover_over_element(_element)
click to toggle source
# 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?()
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 20 def javascript_enabled? true end
refresh_document()
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 52 def refresh_document driver.navigate.refresh end
right_click_on_element(_element)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 144 def submit_form(_element) _element = ensure_element _element _element.submit end
switch_to_frame(_element)
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 149 def switch_to_frame(_element) driver.switch_to.frame _element end
switch_to_top_frame()
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 153 def switch_to_top_frame driver.switch_to.default_content end
Private Instance Methods
actions()
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 180 def actions driver.action end
click_with_modifiers(_element, _modifiers)
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 184 def click_with_modifiers(_element, _modifiers) _modifiers.each { |m| actions.key_down m } actions.click _element _modifiers.each { |m| actions.key_up m } actions.perform end
ensure_element(_element)
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 191 def ensure_element(_element) return driver.find_element tag_name: 'html' if _element == driver _element end
ensure_ready_for_input(_element)
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 196 def ensure_ready_for_input(_element) _element = ensure_element _element Selenium::WebDriver::Wait.new.until { _element.displayed? } _element end
proxy_address()
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 206 def proxy_address proxy = driver.capabilities.proxy proxy.nil? ? nil : (proxy.http || proxy.ssl) end
search(_element, _query, _limit)
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 168 def search(_element, _query, _limit) if _limit == 1 begin [_element.find_element(_query)] rescue Selenium::WebDriver::Error::NoSuchElementError [] end else _element.find_elements _query end end
user_agent()
click to toggle source
# File lib/pincers/webdriver/backend.rb, line 202 def user_agent driver.execute_script("return navigator.userAgent;") end