automation_object 0.5.0 → 0.5.1

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 (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,61 @@
1
+ # frozen_string_literal: true
2
+ require_relative '../../error'
3
+
4
+ module AutomationObject
5
+ module State
6
+ module Composite
7
+ # Window class
8
+ class Window
9
+ # @param [AutomationObject::Driver::Driver] driver
10
+ # @param [String] handle
11
+ # @param [Symbol] screen
12
+ def initialize(driver, handle, screen)
13
+ @driver = driver
14
+ @handle = handle
15
+
16
+ # Use to control history
17
+ @position = 0
18
+ @history = [screen]
19
+ end
20
+
21
+ # @return [Symbol] current screen
22
+ def name
23
+ @history[@position]
24
+ end
25
+
26
+ # @return [void]
27
+ def use
28
+ return if @driver.window_handle == @handle
29
+ @driver.window_handle = @handle
30
+ end
31
+
32
+ # @return [void]
33
+ def back
34
+ raise CannotNavigateBack if @position.zero?
35
+
36
+ @driver.back
37
+ @position -= 1
38
+ end
39
+
40
+ # @return [void]
41
+ def forward
42
+ raise CannotNavigateForward if @position >= @history.length
43
+
44
+ @driver.forward
45
+ @position += 1
46
+ end
47
+
48
+ # @return [Boolean]
49
+ def closed?
50
+ !@driver.window_handles.include?(window_handle)
51
+ end
52
+
53
+ # Close the window
54
+ # @return [void]
55
+ def close
56
+ @driver.close
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'window'
3
+ require_relative '../../error'
4
+
5
+ module AutomationObject
6
+ module State
7
+ module Composite
8
+ # Collection to manage Window objects
9
+ module WindowManager
10
+ attr_accessor :window
11
+
12
+ # @param name [Symbol] name of window to use
13
+ # @return [void]
14
+ def use(name)
15
+ raise AutomationObject::State::ScreenNotActiveError, name unless live_screens.include?(name)
16
+
17
+ windows.each do |window|
18
+ next if window.name != name
19
+ return if window == self.window
20
+
21
+ self.window = window
22
+ self.window.use
23
+ end
24
+ end
25
+
26
+ def window
27
+ raise AutomationObject::State::Error::NoActiveWindows unless @window
28
+ @window
29
+ end
30
+
31
+ # @return [Array<Window>]
32
+ def windows
33
+ @windows ||= []
34
+ end
35
+
36
+ # @return [Array<String>] list of stored window handles
37
+ def window_handles
38
+ windows.map(&:handle)
39
+ end
40
+
41
+ # @return [Array<String>] list of stored screen names
42
+ def live_screens
43
+ windows.map(&:name)
44
+ end
45
+
46
+ # @return [void]
47
+ def new_window(name)
48
+ driver_handles = driver.window_handles
49
+ diff_handles = driver_handles - window_handles
50
+
51
+ # Should only have one extra window
52
+ raise UnexpectedExtraWindowError if diff_handles.length > 1
53
+
54
+ self.window = Window.new(driver, diff_handles.first, name)
55
+ windows << window
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+ require_relative '_base'
3
+
4
+ require_relative 'hook_action'
5
+ require_relative 'hook_actions/element_requirement'
6
+
7
+ module AutomationObject
8
+ module State
9
+ module Composite
10
+ # Hook composite for managing state
11
+ class Hook < Base
12
+ # @return [Boolean, nil] return nil if no live? check, otherwise boolean
13
+ def live?
14
+ before
15
+
16
+ return nil if blue_prints.live?.empty?
17
+
18
+ blue_prints.live?.each do |element_requirement_blueprints|
19
+ hook_element_requirement = ElementRequirement.new(element_requirement_blueprints,
20
+ driver, self, 1)
21
+ return false unless hook_element_requirement.run
22
+ end
23
+
24
+ after
25
+
26
+ true
27
+ end
28
+
29
+ # Runs the before hook
30
+ # @return [Boolean, nil] return nil unless there is a hook, otherwise boolean depending on success of hook
31
+ def before
32
+ return nil if blue_prints.before.empty?
33
+
34
+ hook_action = HookAction.new(session,
35
+ driver,
36
+ blue_prints.before,
37
+ :hook_action, self, location + '[hook_action]')
38
+
39
+ hook_action.run
40
+ end
41
+
42
+ # Runs the after hook
43
+ # @return [Boolean, nil] return nil unless there is a hook, otherwise boolean depending on success of hook
44
+ def after
45
+ return nil if blue_prints.after.empty?
46
+
47
+ hook_action = HookAction.new(session,
48
+ driver,
49
+ blue_prints.after,
50
+ :hook_action, self, location + '[hook_action]')
51
+ hook_action.run
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,4 +1,5 @@
1
- require_relative 'composite'
1
+ # frozen_string_literal: true
2
+ require_relative '_base'
2
3
 
3
4
  require_relative 'hook_actions/change_screen'
4
5
  require_relative 'hook_actions/change_to_previous_screen'
@@ -13,21 +14,22 @@ require_relative 'hook_actions/new_screen'
13
14
 
14
15
  module AutomationObject
15
16
  module State
16
- module BluePrintAdapter
17
- class HookAction < AutomationObject::State::BluePrintAdapter::Composite
17
+ module Composite
18
+ # Hook action composite for managing state
19
+ class HookAction < Base
18
20
  # @return [Boolean] run success or not
19
21
  def run
20
- self.blue_prints.hook_order.each { |hook_name|
21
- hook_action_class = AutomationObject::State::BluePrintAdapter.const_get(hook_name.to_s.pascalize)
22
+ blue_prints.hook_order.each do |hook_name|
23
+ hook_action_class = AutomationObject::State::Composite.const_get(hook_name.to_s.pascalize)
22
24
  blue_prints = self.blue_prints.send(hook_name)
23
25
 
24
26
  hook_action = hook_action_class.new(blue_prints: blue_prints, composite: self)
25
27
  return false if hook_action.run == false
26
- }
28
+ end
27
29
 
28
- return true
30
+ true
29
31
  end
30
32
  end
31
33
  end
32
34
  end
33
- end
35
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+ module AutomationObject
3
+ module State
4
+ module Composite
5
+ # Composite action loop base class
6
+ class ActionLoop
7
+ attr_accessor :composite, :blue_prints, :loops
8
+
9
+ def initialize(blue_prints, driver, composite, loops = 30)
10
+ self.blue_prints = blue_prints
11
+ self.driver = driver
12
+ self.composite = composite
13
+ self.loops = loops
14
+ end
15
+
16
+ def driver
17
+ composite.driver
18
+ end
19
+
20
+ # @return [Boolean] run success or not
21
+ def run
22
+ loops.times do
23
+ return true if single_run
24
+ end
25
+
26
+ false
27
+ end
28
+
29
+ # @return [Boolean] success or not
30
+ def single_run
31
+ raise 'Abstract Issue'
32
+ end
33
+ end
34
+ end
35
+ end
36
+ 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
+ # Change screen hook loop
6
8
  class ChangeScreen < 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
- self.driver.document_complete_wait
15
+ return false unless driver.document_complete?
14
16
 
15
- new_screen = self.composite.top.screens[@new_screen_name]
17
+ new_screen = composite.top.screens[@new_screen_name]
16
18
  if new_screen.load.live?
17
- self.composite.top.set_screen(@new_screen_name)
19
+ composite.top.set_screen(@new_screen_name)
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,15 +1,17 @@
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
+ # Change to previous screen hook loop
6
8
  class ChangeToPreviousScreen < ActionLoop
7
9
  def single_run
8
- self.driver.document_complete_wait
10
+ return false unless driver.document_complete?
9
11
 
10
- new_screen = self.composite.top.current_window.previous_screen_name
12
+ new_screen = composite.top.current_window.previous_screen_name
11
13
  if new_screen.load.live?
12
- self.composite.top.set_screen(new_screen)
14
+ composite.top.set_screen(new_screen)
13
15
  return true
14
16
  else
15
17
  return false
@@ -18,4 +20,4 @@ module AutomationObject
18
20
  end
19
21
  end
20
22
  end
21
- end
23
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'action_loop'
3
+ require_relative '../../error'
4
+
5
+ module AutomationObject
6
+ module State
7
+ module Composite
8
+ # Close modal hook loop
9
+ class CloseModal < ActionLoop
10
+ def single_run
11
+ return false unless driver.document_complete?
12
+
13
+ raise ModalParentExpected unless composite.parent.is_a?(Modal)
14
+
15
+ modal = composite.parent
16
+ modal.active = modal.live?
17
+
18
+ return false unless modal.active?
19
+
20
+ composite.screen.modal = nil
21
+ composite.screen.current_modal = nil
22
+ composite.top.destroy_modal
23
+
24
+ true
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'action_loop'
3
+ require_relative '../../error'
4
+
5
+ module AutomationObject
6
+ module State
7
+ module Composite
8
+ # Close screen hook loop
9
+ class CloseScreen < ActionLoop
10
+ def single_run
11
+ raise ScreenParentExpected unless composite.screen
12
+
13
+ screen_name = composite.screen.name
14
+ composite.top.window_closed?(screen_name)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'action_loop'
3
+
4
+ module AutomationObject
5
+ module State
6
+ module Composite
7
+ # Element requirement hook loop
8
+ class ElementRequirement < ActionLoop
9
+ def element
10
+ @element ||= driver.find_element(*blue_prints.element_blueprints.selector_params)
11
+ end
12
+
13
+ def single_run
14
+ blue_prints.hook_order.each do |requirement_name|
15
+ next if blue_prints.requirement(requirement_name).nil?
16
+
17
+ requirement_value = blue_prints.requirement(requirement_name)
18
+
19
+ case requirement_name
20
+ when :exists?
21
+ return false if requirement_value != driver.exists?(*blue_prints.element_blueprints.selector_params)
22
+ else
23
+ return false if requirement_value != element.send(requirement_name)
24
+ end
25
+ end
26
+
27
+ true
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'action_loop'
3
+ require_relative '../../error'
4
+
5
+ module AutomationObject
6
+ module State
7
+ module Composite
8
+ # New screen hook loop
9
+ class NewScreen < ActionLoop
10
+ def initialize(args = {})
11
+ super
12
+ end
13
+
14
+ def single_run
15
+ new_screen_name = blue_prints
16
+ new_screen = composite.top.screens[new_screen_name]
17
+
18
+ stored_window_handles = composite.top.window_handles
19
+ driver_handles = driver.window_handles
20
+
21
+ return false if driver_handles.length <= stored_window_handles.length
22
+
23
+ raise MoreThenOneScreenCreated if (driver_handles.length - stored_window_handles.length) > 1
24
+
25
+ composite.top.create_screen(new_screen_name)
26
+ composite.top.use_screen(new_screen_name)
27
+
28
+ return false unless driver.document_complete?
29
+
30
+ new_screen.load.live?
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,21 +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
+ # Possible screen changes hook loop
6
8
  class PossibleScreenChanges < ActionLoop
7
9
  def single_run
8
- self.blue_prints.each { |possible_screen_name|
9
- new_screen = self.composite.top.screens[possible_screen_name]
10
+ blue_prints.each do |possible_screen_name|
10
11
  if possible_screen_name.load.live?
11
- self.composite.top.set_screen(possible_screen_name)
12
+ composite.top.set_screen(possible_screen_name)
12
13
  return true
13
14
  end
14
- }
15
+ end
15
16
 
16
- return false
17
+ false
17
18
  end
18
19
  end
19
20
  end
20
21
  end
21
- end
22
+ end