Class: AutomationObject::Driver::SeleniumAdapter::Driver

Inherits:
Proxy::Proxy
  • Object
show all
Includes:
CommonSelenium::Driver
Defined in:
lib/automation_object/driver/selenium_adapter/driver.rb

Overview

Driver proxy for Selenium Conform Selenium driver interface to what's expected of the Driver Port

Constant Summary

DOCUMENT_COMPLETE_LOOPS =
5
DOCUMENT_COMPLETE_SLEEP =
0.2

Instance Method Summary collapse

Methods included from CommonSelenium::Driver

#back, #execute_script, #forward, #inner_window_height, #refresh, #scroll_position

Methods inherited from Proxy::Proxy

#method_missing

Constructor Details

#initialize(driver) ⇒ Driver

Returns a new instance of Driver

Parameters:

  • driver (Selenium::WebDriver::Driver)

    Selenium Web Driver



23
24
25
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 23

def initialize(driver)
  @subject = driver
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class AutomationObject::Proxy::Proxy

Instance Method Details

#accept_promptObject

Accept prompt either in browser or mobile



87
88
89
90
91
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 87

def accept_prompt
  alert = @subject.switch_to.alert
  alert.accept
  @subject.switch_to.default_content
end

#browser?Boolean

Check if browser, more useful for Appium but can be generic here

Returns:

  • (Boolean)

    whether or not browser is being used



102
103
104
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 102

def browser?
  true
end

#closevoid

This method returns an undefined value.

Close current window



126
127
128
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 126

def close
  @subject.close
end

#dismiss_promptObject

Dismiss the prompt



94
95
96
97
98
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 94

def dismiss_prompt
  alert = @subject.switch_to.alert
  alert.dismiss
  @subject.switch_to.default_content
end

#document_complete?Boolean

Run script in browser to check if document in JS is complete

Returns:

  • (Boolean)

    document is complete



132
133
134
135
136
137
138
139
140
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 132

def document_complete?
  # Loop through a few times to double check correctness
  DOCUMENT_COMPLETE_LOOPS.times do
    sleep(DOCUMENT_COMPLETE_SLEEP)
    return false unless @subject.execute_script('return document.readyState;') == 'complete'
  end

  true
end

#exists?(selector_type, selector_path) ⇒ Boolean

Returns exists or not

Parameters:

  • selector_type (Symbol)

    selector type (:css, :xpath, etc...)

  • selector_path (String)

    path to element

Returns:

  • (Boolean)

    exists or not



51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 51

def exists?(selector_type, selector_path)
  exists = false

  begin
    element_objects = @subject.find_elements(selector_type, selector_path)
    exists = true unless element_objects.empty?
  rescue StandardError => e
    puts e
    return false
  end

  exists
end

#find_element(selector_type, selector_path) ⇒ Object

Returns element

Parameters:

  • selector_type (Symbol)

    selector type, :css, :xpath, etc...

  • selector_path (String)

    path to element

Returns:

  • (Object)

    element



68
69
70
71
72
73
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 68

def find_element(selector_type, selector_path)
  element = @subject.find_element(selector_type, selector_path)

  # Wrap in adapter interface
  AutomationObject::Driver::Element.new(Element.new(self, element))
end

#find_elements(selector_type, selector_path) ⇒ Object

Returns element

Parameters:

  • selector_type (Symbol)

    selector type, :css, :xpath, etc...

  • selector_path (String)

    path to element

Returns:

  • (Object)

    element



78
79
80
81
82
83
84
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 78

def find_elements(selector_type, selector_path)
  elements = @subject.find_elements(selector_type, selector_path)

  elements.map do |element|
    AutomationObject::Driver::Element.new(Element.new(self, element))
  end
end

#get(url) ⇒ void

This method returns an undefined value.

Navigates current window to a given url

Parameters:

  • url (String)

    navigate to the following url



30
31
32
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 30

def get(url)
  @subject.navigate.to(url)
end

#quitObject

Destroy the driver



143
144
145
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 143

def quit
  @subject.quit
end

#titleString

Get the title of the document

Returns:



36
37
38
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 36

def title
  @subject.title
end

#wait(timeout = nil) ⇒ void

This method returns an undefined value.

Set timeout wait

Parameters:

  • timeout (Integer) (defaults to: nil)

    the timeout in seconds



43
44
45
46
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 43

def wait(timeout = nil)
  timeout = 0 unless timeout
  @subject.manage.timeouts.implicit_wait = timeout
end

#window_handleString

Current window handle

Returns:



114
115
116
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 114

def window_handle
  @subject.window_handle
end

#window_handle=(handle_value) ⇒ Object

Set current window handle to, will switch windows

Parameters:

  • handle_value (String)

    window handle value



120
121
122
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 120

def window_handle=(handle_value)
  @subject.switch_to.window(handle_value)
end

#window_handlesArray<String>

Window Handles

Returns:

  • (Array<String>)

    array of window handle ids



108
109
110
# File 'lib/automation_object/driver/selenium_adapter/driver.rb', line 108

def window_handles
  @subject.window_handles
end