automation_object 0.0.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. checksums.yaml +4 -4
  2. data/lib/automation_object.rb +14 -72
  3. data/lib/automation_object/blue_print.rb +37 -100
  4. data/lib/automation_object/blue_print/composite/automatic_onload_modal.rb +28 -0
  5. data/lib/automation_object/blue_print/composite/base.rb +18 -0
  6. data/lib/automation_object/blue_print/composite/custom_method.rb +23 -0
  7. data/lib/automation_object/blue_print/composite/element.rb +20 -0
  8. data/lib/automation_object/blue_print/composite/element_array.rb +21 -0
  9. data/lib/automation_object/blue_print/composite/element_hash.rb +26 -0
  10. data/lib/automation_object/blue_print/composite/helpers/element_helper.rb +33 -0
  11. data/lib/automation_object/blue_print/composite/helpers/multiple_elements_helper.rb +18 -0
  12. data/lib/automation_object/blue_print/composite/hook.rb +31 -0
  13. data/lib/automation_object/blue_print/composite/hook_action.rb +84 -0
  14. data/lib/automation_object/blue_print/composite/hook_element_requirements.rb +39 -0
  15. data/lib/automation_object/blue_print/composite/modal.rb +56 -0
  16. data/lib/automation_object/blue_print/composite/screen.rb +61 -0
  17. data/lib/automation_object/blue_print/composite/top.rb +51 -0
  18. data/lib/automation_object/blue_print/composite/view.rb +48 -0
  19. data/lib/automation_object/blue_print/hash_adapter.rb +17 -0
  20. data/lib/automation_object/blue_print/hash_adapter/automatic_onload_modal.rb +35 -0
  21. data/lib/automation_object/blue_print/hash_adapter/composite.rb +93 -0
  22. data/lib/automation_object/blue_print/hash_adapter/custom_method.rb +30 -0
  23. data/lib/automation_object/blue_print/hash_adapter/element.rb +34 -0
  24. data/lib/automation_object/blue_print/hash_adapter/element_array.rb +36 -0
  25. data/lib/automation_object/blue_print/hash_adapter/element_hash.rb +43 -0
  26. data/lib/automation_object/blue_print/hash_adapter/helpers/element_helper.rb +59 -0
  27. data/lib/automation_object/blue_print/hash_adapter/helpers/multiple_elements_helper.rb +35 -0
  28. data/lib/automation_object/blue_print/hash_adapter/helpers/validation_error.rb +26 -0
  29. data/lib/automation_object/blue_print/hash_adapter/helpers/validation_helper.rb +99 -0
  30. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate.rb +23 -0
  31. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_allowed_keys.rb +31 -0
  32. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_element_presence_of.rb +55 -0
  33. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_instance_of.rb +39 -0
  34. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_modal_presence_of.rb +54 -0
  35. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_presence_of.rb +36 -0
  36. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_screen_presence_of.rb +55 -0
  37. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_view_presence_of.rb +52 -0
  38. data/lib/automation_object/blue_print/hash_adapter/hook.rb +35 -0
  39. data/lib/automation_object/blue_print/hash_adapter/hook_action.rb +134 -0
  40. data/lib/automation_object/blue_print/hash_adapter/hook_element_requirements.rb +64 -0
  41. data/lib/automation_object/blue_print/hash_adapter/modal.rb +52 -0
  42. data/lib/automation_object/blue_print/hash_adapter/screen.rb +91 -0
  43. data/lib/automation_object/blue_print/hash_adapter/top.rb +63 -0
  44. data/lib/automation_object/blue_print/hash_adapter/view.rb +29 -0
  45. data/lib/automation_object/blue_print/helpers/file_helper.rb +38 -0
  46. data/lib/automation_object/blue_print/yaml_adapter.rb +50 -0
  47. data/lib/automation_object/driver.rb +44 -0
  48. data/lib/automation_object/driver/appium_adapter/driver.rb +150 -0
  49. data/lib/automation_object/driver/appium_adapter/element.rb +118 -0
  50. data/lib/automation_object/driver/base.rb +11 -0
  51. data/lib/automation_object/driver/driver.rb +69 -245
  52. data/lib/automation_object/driver/element.rb +51 -210
  53. data/lib/automation_object/driver/helpers/selenium_driver_helper.rb +41 -0
  54. data/lib/automation_object/driver/helpers/selenium_element_helper.rb +138 -0
  55. data/lib/automation_object/driver/nokogiri_adapter/backup/driver.rb +83 -0
  56. data/lib/automation_object/driver/nokogiri_adapter/backup/element.rb +66 -0
  57. data/lib/automation_object/driver/nokogiri_adapter/backup/form.rb +29 -0
  58. data/lib/automation_object/driver/nokogiri_adapter/backup/helpers/driver_element_helper.rb +52 -0
  59. data/lib/automation_object/driver/nokogiri_adapter/backup/session.rb +115 -0
  60. data/lib/automation_object/driver/nokogiri_adapter/driver.rb +104 -0
  61. data/lib/automation_object/driver/nokogiri_adapter/element.rb +85 -0
  62. data/lib/automation_object/driver/nokogiri_adapter/error.rb +17 -0
  63. data/lib/automation_object/driver/selenium_adapter/driver.rb +143 -0
  64. data/lib/automation_object/driver/selenium_adapter/element.rb +116 -0
  65. data/lib/automation_object/dsl.rb +33 -0
  66. data/lib/automation_object/dsl/blue_print_adapter.rb +16 -0
  67. data/lib/automation_object/dsl/blue_print_adapter/composite.rb +54 -0
  68. data/lib/automation_object/dsl/blue_print_adapter/element.rb +14 -0
  69. data/lib/automation_object/dsl/blue_print_adapter/element_array.rb +14 -0
  70. data/lib/automation_object/dsl/blue_print_adapter/element_hash.rb +14 -0
  71. data/lib/automation_object/dsl/blue_print_adapter/modal.rb +23 -0
  72. data/lib/automation_object/dsl/blue_print_adapter/screen.rb +26 -0
  73. data/lib/automation_object/dsl/blue_print_adapter/top.rb +19 -0
  74. data/lib/automation_object/dsl/models.rb +18 -0
  75. data/lib/automation_object/dsl/proxies/element.rb +16 -0
  76. data/lib/automation_object/dsl/proxies/element_array.rb +16 -0
  77. data/lib/automation_object/dsl/proxies/element_hash.rb +16 -0
  78. data/lib/automation_object/dsl/proxies/helpers/composite_helper.rb +74 -0
  79. data/lib/automation_object/dsl/proxies/modal.rb +17 -0
  80. data/lib/automation_object/dsl/proxies/screen.rb +17 -0
  81. data/lib/automation_object/dsl/proxies/top.rb +17 -0
  82. data/lib/automation_object/framework.rb +79 -386
  83. data/lib/automation_object/helpers/composite.rb +95 -0
  84. data/lib/automation_object/helpers/composite_hook.rb +46 -0
  85. data/lib/automation_object/helpers/hash.rb +15 -0
  86. data/lib/automation_object/helpers/reflection_helper.rb +28 -0
  87. data/lib/automation_object/helpers/string.rb +27 -0
  88. data/lib/automation_object/proxies/mutex_proxy.rb +63 -0
  89. data/lib/automation_object/proxies/proxy.rb +20 -0
  90. data/lib/automation_object/proxies/throttle_proxy.rb +57 -0
  91. data/lib/automation_object/state.rb +37 -0
  92. data/lib/automation_object/state/blue_print_adapter.rb +16 -0
  93. data/lib/automation_object/state/blue_print_adapter/composite.rb +65 -0
  94. data/lib/automation_object/state/blue_print_adapter/element.rb +20 -0
  95. data/lib/automation_object/state/blue_print_adapter/element_array.rb +25 -0
  96. data/lib/automation_object/state/blue_print_adapter/element_hash.rb +31 -0
  97. data/lib/automation_object/state/blue_print_adapter/element_proxy.rb +28 -0
  98. data/lib/automation_object/state/blue_print_adapter/helpers/element_helper.rb +31 -0
  99. data/lib/automation_object/state/blue_print_adapter/helpers/screen_manager.rb +137 -0
  100. data/lib/automation_object/state/blue_print_adapter/helpers/window.rb +39 -0
  101. data/lib/automation_object/state/blue_print_adapter/hook.rb +56 -0
  102. data/lib/automation_object/state/blue_print_adapter/hook_action.rb +33 -0
  103. data/lib/automation_object/state/blue_print_adapter/hook_actions/action_loop.rb +35 -0
  104. data/lib/automation_object/state/blue_print_adapter/hook_actions/change_screen.rb +26 -0
  105. data/lib/automation_object/state/blue_print_adapter/hook_actions/change_to_previous_screen.rb +21 -0
  106. data/lib/automation_object/state/blue_print_adapter/hook_actions/close_modal.rb +31 -0
  107. data/lib/automation_object/state/blue_print_adapter/hook_actions/close_screen.rb +19 -0
  108. data/lib/automation_object/state/blue_print_adapter/hook_actions/element_requirement.rb +34 -0
  109. data/lib/automation_object/state/blue_print_adapter/hook_actions/new_screen.rb +37 -0
  110. data/lib/automation_object/state/blue_print_adapter/hook_actions/possible_screen_changes.rb +21 -0
  111. data/lib/automation_object/state/blue_print_adapter/hook_actions/reset_screen.rb +18 -0
  112. data/lib/automation_object/state/blue_print_adapter/hook_actions/show_modal.rb +26 -0
  113. data/lib/automation_object/state/blue_print_adapter/hook_actions/sleep.rb +18 -0
  114. data/lib/automation_object/state/blue_print_adapter/hook_actions/wait_for_elements.rb +20 -0
  115. data/lib/automation_object/state/blue_print_adapter/modal.rb +26 -0
  116. data/lib/automation_object/state/blue_print_adapter/screen.rb +32 -0
  117. data/lib/automation_object/state/blue_print_adapter/top.rb +45 -0
  118. data/lib/automation_object/state/error.rb +24 -0
  119. data/lib/automation_object/state/session.rb +38 -0
  120. data/lib/automation_object/step_definitions.rb +14 -0
  121. data/lib/automation_object/step_definitions/action.rb +21 -0
  122. data/lib/automation_object/step_definitions/cache.rb +23 -0
  123. data/lib/automation_object/step_definitions/element/actions.rb +87 -0
  124. data/lib/automation_object/step_definitions/element/regex.rb +24 -0
  125. data/lib/automation_object/step_definitions/element/steps.rb +67 -0
  126. data/lib/automation_object/step_definitions/parse.rb +39 -0
  127. data/lib/automation_object/version.rb +1 -1
  128. metadata +194 -110
  129. data/lib/automation_object/blue_print_validation/base_validation.rb +0 -44
  130. data/lib/automation_object/blue_print_validation/common_methods.rb +0 -106
  131. data/lib/automation_object/blue_print_validation/element_validation.rb +0 -198
  132. data/lib/automation_object/blue_print_validation/formatted_errors.rb +0 -41
  133. data/lib/automation_object/blue_print_validation/hook_validation.rb +0 -393
  134. data/lib/automation_object/blue_print_validation/key_value_constants.rb +0 -75
  135. data/lib/automation_object/blue_print_validation/modal_validation.rb +0 -37
  136. data/lib/automation_object/blue_print_validation/screen_modal_common_methods.rb +0 -119
  137. data/lib/automation_object/blue_print_validation/screen_validation.rb +0 -21
  138. data/lib/automation_object/blue_print_validation/validation_object.rb +0 -32
  139. data/lib/automation_object/driver/anonymous.rb +0 -27
  140. data/lib/automation_object/element/element.rb +0 -145
  141. data/lib/automation_object/element/element_array.rb +0 -12
  142. data/lib/automation_object/element/element_cell.rb +0 -126
  143. data/lib/automation_object/element/element_group.rb +0 -33
  144. data/lib/automation_object/element/element_hash.rb +0 -25
  145. data/lib/automation_object/element/element_helpers.rb +0 -29
  146. data/lib/automation_object/element/element_methods.rb +0 -134
  147. data/lib/automation_object/element/elements_helpers.rb +0 -204
  148. data/lib/automation_object/framework/events.rb +0 -8
  149. data/lib/automation_object/framework/helpers.rb +0 -101
  150. data/lib/automation_object/framework/print_objects.rb +0 -67
  151. data/lib/automation_object/framework/screen_monitor.rb +0 -55
  152. data/lib/automation_object/framework/screen_routing.rb +0 -310
  153. data/lib/automation_object/framework/window_helpers.rb +0 -181
  154. data/lib/automation_object/hash.rb +0 -6
  155. data/lib/automation_object/hook_helpers.rb +0 -27
  156. data/lib/automation_object/logger.rb +0 -179
  157. data/lib/automation_object/object.rb +0 -22
  158. data/lib/automation_object/screen/modal.rb +0 -8
  159. data/lib/automation_object/screen/screen.rb +0 -209
  160. data/lib/automation_object/screen/screen_hook_helpers.rb +0 -319
  161. data/lib/automation_object/screen/screen_modal_helpers.rb +0 -101
  162. data/lib/automation_object/screen/screen_prompt_helpers.rb +0 -21
  163. data/lib/automation_object/screen/screen_window_helpers.rb +0 -149
