automation_object 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/lib/automation_object.rb +22 -11
  3. data/lib/automation_object/blue_print.rb +13 -12
  4. data/lib/automation_object/blue_print/composite/automatic_onload_modal.rb +9 -8
  5. data/lib/automation_object/blue_print/composite/base.rb +5 -4
  6. data/lib/automation_object/blue_print/composite/custom_method.rb +8 -7
  7. data/lib/automation_object/blue_print/composite/element.rb +6 -5
  8. data/lib/automation_object/blue_print/composite/element_array.rb +6 -5
  9. data/lib/automation_object/blue_print/composite/element_hash.rb +7 -6
  10. data/lib/automation_object/blue_print/composite/helpers/element_helper.rb +7 -7
  11. data/lib/automation_object/blue_print/composite/helpers/multiple_elements_helper.rb +5 -4
  12. data/lib/automation_object/blue_print/composite/hook.rb +9 -11
  13. data/lib/automation_object/blue_print/composite/hook_action.rb +25 -24
  14. data/lib/automation_object/blue_print/composite/hook_element_requirements.rb +14 -13
  15. data/lib/automation_object/blue_print/composite/modal.rb +11 -21
  16. data/lib/automation_object/blue_print/composite/screen.rb +22 -16
  17. data/lib/automation_object/blue_print/composite/top.rb +13 -12
  18. data/lib/automation_object/blue_print/composite/view.rb +27 -16
  19. data/lib/automation_object/blue_print/hash_adapter.rb +15 -11
  20. data/lib/automation_object/blue_print/hash_adapter/automatic_onload_modal.rb +12 -11
  21. data/lib/automation_object/blue_print/hash_adapter/composite.rb +28 -25
  22. data/lib/automation_object/blue_print/hash_adapter/custom_method.rb +11 -10
  23. data/lib/automation_object/blue_print/hash_adapter/element.rb +10 -9
  24. data/lib/automation_object/blue_print/hash_adapter/element_array.rb +10 -9
  25. data/lib/automation_object/blue_print/hash_adapter/element_hash.rb +11 -10
  26. data/lib/automation_object/blue_print/hash_adapter/helpers/element_helper.rb +20 -25
  27. data/lib/automation_object/blue_print/hash_adapter/helpers/multiple_elements_helper.rb +15 -14
  28. data/lib/automation_object/blue_print/hash_adapter/helpers/validation_error.rb +9 -8
  29. data/lib/automation_object/blue_print/hash_adapter/helpers/validation_helper.rb +19 -24
  30. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate.rb +8 -5
  31. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_allowed_keys.rb +7 -8
  32. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_element_presence_of.rb +28 -23
  33. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_instance_of.rb +12 -13
  34. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_modal_presence_of.rb +27 -23
  35. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_presence_of.rb +9 -8
  36. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_screen_presence_of.rb +27 -23
  37. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_view_presence_of.rb +25 -21
  38. data/lib/automation_object/blue_print/hash_adapter/hook.rb +14 -11
  39. data/lib/automation_object/blue_print/hash_adapter/hook_action.rb +45 -47
  40. data/lib/automation_object/blue_print/hash_adapter/hook_element_requirements.rb +24 -28
  41. data/lib/automation_object/blue_print/hash_adapter/modal.rb +14 -13
  42. data/lib/automation_object/blue_print/hash_adapter/screen.rb +23 -22
  43. data/lib/automation_object/blue_print/hash_adapter/top.rb +16 -15
  44. data/lib/automation_object/blue_print/hash_adapter/view.rb +58 -4
  45. data/lib/automation_object/blue_print/yaml_adapter.rb +33 -34
  46. data/lib/automation_object/driver.rb +15 -13
  47. data/lib/automation_object/driver/appium_adapter/driver.rb +47 -46
  48. data/lib/automation_object/driver/appium_adapter/element.rb +29 -96
  49. data/lib/automation_object/driver/base.rb +4 -2
  50. data/lib/automation_object/driver/common_selenium/driver.rb +60 -0
  51. data/lib/automation_object/driver/common_selenium/element.rb +107 -0
  52. data/lib/automation_object/driver/common_selenium/element_geometry.rb +86 -0
  53. data/lib/automation_object/driver/driver.rb +60 -30
  54. data/lib/automation_object/driver/element.rb +70 -15
  55. data/lib/automation_object/driver/nokogiri_adapter/driver.rb +88 -34
  56. data/lib/automation_object/driver/nokogiri_adapter/element.rb +94 -16
  57. data/lib/automation_object/driver/nokogiri_adapter/error.rb +29 -8
  58. data/lib/automation_object/driver/nokogiri_adapter/{backup/form.rb → form.rb} +19 -6
  59. data/lib/automation_object/driver/nokogiri_adapter/request.rb +17 -0
  60. data/lib/automation_object/driver/nokogiri_adapter/session.rb +94 -0
  61. data/lib/automation_object/driver/nokogiri_adapter/window.rb +86 -0
  62. data/lib/automation_object/driver/selenium_adapter/driver.rb +36 -45
  63. data/lib/automation_object/driver/selenium_adapter/element.rb +15 -85
  64. data/lib/automation_object/dsl.rb +11 -28
  65. data/lib/automation_object/dsl/_base.rb +70 -0
  66. data/lib/automation_object/dsl/_proxy.rb +24 -0
  67. data/lib/automation_object/dsl/element.rb +34 -0
  68. data/lib/automation_object/dsl/element_array.rb +34 -0
  69. data/lib/automation_object/dsl/element_hash.rb +34 -0
  70. data/lib/automation_object/dsl/modal.rb +43 -0
  71. data/lib/automation_object/dsl/screen.rb +45 -0
  72. data/lib/automation_object/dsl/top.rb +25 -0
  73. data/lib/automation_object/framework.rb +28 -38
  74. data/lib/automation_object/helpers/composite.rb +30 -27
  75. data/lib/automation_object/helpers/composite_hook.rb +16 -15
  76. data/lib/automation_object/{blue_print/helpers/file_helper.rb → helpers/file.rb} +12 -12
  77. data/lib/automation_object/helpers/hash.rb +6 -5
  78. data/lib/automation_object/helpers/kernel.rb +11 -0
  79. data/lib/automation_object/helpers/{reflection_helper.rb → reflection.rb} +9 -8
  80. data/lib/automation_object/helpers/string.rb +25 -15
  81. data/lib/automation_object/{proxies → proxy}/mutex_proxy.rb +18 -21
  82. data/lib/automation_object/proxy/proxy.rb +23 -0
  83. data/lib/automation_object/proxy/throttle_proxy.rb +52 -0
  84. data/lib/automation_object/state.rb +11 -29
  85. data/lib/automation_object/state/{blue_print_adapter/composite.rb → composite/_base.rb} +35 -25
  86. data/lib/automation_object/state/{blue_print_adapter/helpers/element_helper.rb → composite/_common_element.rb} +11 -11
  87. data/lib/automation_object/state/composite/element.rb +22 -0
  88. data/lib/automation_object/state/composite/element_array.rb +27 -0
  89. data/lib/automation_object/state/composite/element_hash.rb +33 -0
  90. data/lib/automation_object/state/composite/element_proxy.rb +33 -0
  91. data/lib/automation_object/state/composite/helpers/window.rb +61 -0
  92. data/lib/automation_object/state/composite/helpers/window_manager.rb +60 -0
  93. data/lib/automation_object/state/composite/hook.rb +56 -0
  94. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_action.rb +10 -8
  95. data/lib/automation_object/state/composite/hook_actions/action_loop.rb +36 -0
  96. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/change_screen.rb +7 -5
  97. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/change_to_previous_screen.rb +7 -5
  98. data/lib/automation_object/state/composite/hook_actions/close_modal.rb +29 -0
  99. data/lib/automation_object/state/composite/hook_actions/close_screen.rb +19 -0
  100. data/lib/automation_object/state/composite/hook_actions/element_requirement.rb +32 -0
  101. data/lib/automation_object/state/composite/hook_actions/new_screen.rb +35 -0
  102. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/possible_screen_changes.rb +8 -7
  103. data/lib/automation_object/state/composite/hook_actions/reset_screen.rb +14 -0
  104. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/show_modal.rb +7 -5
  105. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/sleep.rb +4 -2
  106. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/wait_for_elements.rb +7 -5
  107. data/lib/automation_object/state/composite/modal.rb +45 -0
  108. data/lib/automation_object/state/composite/screen.rb +58 -0
  109. data/lib/automation_object/state/composite/top.rb +51 -0
  110. data/lib/automation_object/state/error.rb +45 -6
  111. data/lib/automation_object/state/session.rb +25 -23
  112. data/lib/automation_object/step_definitions.rb +5 -3
  113. data/lib/automation_object/step_definitions/element.rb +77 -0
  114. data/lib/automation_object/step_definitions/element_array.rb +135 -0
  115. data/lib/automation_object/step_definitions/element_hash.rb +126 -0
  116. data/lib/automation_object/step_definitions/screen.rb +62 -0
  117. data/lib/automation_object/step_definitions/{cache.rb → support/cache.rb} +8 -6
  118. data/lib/automation_object/step_definitions/support/element_array.rb +40 -0
  119. data/lib/automation_object/step_definitions/support/element_hash.rb +41 -0
  120. data/lib/automation_object/step_definitions/{parse.rb → support/parse.rb} +8 -6
  121. data/lib/automation_object/version.rb +2 -1
  122. metadata +203 -103
  123. data/lib/automation_object/driver/helpers/selenium_driver_helper.rb +0 -41
  124. data/lib/automation_object/driver/helpers/selenium_element_helper.rb +0 -138
  125. data/lib/automation_object/driver/nokogiri_adapter/backup/driver.rb +0 -83
  126. data/lib/automation_object/driver/nokogiri_adapter/backup/element.rb +0 -66
  127. data/lib/automation_object/driver/nokogiri_adapter/backup/helpers/driver_element_helper.rb +0 -52
  128. data/lib/automation_object/driver/nokogiri_adapter/backup/session.rb +0 -115
  129. data/lib/automation_object/dsl/blue_print_adapter.rb +0 -16
  130. data/lib/automation_object/dsl/blue_print_adapter/composite.rb +0 -54
  131. data/lib/automation_object/dsl/blue_print_adapter/element.rb +0 -14
  132. data/lib/automation_object/dsl/blue_print_adapter/element_array.rb +0 -14
  133. data/lib/automation_object/dsl/blue_print_adapter/element_hash.rb +0 -14
  134. data/lib/automation_object/dsl/blue_print_adapter/modal.rb +0 -23
  135. data/lib/automation_object/dsl/blue_print_adapter/screen.rb +0 -26
  136. data/lib/automation_object/dsl/blue_print_adapter/top.rb +0 -19
  137. data/lib/automation_object/dsl/models.rb +0 -18
  138. data/lib/automation_object/dsl/proxies/element.rb +0 -16
  139. data/lib/automation_object/dsl/proxies/element_array.rb +0 -16
  140. data/lib/automation_object/dsl/proxies/element_hash.rb +0 -16
  141. data/lib/automation_object/dsl/proxies/helpers/composite_helper.rb +0 -74
  142. data/lib/automation_object/dsl/proxies/modal.rb +0 -17
  143. data/lib/automation_object/dsl/proxies/screen.rb +0 -17
  144. data/lib/automation_object/dsl/proxies/top.rb +0 -17
  145. data/lib/automation_object/proxies/proxy.rb +0 -20
  146. data/lib/automation_object/proxies/throttle_proxy.rb +0 -57
  147. data/lib/automation_object/state/blue_print_adapter.rb +0 -16
  148. data/lib/automation_object/state/blue_print_adapter/element.rb +0 -20
  149. data/lib/automation_object/state/blue_print_adapter/element_array.rb +0 -25
  150. data/lib/automation_object/state/blue_print_adapter/element_hash.rb +0 -31
  151. data/lib/automation_object/state/blue_print_adapter/element_proxy.rb +0 -28
  152. data/lib/automation_object/state/blue_print_adapter/helpers/screen_manager.rb +0 -137
  153. data/lib/automation_object/state/blue_print_adapter/helpers/window.rb +0 -39
  154. data/lib/automation_object/state/blue_print_adapter/hook.rb +0 -56
  155. data/lib/automation_object/state/blue_print_adapter/hook_actions/action_loop.rb +0 -35
  156. data/lib/automation_object/state/blue_print_adapter/hook_actions/close_modal.rb +0 -31
  157. data/lib/automation_object/state/blue_print_adapter/hook_actions/close_screen.rb +0 -19
  158. data/lib/automation_object/state/blue_print_adapter/hook_actions/element_requirement.rb +0 -34
  159. data/lib/automation_object/state/blue_print_adapter/hook_actions/new_screen.rb +0 -37
  160. data/lib/automation_object/state/blue_print_adapter/hook_actions/reset_screen.rb +0 -18
  161. data/lib/automation_object/state/blue_print_adapter/modal.rb +0 -26
  162. data/lib/automation_object/state/blue_print_adapter/screen.rb +0 -32
  163. data/lib/automation_object/state/blue_print_adapter/top.rb +0 -45
  164. data/lib/automation_object/step_definitions/action.rb +0 -21
  165. data/lib/automation_object/step_definitions/element/actions.rb +0 -87
  166. data/lib/automation_object/step_definitions/element/regex.rb +0 -24
  167. data/lib/automation_object/step_definitions/element/steps.rb +0 -67
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'action_loop'
3
+
4
+ module AutomationObject
5
+ module State
6
+ module Composite
7
+ # Reset screen hook loop
8
+ class ResetScreen < ActionLoop
9
+ def single_run
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  require_relative 'action_loop'
2
3
 
