automation_object 0.0.4

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 (43) hide show
  1. checksums.yaml +7 -0
  2. data/lib/automation_object/blue_print.rb +106 -0
  3. data/lib/automation_object/blue_print_validation/base_validation.rb +44 -0
  4. data/lib/automation_object/blue_print_validation/common_methods.rb +106 -0
  5. data/lib/automation_object/blue_print_validation/element_validation.rb +198 -0
  6. data/lib/automation_object/blue_print_validation/formatted_errors.rb +41 -0
  7. data/lib/automation_object/blue_print_validation/hook_validation.rb +393 -0
  8. data/lib/automation_object/blue_print_validation/key_value_constants.rb +75 -0
  9. data/lib/automation_object/blue_print_validation/modal_validation.rb +37 -0
  10. data/lib/automation_object/blue_print_validation/screen_modal_common_methods.rb +119 -0
  11. data/lib/automation_object/blue_print_validation/screen_validation.rb +21 -0
  12. data/lib/automation_object/blue_print_validation/validation_object.rb +32 -0
  13. data/lib/automation_object/driver/anonymous.rb +27 -0
  14. data/lib/automation_object/driver/driver.rb +281 -0
  15. data/lib/automation_object/driver/element.rb +243 -0
  16. data/lib/automation_object/element/element.rb +145 -0
  17. data/lib/automation_object/element/element_array.rb +12 -0
  18. data/lib/automation_object/element/element_cell.rb +126 -0
  19. data/lib/automation_object/element/element_group.rb +33 -0
  20. data/lib/automation_object/element/element_hash.rb +25 -0
  21. data/lib/automation_object/element/element_helpers.rb +29 -0
  22. data/lib/automation_object/element/element_methods.rb +134 -0
  23. data/lib/automation_object/element/elements_helpers.rb +204 -0
  24. data/lib/automation_object/framework/events.rb +8 -0
  25. data/lib/automation_object/framework/helpers.rb +101 -0
  26. data/lib/automation_object/framework/print_objects.rb +67 -0
  27. data/lib/automation_object/framework/screen_monitor.rb +55 -0
  28. data/lib/automation_object/framework/screen_routing.rb +310 -0
  29. data/lib/automation_object/framework/window_helpers.rb +181 -0
  30. data/lib/automation_object/framework.rb +408 -0
  31. data/lib/automation_object/hash.rb +6 -0
  32. data/lib/automation_object/hook_helpers.rb +27 -0
  33. data/lib/automation_object/logger.rb +179 -0
  34. data/lib/automation_object/object.rb +22 -0
  35. data/lib/automation_object/screen/modal.rb +8 -0
  36. data/lib/automation_object/screen/screen.rb +209 -0
  37. data/lib/automation_object/screen/screen_hook_helpers.rb +319 -0
  38. data/lib/automation_object/screen/screen_modal_helpers.rb +101 -0
  39. data/lib/automation_object/screen/screen_prompt_helpers.rb +21 -0
  40. data/lib/automation_object/screen/screen_window_helpers.rb +149 -0
  41. data/lib/automation_object/version.rb +3 -0
  42. data/lib/automation_object.rb +80 -0
  43. metadata +279 -0