@@ -0,0 +1,118 @@
1
+ require_relative '../helpers/selenium_element_helper'
2
+
3
+ module AutomationObject
4
+ module Driver
5
+ module AppiumAdapter
6
+ #Element proxy for Appium
7
+ #Conform Appium element interface to what's expected of the Driver Port
8
+ class Element < AutomationObject::Proxies::Proxy
9
+ include AutomationObject::Driver::SeleniumElementHelper
10
+
11
+ def initialize(args)
12
+ @driver = args.fetch :driver
13
+ @subject = args.fetch :element
14
+ end
15
+
16
+ # Set or Get attribute
17
+ # @param key [String] key of element
18
+ # @param value [String, nil] set value or leave blank
19
+ # @return [String, nil]
20
+ def attribute(key, value = nil)
21
+ @subject.attribute(key, value)
22
+ end
23
+
24
+ # @return [String] id of element
25
+ def id
26
+ @subject.id
27
+ end
28
+
29
+ # @return [String] href of element
30
+ def href
31
+ @subject.attribute('href')
32
+ end
33
+
34
+ # Text of element
35
+ # @return [String, nil]
36
+ def text
37
+ @subject.text
38
+ end
39
+
40
+ # Type into an element
41
+ # @return [void]
42
+ def send_keys(string)
43
+ @subject.send_keys(string)
44
+ end
45
+
46
+ # Clear the element field
47
+ # @return [void]
48
+ def clear
49
+ @subject.clear
50
+ end
51
+
52
+ # @return [Boolean]
53
+ def visible?
54
+ @subject.displayed?
55
+ end
56
+
57
+ # @return [Boolean]
58
+ def invisible?
59
+ !@subject.displayed?
60
+ end
61
+
62
+ # Get the location
63
+ # @return [Point]
64
+ def location
65
+ @subject.location
66
+ end
67
+
68
+ # Get the size of an element
69
+ # @return [Dimension]
70
+ def size
71
+ @subject.size
72
+ end
73
+
74
+ # Perform a submit action on an element
75
+ # @return [void]
76
+ def submit
77
+ @subject.submit
78
+ end
79
+
80
+ # Scroll the element into view
81
+ # @return [void]
82
+ def scroll_into_view
83
+ @subject.location_once_scrolled_into_view
84
+
85
+ #Only scroll better if this is a browser and not an app
86
+ return unless @driver.is_browser?
87
+
88
+ element_center = self.element_center
89
+ window_height = self.inner_window_height
90
+ scroll_position = @driver.scroll_position
91
+
92
+ if element_center[:y] < (window_height/2)
93
+ ideal_y_position = (scroll_position[:y] + element_center[:y] - (window_height.to_f / 2.0)).abs
94
+ else
95
+ ideal_y_position = (scroll_position[:y] - element_center[:y] + (window_height.to_f / 2.0)).abs
96
+ end
97
+
98
+ @driver.execute_script("window.scroll(#{element_center[:x]},#{ideal_y_position});")
99
+ #Just in case in close to the top or bottom bounds of the window
100
+ element_location = @subject.location_once_scrolled_into_view
101
+
102
+ if element_location[:y] < 0
103
+ scroll_position = @driver.scroll_position
104
+ scroll_y_position = scroll_position[:y] + element_location[:y]
105
+ @driver.execute_script("window.scroll(#{element_location[:x]},#{scroll_y_position});")
106
+ end
107
+ end
108
+
109
+ # Perform a click action on the element
110
+ # @return [void]
111
+ def click
112
+ self.scroll_into_view if @driver.is_browser?
113
+ @subject.click
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,11 @@
1
+ module AutomationObject
2
+ module Driver
3
+ class Base
4
+ attr_accessor :adapter
5
+
6
+ def initialize(adapter_object, *args)
7
+ self.adapter = adapter_object
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,280 +1,104 @@
1
- #Thread Safe Execution Purposes
1
+ require_relative 'base'
2
+ require_relative 'element'
3
+
2
4
  module AutomationObject