3
4
  module AutomationObject
4
5
  module State
5
- module BluePrintAdapter
6
+ module Composite
7
+ # Show modal hook loop
6
8
  class ShowModal < ActionLoop
7
9
  def initialize(args = {})
8
10
  super
@@ -10,11 +12,11 @@ module AutomationObject
10
12
  end
11
13
 
12
14
  def single_run
13
- new_modal = self.composite.screen.modals[@new_modal_name]
15
+ new_modal = composite.screen.modals[@new_modal_name]
14
16
 
15
17
  if new_modal.load.live? != false
16
- self.composite.screen.current_modal = @new_modal_name
17
- self.composite.screen.modal = new_modal
18
+ composite.screen.current_modal = @new_modal_name
19
+ composite.screen.modal = new_modal
18
20
  return true
19
21
  else
20
22
  return false
@@ -23,4 +25,4 @@ module AutomationObject
23
25
  end
24
26
  end
25
27
  end
26
- end
28
+ end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  require_relative 'action_loop'
2
3
 
3
4
  module AutomationObject
4
5
  module State
5
- module BluePrintAdapter
6
+ module Composite
7
+ # Sleep hook loop
6
8
  class Sleep < ActionLoop
7
9
  def initialize(args = {})
8
10
  super
@@ -15,4 +17,4 @@ module AutomationObject
15
17
  end
