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.
- checksums.yaml +4 -4
- data/lib/automation_object.rb +22 -11
- data/lib/automation_object/blue_print.rb +13 -12
- data/lib/automation_object/blue_print/composite/automatic_onload_modal.rb +9 -8
- data/lib/automation_object/blue_print/composite/base.rb +5 -4
- data/lib/automation_object/blue_print/composite/custom_method.rb +8 -7
- data/lib/automation_object/blue_print/composite/element.rb +6 -5
- data/lib/automation_object/blue_print/composite/element_array.rb +6 -5
- data/lib/automation_object/blue_print/composite/element_hash.rb +7 -6
- data/lib/automation_object/blue_print/composite/helpers/element_helper.rb +7 -7
- data/lib/automation_object/blue_print/composite/helpers/multiple_elements_helper.rb +5 -4
- data/lib/automation_object/blue_print/composite/hook.rb +9 -11
- data/lib/automation_object/blue_print/composite/hook_action.rb +25 -24
- data/lib/automation_object/blue_print/composite/hook_element_requirements.rb +14 -13
- data/lib/automation_object/blue_print/composite/modal.rb +11 -21
- data/lib/automation_object/blue_print/composite/screen.rb +22 -16
- data/lib/automation_object/blue_print/composite/top.rb +13 -12
- data/lib/automation_object/blue_print/composite/view.rb +27 -16
- data/lib/automation_object/blue_print/hash_adapter.rb +15 -11
- data/lib/automation_object/blue_print/hash_adapter/automatic_onload_modal.rb +12 -11
- data/lib/automation_object/blue_print/hash_adapter/composite.rb +28 -25
- data/lib/automation_object/blue_print/hash_adapter/custom_method.rb +11 -10
- data/lib/automation_object/blue_print/hash_adapter/element.rb +10 -9
- data/lib/automation_object/blue_print/hash_adapter/element_array.rb +10 -9
- data/lib/automation_object/blue_print/hash_adapter/element_hash.rb +11 -10
- data/lib/automation_object/blue_print/hash_adapter/helpers/element_helper.rb +20 -25
- data/lib/automation_object/blue_print/hash_adapter/helpers/multiple_elements_helper.rb +15 -14
- data/lib/automation_object/blue_print/hash_adapter/helpers/validation_error.rb +9 -8
- data/lib/automation_object/blue_print/hash_adapter/helpers/validation_helper.rb +19 -24
- data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate.rb +8 -5
- data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_allowed_keys.rb +7 -8
- data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_element_presence_of.rb +28 -23
- data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_instance_of.rb +12 -13
- data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_modal_presence_of.rb +27 -23
- data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_presence_of.rb +9 -8
- data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_screen_presence_of.rb +27 -23
- data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_view_presence_of.rb +25 -21
- data/lib/automation_object/blue_print/hash_adapter/hook.rb +14 -11
- data/lib/automation_object/blue_print/hash_adapter/hook_action.rb +45 -47
- data/lib/automation_object/blue_print/hash_adapter/hook_element_requirements.rb +24 -28
- data/lib/automation_object/blue_print/hash_adapter/modal.rb +14 -13
- data/lib/automation_object/blue_print/hash_adapter/screen.rb +23 -22
- data/lib/automation_object/blue_print/hash_adapter/top.rb +16 -15
- data/lib/automation_object/blue_print/hash_adapter/view.rb +58 -4
- data/lib/automation_object/blue_print/yaml_adapter.rb +33 -34
- data/lib/automation_object/driver.rb +15 -13
- data/lib/automation_object/driver/appium_adapter/driver.rb +47 -46
- data/lib/automation_object/driver/appium_adapter/element.rb +29 -96
- data/lib/automation_object/driver/base.rb +4 -2
- data/lib/automation_object/driver/common_selenium/driver.rb +60 -0
- data/lib/automation_object/driver/common_selenium/element.rb +107 -0
- data/lib/automation_object/driver/common_selenium/element_geometry.rb +86 -0
- data/lib/automation_object/driver/driver.rb +60 -30
- data/lib/automation_object/driver/element.rb +70 -15
- data/lib/automation_object/driver/nokogiri_adapter/driver.rb +88 -34
- data/lib/automation_object/driver/nokogiri_adapter/element.rb +94 -16
- data/lib/automation_object/driver/nokogiri_adapter/error.rb +29 -8
- data/lib/automation_object/driver/nokogiri_adapter/{backup/form.rb → form.rb} +19 -6
- data/lib/automation_object/driver/nokogiri_adapter/request.rb +17 -0
- data/lib/automation_object/driver/nokogiri_adapter/session.rb +94 -0
- data/lib/automation_object/driver/nokogiri_adapter/window.rb +86 -0
- data/lib/automation_object/driver/selenium_adapter/driver.rb +36 -45
- data/lib/automation_object/driver/selenium_adapter/element.rb +15 -85
- data/lib/automation_object/dsl.rb +11 -28
- data/lib/automation_object/dsl/_base.rb +70 -0
- data/lib/automation_object/dsl/_proxy.rb +24 -0
- data/lib/automation_object/dsl/element.rb +34 -0
- data/lib/automation_object/dsl/element_array.rb +34 -0
- data/lib/automation_object/dsl/element_hash.rb +34 -0
- data/lib/automation_object/dsl/modal.rb +43 -0
- data/lib/automation_object/dsl/screen.rb +45 -0
- data/lib/automation_object/dsl/top.rb +25 -0
- data/lib/automation_object/framework.rb +28 -38
- data/lib/automation_object/helpers/composite.rb +30 -27
- data/lib/automation_object/helpers/composite_hook.rb +16 -15
- data/lib/automation_object/{blue_print/helpers/file_helper.rb → helpers/file.rb} +12 -12
- data/lib/automation_object/helpers/hash.rb +6 -5
- data/lib/automation_object/helpers/kernel.rb +11 -0
- data/lib/automation_object/helpers/{reflection_helper.rb → reflection.rb} +9 -8
- data/lib/automation_object/helpers/string.rb +25 -15
- data/lib/automation_object/{proxies → proxy}/mutex_proxy.rb +18 -21
- data/lib/automation_object/proxy/proxy.rb +23 -0
- data/lib/automation_object/proxy/throttle_proxy.rb +52 -0
- data/lib/automation_object/state.rb +11 -29
- data/lib/automation_object/state/{blue_print_adapter/composite.rb → composite/_base.rb} +35 -25
- data/lib/automation_object/state/{blue_print_adapter/helpers/element_helper.rb → composite/_common_element.rb} +11 -11
- data/lib/automation_object/state/composite/element.rb +22 -0
- data/lib/automation_object/state/composite/element_array.rb +27 -0
- data/lib/automation_object/state/composite/element_hash.rb +33 -0
- data/lib/automation_object/state/composite/element_proxy.rb +33 -0
- data/lib/automation_object/state/composite/helpers/window.rb +61 -0
- data/lib/automation_object/state/composite/helpers/window_manager.rb +60 -0
- data/lib/automation_object/state/composite/hook.rb +56 -0
- data/lib/automation_object/state/{blue_print_adapter → composite}/hook_action.rb +10 -8
- data/lib/automation_object/state/composite/hook_actions/action_loop.rb +36 -0
- data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/change_screen.rb +7 -5
- data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/change_to_previous_screen.rb +7 -5
- data/lib/automation_object/state/composite/hook_actions/close_modal.rb +29 -0
- data/lib/automation_object/state/composite/hook_actions/close_screen.rb +19 -0
- data/lib/automation_object/state/composite/hook_actions/element_requirement.rb +32 -0
- data/lib/automation_object/state/composite/hook_actions/new_screen.rb +35 -0
- data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/possible_screen_changes.rb +8 -7
- data/lib/automation_object/state/composite/hook_actions/reset_screen.rb +14 -0
- data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/show_modal.rb +7 -5
- data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/sleep.rb +4 -2
- data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/wait_for_elements.rb +7 -5
- data/lib/automation_object/state/composite/modal.rb +45 -0
- data/lib/automation_object/state/composite/screen.rb +58 -0
- data/lib/automation_object/state/composite/top.rb +51 -0
- data/lib/automation_object/state/error.rb +45 -6
- data/lib/automation_object/state/session.rb +25 -23
- data/lib/automation_object/step_definitions.rb +5 -3
- data/lib/automation_object/step_definitions/element.rb +77 -0
- data/lib/automation_object/step_definitions/element_array.rb +135 -0
- data/lib/automation_object/step_definitions/element_hash.rb +126 -0
- data/lib/automation_object/step_definitions/screen.rb +62 -0
- data/lib/automation_object/step_definitions/{cache.rb → support/cache.rb} +8 -6
- data/lib/automation_object/step_definitions/support/element_array.rb +40 -0
- data/lib/automation_object/step_definitions/support/element_hash.rb +41 -0
- data/lib/automation_object/step_definitions/{parse.rb → support/parse.rb} +8 -6
- data/lib/automation_object/version.rb +2 -1
- metadata +203 -103
- data/lib/automation_object/driver/helpers/selenium_driver_helper.rb +0 -41
- data/lib/automation_object/driver/helpers/selenium_element_helper.rb +0 -138
- data/lib/automation_object/driver/nokogiri_adapter/backup/driver.rb +0 -83
- data/lib/automation_object/driver/nokogiri_adapter/backup/element.rb +0 -66
- data/lib/automation_object/driver/nokogiri_adapter/backup/helpers/driver_element_helper.rb +0 -52
- data/lib/automation_object/driver/nokogiri_adapter/backup/session.rb +0 -115
- data/lib/automation_object/dsl/blue_print_adapter.rb +0 -16
- data/lib/automation_object/dsl/blue_print_adapter/composite.rb +0 -54
- data/lib/automation_object/dsl/blue_print_adapter/element.rb +0 -14
- data/lib/automation_object/dsl/blue_print_adapter/element_array.rb +0 -14
- data/lib/automation_object/dsl/blue_print_adapter/element_hash.rb +0 -14
- data/lib/automation_object/dsl/blue_print_adapter/modal.rb +0 -23
- data/lib/automation_object/dsl/blue_print_adapter/screen.rb +0 -26
- data/lib/automation_object/dsl/blue_print_adapter/top.rb +0 -19
- data/lib/automation_object/dsl/models.rb +0 -18
- data/lib/automation_object/dsl/proxies/element.rb +0 -16
- data/lib/automation_object/dsl/proxies/element_array.rb +0 -16
- data/lib/automation_object/dsl/proxies/element_hash.rb +0 -16
- data/lib/automation_object/dsl/proxies/helpers/composite_helper.rb +0 -74
- data/lib/automation_object/dsl/proxies/modal.rb +0 -17
- data/lib/automation_object/dsl/proxies/screen.rb +0 -17
- data/lib/automation_object/dsl/proxies/top.rb +0 -17
- data/lib/automation_object/proxies/proxy.rb +0 -20
- data/lib/automation_object/proxies/throttle_proxy.rb +0 -57
- data/lib/automation_object/state/blue_print_adapter.rb +0 -16
- data/lib/automation_object/state/blue_print_adapter/element.rb +0 -20
- data/lib/automation_object/state/blue_print_adapter/element_array.rb +0 -25
- data/lib/automation_object/state/blue_print_adapter/element_hash.rb +0 -31
- data/lib/automation_object/state/blue_print_adapter/element_proxy.rb +0 -28
- data/lib/automation_object/state/blue_print_adapter/helpers/screen_manager.rb +0 -137
- data/lib/automation_object/state/blue_print_adapter/helpers/window.rb +0 -39
- data/lib/automation_object/state/blue_print_adapter/hook.rb +0 -56
- data/lib/automation_object/state/blue_print_adapter/hook_actions/action_loop.rb +0 -35
- data/lib/automation_object/state/blue_print_adapter/hook_actions/close_modal.rb +0 -31
- data/lib/automation_object/state/blue_print_adapter/hook_actions/close_screen.rb +0 -19
- data/lib/automation_object/state/blue_print_adapter/hook_actions/element_requirement.rb +0 -34
- data/lib/automation_object/state/blue_print_adapter/hook_actions/new_screen.rb +0 -37
- data/lib/automation_object/state/blue_print_adapter/hook_actions/reset_screen.rb +0 -18
- data/lib/automation_object/state/blue_print_adapter/modal.rb +0 -26
- data/lib/automation_object/state/blue_print_adapter/screen.rb +0 -32
- data/lib/automation_object/state/blue_print_adapter/top.rb +0 -45
- data/lib/automation_object/step_definitions/action.rb +0 -21
- data/lib/automation_object/step_definitions/element/actions.rb +0 -87
- data/lib/automation_object/step_definitions/element/regex.rb +0 -24
- 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
|
-
|
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
|
17
|
-
|
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
|
-
|
21
|
-
hook_action_class = AutomationObject::State::
|
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
|
-
|
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
|
data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/change_screen.rb
RENAMED
@@ -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
|
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
|
-
|
15
|
+
return false unless driver.document_complete?
|
14
16
|
|
15
|
-
new_screen =
|
17
|
+
new_screen = composite.top.screens[@new_screen_name]
|
16
18
|
if new_screen.load.live?
|
17
|
-
|
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
|
6
|
+
module Composite
|
7
|
+
# Change to previous screen hook loop
|
6
8
|
class ChangeToPreviousScreen < ActionLoop
|
7
9
|
def single_run
|
8
|
-
|
10
|
+
return false unless driver.document_complete?
|
9
11
|
|
10
|
-
new_screen =
|
12
|
+
new_screen = composite.top.current_window.previous_screen_name
|
11
13
|
if new_screen.load.live?
|
12
|
-
|
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
|
6
|
+
module Composite
|
7
|
+
# Possible screen changes hook loop
|
6
8
|
class PossibleScreenChanges < ActionLoop
|
7
9
|
def single_run
|
8
|
-
|
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
|
-
|
12
|
+
composite.top.set_screen(possible_screen_name)
|
12
13
|
return true
|
13
14
|
end
|
14
|
-
|
15
|
+
end
|
15
16
|
|
16
|
-
|
17
|
+
false
|
17
18
|
end
|
18
19
|
end
|
19
20
|
end
|
20
21
|
end
|
21
|
-
end
|
22
|
+
end
|