3
5
  module Driver
4
- class Driver
5
- @@anonymous_skip_classes = [TrueClass, FalseClass, String, Numeric, Array, Hash]
6
- attr_accessor :mutex_object
7
-
8
- attr_accessor :is_browser, :is_mobile, :supports_contexts
9
-
10
- @@throttle_methods = {
11
- 'navigate' => 2,
12
- 'close' => 2,
13
- 'manage' => 1
14
- }
15
-
16
- @@minimum_speed = 0 #0.01 #Speed it up to see where faults may lay
17
-
18
- @@implicit_wait_timeout = 30
19
- @@script_timeout = 500
20
- @@page_load_timeout = 500
21
-
22
- def self.throttle_methods
23
- @@throttle_methods
24
- end
25
-
26
- def self.throttle_methods=(value)
27
- @@throttle_methods = value
28
- end
29
-
30
- def self.minimum_speed
31
- @@minimum_speed
32
- end
33
-
34
- def self.minimum_speed=(value)
35
- @@minimum_speed = value
36
- end
37
-
38
- def initialize(driver_object)
39
- @driver_object = driver_object
40
- self.mutex_object = Mutex.new
41
-
42
- return if self.is_mobile?
6
+ Point = Struct.new(:x, :y)
7
+ Dimension = Struct.new(:width, :height)
43
8
 