16
18
  end
17
19
  end
18
- end
20
+ end
@@ -1,20 +1,22 @@
1
+ # frozen_string_literal: true
1
2
  require_relative 'action_loop'
2
3
 
3
4
  module AutomationObject
4
5
  module State
5
- module BluePrintAdapter
6
+ module Composite
7
+ # Wait for elements hook loop
6
8
  class WaitForElements < ActionLoop
7
9
  def single_run
8
- self.blue_prints.each { |hook_element_requirement|
10
+ blue_prints.each do |hook_element_requirement|
9
11
  hook_element_requirement = ElementRequirement.new(blue_prints: hook_element_requirement,
10
12
  composite: self,
11
13
  loops: 1)
12
14
  return false unless hook_element_requirement.run
13
- }
15
+ end
14
16
 
15
- return true
17
+ true
16
18
  end
17
19
  end
18
20
  end
19
21
  end
20
- end
22
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+ require_relative '_base'
3
+ require_relative '../error'
4
+
5
+ require_relative 'element'
6
+ require_relative 'element_array'
7
+ require_relative 'element_hash'
8
+
9
+ module AutomationObject
10
+ module State
11
+ module Composite
12
+ # Modal composite for managing state
13
+ class Modal < Base
14
+ has_one :load, interface: Hook
15
+
16
+ has_many :elements, interface: Element
17
+ has_many :element_arrays, interface: ElementArray
18
+ has_many :element_hashes, interface: ElementHash
19
+
20
+ def get(type, name)
21
+ case type
22
+ when :element
23
+ elements[name].load
24
+ when :element_array
25
+ element_arrays[name].load
26
+ when :element_hash
27
+ element_hashes[name].load
28
+ else
29
+ raise AutomationObject::State::UndefinedLoadTypeError
30
+ end
31
+ end
32
+
33
+ # Whether or not modal is active
34
+ # @return [Boolean]
35
+ attr_accessor :active
36
+
37
+ undef :active if defined? :active
38
+ # @return [Boolean] screen is active or not
39
+ def active
40
+ @active ||= false
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+ require_relative '_base'
3
+ require_relative '../error'
4
+
5
+ require_relative 'modal'
6
+ require_relative 'hook'
7
+ require_relative 'element'
8
+ require_relative 'element_array'
9
+ require_relative 'element_hash'
10
+
11
+ module AutomationObject
12
+ module State
13
+ module Composite
14
+ # Screen composite for managing state
15
+ class Screen < Base
16
+ attr_accessor :modal
17
+
18
+ has_one :load, interface: Hook
19
+
20
+ # Children for this composite
21
+ has_many :modals, interface: Modal
22
+
23
+ has_many :elements, interface: Element
24
+ has_many :element_arrays, interface: ElementArray
25
+ has_many :element_hashes, interface: ElementHash
26
+
27
+ def use(name)
28
+ self.modal = name
29
+ end
30
+
31
+ def get(type, name)
32
+ return modals[modal].get(type, name) if modal
33
+
34
+ case type
35
+ when :element
36
+ return elements[name].load
37
+ when :element_array
38
+ return element_arrays[name].load
39
+ when :element_hash
40
+ return element_hashes[name].load
41
+ else
42
+ raise AutomationObject::State::UndefinedLoadTypeError
43
+ end
44
+ end
45
+
46
+ # Whether or not modal is active
47
+ # @return [Boolean]
48
+ attr_accessor :active
49
+
50
+ undef :active if defined? :active
51
+ # @return [Boolean] screen is active or not
52
+ def active
53
+ @active ||= false
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+ require_relative '../error'
3
+
4
+ require_relative '_base'
5
+ require_relative 'screen'
6
+
7
+ require_relative 'helpers/window_manager'
8
+
9
+ module AutomationObject
10
+ module State
11
+ module Composite
12
+ # Top composite for managing state
13
+ class Top < Base
14
+ include WindowManager
15
+
16
+ # Children for this composite
17
+ has_many :screens, interface: Screen
18
+
19
+ def initialize(*args)
20
+ super(*args)
21
+
22
+ driver.get(blue_prints.base_url) if blue_prints.base_url
23
+ new_window(initial_screen)
24
+ end
25
+
26
+ def current_screen
27
+ screens[window.name]
28
+ end
29
+
30
+ # Get the initial screen
31
+ # @raise [AutomationObject::State::NoInitialScreenError] if no initial screen
32
+ # @return [Symbol] screen name
33
+ def initial_screen
34
+ # If default screen then check if its live and set it
35
+ if blue_prints.default_screen
36
+ default_name = blue_prints.default_screen
37
+ return default_name if screens[default_name].load.live? != false
38
+
39
+ raise AutomationObject::State::NoInitialScreenError
40
+ end
41
+
42
+ screens.each do |screen_name, screen|
43
+ return screen_name if screen.load.live?
44
+ end
45
+
46
+ raise AutomationObject::State::NoInitialScreenError
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,14 +1,39 @@
1
+ # frozen_string_literal: true
1
2
  module AutomationObject