@@ -0,0 +1,149 @@
1
+ module AutomationObject
2
+ module ScreenWindowHelpers
3
+ #in_iframe String, element_name that is the iframe
4
+ attr_accessor :in_iframe
5
+
6
+ def navigate_back
7
+ unless self.framework_object.screen_history_hash[self.window_handle].class == Array
8
+ raise ArgumentError, "Screen history hash doesn't contain window handle (#{self.window_handle}) for screen: #{self.screen_name}"
9
+ end
10
+
11
+ history_array = self.framework_object.screen_history_hash[self.window_handle]
12
+ unless history_array.length > 1
13
+ raise ArgumentError, 'Cannot navigate back in the current window, nothing to go back to'
14
+ end
15
+
16
+ #Remove last screen, which should be this one
17
+ history_array.pop
18
+ previous_screen_class = history_array.pop
19
+
20
+ self.driver_object.navigate.back
21
+
22
+ self.emit :change_screen, {
23
+ :screen_class_symbol => previous_screen_class
24
+ }
25
+ end
26
+
27
+ def close_window(skip_close = false)
28
+ self.emit :close_window, {
29
+ :screen_name => self.screen_name,
30
+ :skip_close => skip_close
31
+ }
32
+ end
33
+
34
+ def get_window_size
35
+ return self.driver_object.window_size if self.driver_object.respond_to?(:window_size)
36
+ return self.driver_object.manage.window.size
37
+ end
38
+
39
+ def set_window_size(x, y)
40
+ self.driver_object.manage.window.resize_to(x, y)
41
+ end
42
+
43
+ def set_window_location(x, y)
44
+ self.driver_object.manage.window.move_to(x, y)
45
+ end
46
+
47
+ def maximize_window
48
+ self.driver_object.manage.window.maximize
49
+ end
50
+
51
+ def current_url
52
+ return self.driver_object.current_url
53
+ end
54
+
55
+ def hide_keyboard(close_key = nil)
56
+ unless self.framework_object.is_mobile?
57
+ raise 'This is not implemented for Browsers'
58
+ end
59
+
60
+ self.driver_object.hide_keyboard(close_key)
61
+ end
62
+
63
+ def screenshot(path)
64
+ unless path.match(/\.png$/)
65
+ raise ArgumentError, 'Screenshot path must contain .png file extension'
66
+ end
67
+
68
+ return self.driver_object.screenshot(path)
69
+ end
70
+
71
+ def window_in_iframe?
72
+ return (self.in_iframe) ? true : false
73
+ end
74
+
75
+ def element_in_current_iframe?(element_name)
76
+ configuration = self.send(self.translate_string_to_class(element_name)).configuration
77
+
78
+ return false unless configuration.is_a?(Hash)
79
+ return false unless configuration.has_key?('in_iframe')
80
+
81
+ return (configuration['in_iframe'] == self.in_iframe)
82
+ end
83
+
84
+ def switch_to_default_content
85
+ return unless self.window_in_iframe?
86
+
87
+ AutomationObject::Logger::add('Switching from iframe to default content', {:screen_name => self.screen_name})
88
+
89
+ self.driver_object.switch_to.default_content
90
+ self.in_iframe = nil
91
+ end
92
+
93
+ def switch_to_iframe(element_name)
94
+ configuration = self.send(self.translate_string_to_class(element_name)).configuration
95
+ iframe_element_name = configuration['in_iframe']
96
+
97
+ unless iframe_element_name.class == String
98
+ raise ArgumentError, "Expected String for in_iframe property of element (#{element_name}), screen (#{self.screen_name})"
99
+ end
100
+
101
+ iframe_element_object = self.get_element_object(iframe_element_name)
102
+ iframe_element_object.scroll_to_view
103
+
104
+ AutomationObject::Logger::add('Switching from default content to iframe', [self.framework_location])
105
+ iframe_element_object.switch_to_iframe
106
+ self.in_iframe = iframe_element_name
107
+ end
108
+
109
+ def scroll_up
110
+ AutomationObject::Logger::add('Scrolling up', [self.framework_location])
111
+
112
+ self.do_hook_action('scroll_up', 'before')
113
+ driver_return = self.driver_object.execute_script('mobile: swipe', startX: 0.5, startY: 0.2, endX: 0.5, endY: 0.8, duration: 0.1)
114
+ self.do_hook_action('scroll_up', 'after')
115
+
116
+ return driver_return
117
+ end
118
+
119
+ def scroll_down
120
+ AutomationObject::Logger::add('Scrolling down', [self.framework_location])
121
+
122
+ self.do_hook_action('scroll_down', 'before')
123
+ driver_return = self.driver_object.execute_script('mobile: swipe', startX: 0.5, startY: 0.8, endX: 0.5, endY: 0.2, duration: 0.1)
124
+ self.do_hook_action('scroll_down', 'after')
125
+
126
+ return driver_return
127
+ end
128
+
129
+ def scroll_left
130
+ AutomationObject::Logger::add('Scrolling left', [self.framework_location])
131
+
132
+ self.do_hook_action('scroll_left', 'before')
133
+ driver_return = self.driver_object.execute_script('mobile: swipe', startX: 0.8, startY: 0.5, endX: 0.2, endY: 0.5, duration: 0.1)
134
+ self.do_hook_action('scroll_left', 'after')
135
+
136
+ return driver_return
137
+ end
138
+
139
+ def scroll_right
140
+ AutomationObject::Logger::add('Scrolling right', [self.framework_location])
141
+
142
+ self.do_hook_action('scroll_right', 'before')
143
+ driver_return = self.driver_object.execute_script('mobile: swipe', startX: 0.2, startY: 0.5, endX: 0.8, endY: 0.5, duration: 0.1)
144
+ self.do_hook_action('scroll_right', 'after')
145
+
146
+ return driver_return
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,3 @@
1
+ module AutomationObject
2
+ VERSION = '0.0.4'
3
+ end
@@ -0,0 +1,80 @@
1
+ require_relative 'automation_object/version'
2
+
3
+ #Third-Party
4
+ require 'event_emitter'
5
+ require 'thread'
6
+ require 'colorize'
7
+ require 'awesome_print'
8
+ require 'yaml'
9
+ require 'rspec'
10
+ require 'rspec/expectations'
11
+ require 'securerandom'
12
+
13
+ #Convience methods
14
+ require_relative 'automation_object/hash'
15
+ require_relative 'automation_object/object'
16
+ require_relative 'automation_object/logger'
17
+
18
+ #Driver Object that has Mutex for keeping Thread Safe!
19
+ require_relative 'automation_object/driver/anonymous'
20
+ require_relative 'automation_object/driver/element'
21
+ require_relative 'automation_object/driver/driver'
22
+
23
+ #HookHelper Module
24
+ require_relative 'automation_object/hook_helpers'
25
+
26
+ #BluePrintValidation Module
27
+ require_relative 'automation_object/blue_print_validation/key_value_constants'
28
+ require_relative 'automation_object/blue_print_validation/formatted_errors'
29
+ require_relative 'automation_object/blue_print_validation/common_methods'
30
+ require_relative 'automation_object/blue_print_validation/base_validation'
31
+ require_relative 'automation_object/blue_print_validation/screen_modal_common_methods'
32
+ require_relative 'automation_object/blue_print_validation/screen_validation'
33
+ require_relative 'automation_object/blue_print_validation/modal_validation'
34
+ require_relative 'automation_object/blue_print_validation/element_validation'
35
+ require_relative 'automation_object/blue_print_validation/hook_validation'
36
+ require_relative 'automation_object/blue_print_validation/validation_object'
37
+
38
+ #BluePrint
39
+ require_relative 'automation_object/blue_print'
40
+
41
+ #Framework Object
42
+ require_relative 'automation_object/framework/helpers'
43
+ require_relative 'automation_object/framework/window_helpers'
44
+ require_relative 'automation_object/framework/print_objects'
45
+ require_relative 'automation_object/framework/screen_routing'
46
+ require_relative 'automation_object/framework/screen_monitor'
47
+ require_relative 'automation_object/framework/events'
48
+ require_relative 'automation_object/framework'
49
+
50
+ #Screen/Modal Objects
51
+ require_relative 'automation_object/screen/screen_window_helpers'
52
+ require_relative 'automation_object/screen/screen_hook_helpers'
53
+ require_relative 'automation_object/screen/screen_prompt_helpers'
54
+ require_relative 'automation_object/screen/screen_modal_helpers'
55
+ require_relative 'automation_object/screen/screen'
56
+ require_relative 'automation_object/screen/modal'
57
+
58
+ #Element/ElementHash/ElementArray Objects
59
+ require_relative 'automation_object/element/element_helpers'
60
+ require_relative 'automation_object/element/elements_helpers'
61
+ require_relative 'automation_object/element/element_methods'
62
+ require_relative 'automation_object/element/element'
63
+ require_relative 'automation_object/element/element_array'
64
+ require_relative 'automation_object/element/element_hash'
65
+
66
+ #ElementGroup
67
+ require_relative 'automation_object/element/element_group'
68
+ require_relative 'automation_object/element/element_cell'
69
+
70
+ module AutomationObject
71
+ @@debug_mode = false
72
+
73
+ def self.debug_mode
74
+ @@debug_mode
75
+ end
76
+
77
+ def self.debug_mode=(value)
78
+ @@debug_mode = value
79
+ end
80
+ end
metadata ADDED
@@ -0,0 +1,279 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: automation_object
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Michael Blatter
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: colorize
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.6'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 0.6.0
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '0.6'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 0.6.0
61
+ - !ruby/object:Gem::Dependency
62
+ name: awesome_print
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.2'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 1.2.0
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '1.2'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 1.2.0
81
+ - !ruby/object:Gem::Dependency
82
+ name: thread
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '0.1'
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 0.1.4
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '0.1'
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: 0.1.4
101
+ - !ruby/object:Gem::Dependency
102
+ name: event_emitter
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '0.2'
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 0.2.5
111
+ type: :runtime
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.2'
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: 0.2.5
121
+ - !ruby/object:Gem::Dependency
122
+ name: rspec
123
+ requirement: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - "~>"
126
+ - !ruby/object:Gem::Version
127
+ version: 3.1.0
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 3.1.0
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: 3.1.0
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: 3.1.0
141
+ - !ruby/object:Gem::Dependency
142
+ name: rspec-expectations
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '3.1'
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: 3.1.2
151
+ type: :runtime
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '3.1'
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: 3.1.2
161
+ - !ruby/object:Gem::Dependency
162
+ name: appium_lib
163
+ requirement: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '4.1'
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: 4.1.0
171
+ type: :runtime
172
+ prerelease: false
173
+ version_requirements: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - "~>"
176
+ - !ruby/object:Gem::Version
177
+ version: '4.1'
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: 4.1.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: selenium-webdriver
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '2.44'
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: 2.44.0
191
+ type: :runtime
192
+ prerelease: false
193
+ version_requirements: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - "~>"
196
+ - !ruby/object:Gem::Version
197
+ version: '2.44'
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: 2.44.0
201
+ description: |-
202
+ This gem provides a way to create a dynamic usable DSL framework representing your website or app.
203
+ Implementing Selenium/Appium driver and YAML configurations, this API will provide a layer in between your automation code and the driver.
204
+ By creating YAML configurations that represents your website/app, the DSL framework in turn will reflect your configuration
205
+ and allow you to control the automation through the DSL framework. Using this gem can help remove tedious tasks that are often
206
+ repeated throughout code and help improve the scalability of code by mapping UI in YAML configuration files.
207
+ email:
208
+ - mblatter@spartzinc.com
209
+ executables: []
210
+ extensions: []
211
+ extra_rdoc_files: []
212
+ files:
213
+ - lib/automation_object.rb
214
+ - lib/automation_object/blue_print.rb
215
+ - lib/automation_object/blue_print_validation/base_validation.rb
216
+ - lib/automation_object/blue_print_validation/common_methods.rb
217
+ - lib/automation_object/blue_print_validation/element_validation.rb
218
+ - lib/automation_object/blue_print_validation/formatted_errors.rb
219
+ - lib/automation_object/blue_print_validation/hook_validation.rb
220
+ - lib/automation_object/blue_print_validation/key_value_constants.rb
221
+ - lib/automation_object/blue_print_validation/modal_validation.rb
222
+ - lib/automation_object/blue_print_validation/screen_modal_common_methods.rb
223
+ - lib/automation_object/blue_print_validation/screen_validation.rb
224
+ - lib/automation_object/blue_print_validation/validation_object.rb
225
+ - lib/automation_object/driver/anonymous.rb
226
+ - lib/automation_object/driver/driver.rb
227
+ - lib/automation_object/driver/element.rb
228
+ - lib/automation_object/element/element.rb
229
+ - lib/automation_object/element/element_array.rb
230
+ - lib/automation_object/element/element_cell.rb
231
+ - lib/automation_object/element/element_group.rb
232
+ - lib/automation_object/element/element_hash.rb
233
+ - lib/automation_object/element/element_helpers.rb
234
+ - lib/automation_object/element/element_methods.rb
235
+ - lib/automation_object/element/elements_helpers.rb
236
+ - lib/automation_object/framework.rb
237
+ - lib/automation_object/framework/events.rb
238
+ - lib/automation_object/framework/helpers.rb
239
+ - lib/automation_object/framework/print_objects.rb
240
+ - lib/automation_object/framework/screen_monitor.rb
241
+ - lib/automation_object/framework/screen_routing.rb
242
+ - lib/automation_object/framework/window_helpers.rb
243
+ - lib/automation_object/hash.rb
244
+ - lib/automation_object/hook_helpers.rb
245
+ - lib/automation_object/logger.rb
246
+ - lib/automation_object/object.rb
247
+ - lib/automation_object/screen/modal.rb
248
+ - lib/automation_object/screen/screen.rb
249
+ - lib/automation_object/screen/screen_hook_helpers.rb
250
+ - lib/automation_object/screen/screen_modal_helpers.rb
251
+ - lib/automation_object/screen/screen_prompt_helpers.rb
252
+ - lib/automation_object/screen/screen_window_helpers.rb
253
+ - lib/automation_object/version.rb
254
+ homepage: https://github.com/SpartzInc/automation_object
255
+ licenses:
256
+ - MIT
257
+ metadata: {}
258
+ post_install_message:
259
+ rdoc_options: []
260
+ require_paths:
261
+ - lib
262
+ required_ruby_version: !ruby/object:Gem::Requirement
263
+ requirements:
264
+ - - ">="
265
+ - !ruby/object:Gem::Version
266
+ version: '0'
267
+ required_rubygems_version: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ requirements: []
273
+ rubyforge_project:
274
+ rubygems_version: 2.4.2
275
+ signing_key:
276
+ specification_version: 4
277
+ summary: YAML configuration based dynamic DSL framework for UI automation using Selenium
278
+ or Appium drivers.
279
+ test_files: []