44
- self.mutex_object.synchronize do
45
- @driver_object.manage.timeouts.implicit_wait = @@implicit_wait_timeout
46
- @driver_object.manage.timeouts.script_timeout = @@script_timeout
47
- @driver_object.manage.timeouts.page_load = @@page_load_timeout
48
- end
9
+ #Driver adapter interface
10
+ #Adapters should meet this interface standard
11
+ class Driver < Base
12
+ # Navigates current window to a given url
13
+ # @param url [String] navigate to the following url
14
+ # @return [void]
15
+ def get(url)
16
+ self.adapter.get(url)
49
17
  end
50
18
 
51
- def respond_to?(method_symbol, include_private = false)
52
- self.mutex_object.synchronize do
53
- return true if super
54
- return @driver_object.respond_to?(method_symbol, include_private)
55
- end
56
- end
57
-
58
- def method_missing(method_symbol, *arguments, &block)
59
- anonymous_object = nil
60
- start_time = Time.new.to_f
61
-
62
- self.mutex_object.synchronize do
63
- #For Appium because it's under driver method
64
- if @driver_object.respond_to?(:driver) and not @driver_object.respond_to?(method_symbol)
65
- driver_return = @driver_object.driver.send(method_symbol, *arguments, &block)
66
- else
67
- driver_return = @driver_object.send(method_symbol, *arguments, &block)
68
- end
69
-
70
- self.throttle_speed(method_symbol, start_time)
71
-
72
- total_time_taken = (Time.new.to_f-start_time)
73
- AutomationObject::Logger::add_driver_message(total_time_taken, caller_locations, method_symbol, *arguments, &block)
74
-
75
- @@anonymous_skip_classes.each { |skip_class|
76
- if driver_return.is_a?(skip_class)
77
- return driver_return
78
- end
79
- }
80
-
81
- anonymous_object = AutomationObject::Driver::Anonymous.new(self, driver_return)
82
- end
83
-
84
- return anonymous_object
19
+ # Set timeout wait
20
+ # @param timeout [Integer] the timeout in seconds
21
+ # @return [void]
22
+ def set_wait(timeout = nil)
23
+ self.adapter.set_wait(timeout)
85
24
  end