2
3
  module State
3
- class UndefinedLoadTypeError < StandardError;
4
+ # Cannot navigate back error
5
+ class CannotNavigateBack < StandardError
6
+ def initialize(message = 'Cannot navigate backwards in history')
7
+ super
8
+ end
9
+ end
10
+
11
+ # Cannot navigate forward error
12
+ class CannotNavigateForward < StandardError
13
+ def initialize(message = 'Cannot navigate forwards in history')
14
+ super
15
+ end
4
16
  end
5
17
 
18
+ # More than one expected new windows
19
+ class UnexpectedExtraWindowError < StandardError
20
+ def initialize(message = 'Expecting only 1 extra window')
21
+ super
22
+ end
23
+ end
24
+
25
+ # Undefined load type called on the State object
26
+ class UndefinedLoadTypeError < StandardError
27
+ end
28
+
29
+ # No initial screen to start from
6
30
  class NoInitialScreenError < StandardError
7
31
  def initialize(message = 'No initial screen to be set to')
8
32
  super
9
33
  end
10
34
  end
11
35
 
36
+ # Screen is not currently active
12
37
  class ScreenNotActiveError < StandardError
13
38
  def initialize(screen)
14
39
  message = "#{screen} is not currently active"
@@ -16,9 +41,23 @@ module AutomationObject
16
41
  end