86
25
 
26
+ # @param selector_type [Symbol] selector type (:css, :xpath, etc...)
27
+ # @param selector_path [String] path to element
28
+ # @return [Boolean] exists or not
87
29
  def exists?(selector_type, selector_path)
88
- start_time = Time.new.to_f
89
-
90
- self.mutex_object.synchronize do
91
- if @driver_object.respond_to?(:exists) #Appium
92
- exists = @driver_object.exists { @driver_object.find_element(selector_type, selector_path) }
93
- else
94
- begin
95
- @driver_object.manage.timeouts.implicit_wait = 0
96
- element_objects = @driver_object.find_elements(selector_type, selector_path)
97
- @driver_object.manage.timeouts.implicit_wait = @@implicit_wait_timeout
98
- if element_objects.length == 0
99
- exists = false
100
- else
101
- exists = true
102
- end
103
- rescue
104
- exists = false
105
- end
106
- end
107
-
108
- self.throttle_speed(:exists?, start_time)
109
-
110
- total_time_taken = (Time.new.to_f-start_time)
111
- AutomationObject::Logger::add_driver_message(total_time_taken, caller_locations, :exists?, [selector_type, selector_path])
112
-
113
- return exists
114
- end
30
+ self.adapter.exists?(selector_type, selector_path)
115
31
  end