17
42
  end
18
43
 
19
- class ModalNotActiveError < StandardError; end
20
- class ModalParentExpected < StandardError; end
21
- class ScreenParentExpected < StandardError; end
22
- class MoreThenOneScreenCreated < StandardError; end
44
+ # Modal isn't active error
45
+ class ModalNotActiveError < StandardError
46
+ end
47
+
48
+ # Modal parent error
49
+ class ModalParentExpected < StandardError
50
+ end
51
+
52
+ # Screen parent error
53
+ class ScreenParentExpected < StandardError
54
+ end
55
+
56
+ # More than one screen created error
57
+ class MoreThenOneScreenCreated < StandardError
58
+ end
59
+
60
+ class NoActiveWindows < StandardError
61
+ end
23
62
  end
24
- end
63
+ end
@@ -1,38 +1,40 @@
1
+ # frozen_string_literal: true
1
2
  require_relative 'error'
2
3
 
4
+ require_relative 'composite/top'
5
+
3
6
  module AutomationObject
4
7
  module State
5
- #Store session details, methods for controlling viewing current driver session.
8
+ # Session manages the DSL state
6
9
  class Session
7
- attr_accessor :driver, :composite
10
+ # @return [AutomationObject::Driver::Driver]
11
+ attr_accessor :driver
12
+
13
+ # @return [AutomationObject::BluePrint::Composite::Top]
14
+ attr_accessor :blue_prints
8
15
 
9
- def initialize(args={})
10
- self.driver = args.fetch :driver
11
- self.composite = args.fetch :composite
16
+ # @return [AutomationObject::State::Composite::Top]
17
+ attr_accessor :composite
12
18
 
13
- self.composite.create
19
+ # @param [AutomationObject::Driver::Driver] driver
20
+ # @param [AutomationObject::BluePrint::Composite::Top] blue_prints
21
+ def initialize(driver, blue_prints)
22
+ self.driver = driver
23
+ self.composite = Composite::Top.new(self, driver, blue_prints)
14
24
  end
15
25
 
16
26
  def load(type, name)
17
27
  case type
18
- when :screen
19
- unless self.composite.screen_exists?(name)
20
- raise AutomationObject::State::ScreenNotActiveError.new(name)
21
- end
22
-
23
- self.composite.use_screen(name)
24
- when :modal
25
- unless self.composite.screens[self.composite.current_screen].current_modal == name
26
- raise AutomationObject::State::ModalNotActiveError.new(name)
27
- end
28
-
29
- self.composite.use_modal(name)
30
- when :element, :element_array, :element_hash
31
- return self.composite.get_object(type, name)
32
- else
33
- raise AutomationObject::State::UndefinedLoadTypeError.new
28
+ when :screen
29
+ composite.use(name)
30
+ when :modal
31
+ composite.current_screen.use(name)
32
+ when :element, :element_array, :element_hash
33
+ return composite.current_screen.get(type, name)
34
+ else
35
+ raise AutomationObject::State::UndefinedLoadTypeError
34
36
  end
35
37
  end
36
38
  end
37
39
  end
38
- end
40
+ end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  module AutomationObject
2
- #Require step definitons at run-time, only when running in a Cucumber context
3
+ # Require step definitons at run-time, only when running in a Cucumber context
3
4
  module StepDefinitions
4
- extend self
5
+ module_function
5
6
 
6
7
  def load
8
+ # Using minitest to run assertions
7
9
  require 'minitest/autorun'
8
10
  require 'minitest/unit'
9
11
  require 'minitest-bonus-assertions'
@@ -11,4 +13,4 @@ module AutomationObject
11
13
  Dir[File.dirname(__FILE__) + '/step_definitions/**/*.rb'].each { |file| require file }