116
32
 
33
+ # @param selector_type [Symbol] selector type, :css, :xpath, etc...
34
+ # @param selector_path [String] path to element
35
+ # @return [AutomationObject::Driver::Element] element
117
36
  def find_element(selector_type, selector_path)
118
- start_time = Time.new.to_f
119
-
120
- self.mutex_object.synchronize do
121
- element_object = @driver_object.find_element(selector_type, selector_path)
122
-
123
- self.throttle_speed(:find_element, start_time)
124
-
125
- total_time_taken = (Time.new.to_f-start_time)
126
- AutomationObject::Logger::add_driver_message(total_time_taken, caller_locations, :find_element, [selector_type, selector_path])
127
-
128
- return AutomationObject::Driver::Element.new(self, element_object)
129
- end
37
+ self.adapter.find_element(selector_type, selector_path)
130
38
  end
131
39
 
40
+ # @param selector_type [Symbol] selector type, :css, :xpath, etc...
41
+ # @param selector_path [String] path to element
42
+ # @return [Array<AutomationObject::Driver::Element>] elements
132
43
  def find_elements(selector_type, selector_path)
133
- start_time = Time.new.to_f
134
-
135
- self.mutex_object.synchronize do
136
- element_objects = @driver_object.find_elements(selector_type, selector_path)
137
-
138
- parsed_element_objects = Array.new
139
- element_objects.each { |element_object|
140
- parsed_element_objects.push(AutomationObject::Driver::Element.new(self, element_object))
141
- }
142
-
143
- self.throttle_speed(:find_elements, start_time)
144
-
145
- total_time_taken = (Time.new.to_f-start_time)
146
- AutomationObject::Logger::add_driver_message(total_time_taken, caller_locations, :find_elements, [selector_type, selector_path])
147
-
148
- return parsed_element_objects
149
- end
150
- end
151
-
152
- def throttle_speed(method_symbol, start_time)
153
- method_string = method_symbol.to_s
154
-
155
- throttle_time_minimum = @@minimum_speed
156
- if @@throttle_methods.is_a?(Hash)
157
- if @@throttle_methods.has_key?(method_string)
158
- throttle_time_minimum = @@throttle_methods[method_string].to_f
159
- end
160
- end
161
-
162
- time_difference = Time.new.to_f - start_time
163
-
164
- if time_difference < throttle_time_minimum
165
- sleep((throttle_time_minimum-time_difference))
166
- end
167
- end
168
-
169
- def screenshot(path)
170
- start_time = Time.new.to_f
171
-
172
- if self.driver_object.respond_to?(:screenshot)
173
- driver_return = self.driver_object.screenshot(path)
174
- else
175
- driver_return = self.driver_object.save_screenshot(path)
176
- end
177
-
178
- self.throttle_speed(:find_elements, start_time)
179
-
180
- total_time_taken = (Time.new.to_f-start_time)
181
- AutomationObject::Logger::add_driver_message(total_time_taken, caller_locations, :screenshot, [path])
182
-
183
- return driver_return
44
+ self.adapter.find_elements(selector_type, selector_path)
184
45
  end
185
46
 
47
+ #Accept prompt either in browser or mobile
186
48
  def accept_prompt
187
- start_time = Time.new.to_f
188
-
189
- if self.driver_object.respond_to?(:alert_accept)
190
- self.driver_object.alert_accept
191
- else
192
- alert = self.driver_object.switch_to.alert
193
- alert.accept
194
- end
195
-
196
- self.throttle_speed(:accept_prompt, start_time)
197
- return nil
49
+ self.adapter.accept_prompt
198
50
  end
199
51
 
52
+ #Dismiss the prompt
200
53
  def dismiss_prompt
201
- start_time = Time.new.to_f
202
-
203
- begin
204
- @driver_object.alert_dismiss
205
- rescue NoMethodError
206
- alert = @driver_object.switch_to.alert
207
- alert.dismiss
208
- @driver_object.switch_to.default_content
209
- end
210
-
211
- self.throttle_speed(:dismiss_prompt, start_time)
212
- return nil
213
- end
214
-
215
- def is_mobile?
216
- if self.is_mobile == nil
217
- self.is_mobile = self.supports_contexts?
218
- end
219
-
220
- return self.is_mobile
54
+ self.adapter.dismiss_prompt
221
55
  end
222
56
 
57
+ # Check if browser, more useful for Appium but can be generic here
58
+ # @return [Boolean] whether or not browser is being used
223
59
  def is_browser?
224
- unless self.is_browser == nil
225
- return self.is_browser
226
- end
227
-
228
- #If Selenium the yeah we are using a browser
229
- if self.supports_window_handles?
230
- self.is_browser = true
231
- return self.is_browser
232
- end
60
+ self.adapter.is_browser?
61
+ end
233
62
 
234
- #Now we need to check Appium's contexts to see if WEBVIEW is in available_contexts
235
- available_contexts = nil
236
- self.mutex_object.synchronize do
237
- available_contexts = @driver_object.available_contexts
238
- end
239
- self.supports_contexts = true
63
+ #Window Handles
64
+ # @return [Array<String>] array of window handle ids
65
+ def window_handles
66
+ self.adapter.window_handles
67
+ end
240
68
 
241
- available_contexts.each { |context|
242
- if context.match(/^WEBVIEW_\d+$/)
243
- self.is_browser = true
244
- return self.is_browser
245
- end
246
- }
69
+ #Current window handle
70
+ # @return [String] handle id
71
+ def window_handle
72
+ self.adapter.window_handle
73
+ end
247
74
 
248
- self.is_browser = false
249
- return self.is_browser
75
+ #Set current window handle to, will switch windows
76
+ # @param handle_value [String] window handle value
77
+ def window_handle=(handle_value)
78
+ self.adapter.window_handle(handle_value)
250
79
  end
251
80
 
252
- #Selenium's use of window_handles
253
- def supports_window_handles?
254
- begin
255
- self.mutex_object.synchronize do
256
- @driver_object.window_handles
257
- end
258
- return true
259
- rescue NoMethodError, Selenium::WebDriver::Error::UnknownError
260
- return false
261
- end
81
+ # Run script in browser to check if document in JS is complete
82
+ # @return [Boolean] document is complete
83
+ def document_complete?
84
+ self.adapter.document_complete?
262
85
  end
263
86
 
264
- #Appium's use of window_handles
265
- def supports_contexts?
266
- return self.supports_contexts if self.supports_contexts != nil
87
+ # Wait till the document is complete
88
+ # @return [void]
89
+ def document_complete_wait
90
+ self.adapter.document_complete_wait
91
+ end
267
92
 
268
- self.mutex_object.synchronize do
269
- begin
270
- @driver_object.available_contexts
271
- self.supports_contexts = true
272
- rescue NoMethodError
273
- self.supports_contexts = false
274
- end
275
- end
93
+ # @param script [String] JS to run
94
+ # @return [Object, nil]
95
+ def execute_script(script)
96
+ self.adapter.execute_script(script)
97
+ end
276
98
 
277
- return self.supports_contexts
99
+ # Destroy the driver
100
+ def quit
101
+ self.adapter.quit
278
102
  end
279
103
  end
280
104
  end