12
14
  end
13
15
  end
14
- end
16
+ end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'support/parse'
3
+
4
+ # Description: Provides step definitions related to elements
5
+
6
+ # For: Calling an element method
7
+ # Examples:
8
+ # - I click on the "home_screen" "about_button" element
9
+ # - I hover over the "home_screen" "test_link" element
10
+ # - I tap on "home_screen" "logo_button" element
11
+ When(/^I (\w+|%\{[\w\d]+\}) ?(?: on| over)? (?:the )?"(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element$/) do |*args|
12
+ method, screen, element = AutomationObject::StepDefinitions::Parse.new(args).get
13
+ AutomationObject::Framework.get.send(screen).send(element).send(method)
14
+ end
15
+
16
+ # For: Typing into element field
17
+ # Examples:
18
+ # - I type "blah" into the "home_screen" "text_field" element
19
+ # - I type "test" in the "home_screen" "text_field" element
20
+ # - I type "blah" in "home_screen" "text_field" element
21
+ When(/^I type "([\w\s]+|%\{[\w\d]+\})" in(?:to)? (?:the )?"(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element$/) do |*args|
22
+ text, screen, element = AutomationObject::StepDefinitions::Parse.new(args).get
23
+ AutomationObject::Framework.get.send(screen).send(element).send_keys(text)
24
+ end
25
+
26
+ # For: Scrolling element into focus
27
+ # Examples:
28
+ # - I scroll to the "home_screen" "logo_button" element
29
+ # - I focus to the "home_screen" "logo_button" element
30
+ # - I scroll to "home_screen" "logo_button" element
31
+ When(/^I (?:scroll |focus )to (?:the )?"(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element$/) do |*args|
32
+ screen, element = AutomationObject::StepDefinitions::Parse.new(args).get
33
+ AutomationObject::Framework.get.send(screen).send(element).scroll_into_view
34
+ end
35
+
36
+ # For: Saving value from element for use later
37
+ # Examples:
38
+ # - I save "text" as "unique_value" from the "home_screen" "logo_button" element
39
+ # - I save "id" as "unique_value" from "home_screen" "logo_button" element
40
+ When(/^I save "(\w+|%\{[\w\d]+\})" as "([\w\d]+)" from (?:the )?"(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element$/) do |*args|
41
+ method, key, screen, element = AutomationObject::StepDefinitions::Parse.new(args).get
42
+ # Save value from called method/property
43
+ value = AutomationObject::Framework.get.send(screen).send(element).send(method)
44
+ AutomationObject::StepDefinitions::Cache.set(key, value)
45
+ end
46
+
47
+ # For: Testing if the element exists or not
48
+ # Examples:
49
+ # - the "home_screen" "title" element should exist
50
+ # - the "home_screen" "title" element shouldn't exist
51
+ # - "home_screen" "title" element should not exist
52
+ Then(/^(?:the )?"(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element should ?(n't |not )?exist$/) do |*args|
53
+ screen, element, negative = AutomationObject::StepDefinitions::Parse.new(args).get
54
+
55
+ exists = AutomationObject::Framework.get.send(screen).send(element).exists?
56
+ if negative
57
+ assert_equal false, exists
58
+ else
59
+ assert_equal true, exists
60
+ end
61
+ end
62
+
63
+ # For: Testing if the element method value equals a given value
64
+ # Examples:
65
+ # - the "home_screen" "title" element "text" should equal "Home"
66
+ # - "home_screen" "title" element "text" should not equal "About"
67
+ # - the "home_screen" "title" element "text" shouldn't equal "%{saved_value}"
68
+ Then(/^(?:the )?"(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element "(\w+|%\{[\w\d]+\})" should ?(n't |not )?equal "(\w+|%\{[\w\d]+\})"$/) do |*args|
69
+ screen, element, method, negative, expected_value = AutomationObject::StepDefinitions::Parse.new(args).get
70
+
71
+ actual_value = AutomationObject::Framework.get.send(screen).send(element).send(method)
72
+ if negative
73
+ refute_equal expected_value, actual_value
74
+ else
75
+ assert_equal expected_value, actual_value
76
+ end
77
+ end