automation_object 0.6.0 → 0.7.5
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/blue_print/hash_adapter/hook_action.rb +1 -1
- data/lib/automation_object/driver/appium_adapter/driver.rb +17 -1
- data/lib/automation_object/driver/driver.rb +7 -1
- data/lib/automation_object/driver/nokogiri_adapter/driver.rb +6 -0
- data/lib/automation_object/driver/selenium_adapter/driver.rb +16 -1
- data/lib/automation_object/dsl/_base.rb +6 -3
- data/lib/automation_object/dsl/_proxy.rb +2 -2
- data/lib/automation_object/dsl/element.rb +9 -3
- data/lib/automation_object/dsl/element_array.rb +9 -3
- data/lib/automation_object/dsl/element_hash.rb +9 -3
- data/lib/automation_object/dsl/modal.rb +9 -6
- data/lib/automation_object/dsl/screen.rb +5 -7
- data/lib/automation_object/dsl/top.rb +7 -3
- data/lib/automation_object/state/_base.rb +72 -0
- data/lib/automation_object/state/_common_element.rb +44 -0
- data/lib/automation_object/state/{error.rb → _error.rb} +4 -0
- data/lib/automation_object/state/element.rb +23 -0
- data/lib/automation_object/state/element_array.rb +26 -0
- data/lib/automation_object/state/element_hash.rb +34 -0
- data/lib/automation_object/state/element_proxy.rb +31 -0
- data/lib/automation_object/state/hook.rb +51 -0
- data/lib/automation_object/state/{composite/hook_action.rb → hook_action.rb} +11 -13
- data/lib/automation_object/state/hook_actions/action_loop.rb +43 -0
- data/lib/automation_object/state/hook_actions/change_screen.rb +23 -0
- data/lib/automation_object/state/hook_actions/change_to_previous_screen.rb +23 -0
- data/lib/automation_object/state/hook_actions/close_modal.rb +21 -0
- data/lib/automation_object/state/hook_actions/close_screen.rb +20 -0
- data/lib/automation_object/state/hook_actions/element_requirement.rb +30 -0
- data/lib/automation_object/state/hook_actions/new_screen.rb +49 -0
- data/lib/automation_object/state/hook_actions/possible_screen_changes.rb +23 -0
- data/lib/automation_object/state/{composite/hook_actions → hook_actions}/reset_screen.rb +4 -5
- data/lib/automation_object/state/hook_actions/show_modal.rb +18 -0
- data/lib/automation_object/state/hook_actions/sleep.rb +13 -0
- data/lib/automation_object/state/hook_actions/wait_for_elements.rb +18 -0
- data/lib/automation_object/state/modal.rb +47 -0
- data/lib/automation_object/state/screen.rb +70 -0
- data/lib/automation_object/state/top.rb +43 -0
- data/lib/automation_object/state.rb +3 -3
- data/lib/automation_object/version.rb +1 -1
- metadata +40 -43
- data/lib/automation_object/state/composite/_base.rb +0 -81
- data/lib/automation_object/state/composite/_common_element.rb +0 -38
- data/lib/automation_object/state/composite/element.rb +0 -24
- data/lib/automation_object/state/composite/element_array.rb +0 -27
- data/lib/automation_object/state/composite/element_hash.rb +0 -35
- data/lib/automation_object/state/composite/element_proxy.rb +0 -33
- data/lib/automation_object/state/composite/helpers/window.rb +0 -79
- data/lib/automation_object/state/composite/helpers/window_manager.rb +0 -59
- data/lib/automation_object/state/composite/hook.rb +0 -55
- data/lib/automation_object/state/composite/hook_actions/action_loop.rb +0 -45
- data/lib/automation_object/state/composite/hook_actions/change_screen.rb +0 -23
- data/lib/automation_object/state/composite/hook_actions/change_to_previous_screen.rb +0 -23
- data/lib/automation_object/state/composite/hook_actions/close_modal.rb +0 -29
- data/lib/automation_object/state/composite/hook_actions/close_screen.rb +0 -19
- data/lib/automation_object/state/composite/hook_actions/element_requirement.rb +0 -32
- data/lib/automation_object/state/composite/hook_actions/new_screen.rb +0 -31
- data/lib/automation_object/state/composite/hook_actions/possible_screen_changes.rb +0 -22
- data/lib/automation_object/state/composite/hook_actions/show_modal.rb +0 -23
- data/lib/automation_object/state/composite/hook_actions/sleep.rb +0 -15
- data/lib/automation_object/state/composite/hook_actions/wait_for_elements.rb +0 -20
- data/lib/automation_object/state/composite/modal.rb +0 -45
- data/lib/automation_object/state/composite/screen.rb +0 -64
- data/lib/automation_object/state/composite/top.rb +0 -51
- data/lib/automation_object/state/session.rb +0 -54
@@ -1,29 +0,0 @@
|
|
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
|
@@ -1,19 +0,0 @@
|
|
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
|
@@ -1,32 +0,0 @@
|
|
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
|
@@ -1,31 +0,0 @@
|
|
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 single_run
|
11
|
-
new_screen_name = blue_prints
|
12
|
-
new_screen = composite.top.screens[new_screen_name]
|
13
|
-
|
14
|
-
stored_window_handles = composite.top.window_handles
|
15
|
-
driver_handles = driver.window_handles
|
16
|
-
|
17
|
-
return false if driver_handles.length <= stored_window_handles.length
|
18
|
-
|
19
|
-
raise MoreThenOneScreenCreated if (driver_handles.length - stored_window_handles.length) > 1
|
20
|
-
|
21
|
-
composite.top.create_screen(new_screen_name)
|
22
|
-
composite.top.use_screen(new_screen_name)
|
23
|
-
|
24
|
-
return false unless driver.document_complete?
|
25
|
-
|
26
|
-
new_screen.load.live?
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require_relative 'action_loop'
|
3
|
-
|
4
|
-
module AutomationObject
|
5
|
-
module State
|
6
|
-
module Composite
|
7
|
-
# Possible screen changes hook loop
|
8
|
-
class PossibleScreenChanges < ActionLoop
|
9
|
-
def single_run
|
10
|
-
blue_prints.each do |possible_screen_name|
|
11
|
-
if possible_screen_name.load.live? != false
|
12
|
-
composite.top.window.update(possible_screen_name)
|
13
|
-
return true
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
false
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require_relative 'action_loop'
|
3
|
-
|
4
|
-
module AutomationObject
|
5
|
-
module State
|
6
|
-
module Composite
|
7
|
-
# Show modal hook loop
|
8
|
-
class ShowModal < ActionLoop
|
9
|
-
def single_run
|
10
|
-
new_modal = composite.screen.modals[blue_prints]
|
11
|
-
|
12
|
-
if new_modal.load.live? != false
|
13
|
-
composite.screen.current_modal = blue_prints
|
14
|
-
composite.screen.modal = new_modal
|
15
|
-
return true
|
16
|
-
else
|
17
|
-
return false
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require_relative 'action_loop'
|
3
|
-
|
4
|
-
module AutomationObject
|
5
|
-
module State
|
6
|
-
module Composite
|
7
|
-
# Wait for elements hook loop
|
8
|
-
class WaitForElements < ActionLoop
|
9
|
-
def single_run
|
10
|
-
blue_prints.each do |hook_element_requirement|
|
11
|
-
hook_element_requirement = ElementRequirement.new(driver, hook_element_requirement, 1)
|
12
|
-
return false unless hook_element_requirement.run
|
13
|
-
end
|
14
|
-
|
15
|
-
true
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,45 +0,0 @@
|
|
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
|
@@ -1,64 +0,0 @@
|
|
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
|
-
def reset
|
47
|
-
elements.values.map(&:reset)
|
48
|
-
element_arrays.values.map(&:reset)
|
49
|
-
element_hashes.values.map(&:reset)
|
50
|
-
end
|
51
|
-
|
52
|
-
# Whether or not modal is active
|
53
|
-
# @return [Boolean]
|
54
|
-
attr_accessor :active
|
55
|
-
|
56
|
-
undef :active if defined? :active
|
57
|
-
# @return [Boolean] screen is active or not
|
58
|
-
def active
|
59
|
-
@active ||= false
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,51 +0,0 @@
|
|
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,54 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require_relative 'error'
|
3
|
-
|
4
|
-
require_relative 'composite/top'
|
5
|
-
|
6
|
-
module AutomationObject
|
7
|
-
module State
|
8
|
-
# Session manages the DSL state
|
9
|
-
class Session
|
10
|
-
# @return [AutomationObject::Driver::Driver]
|
11
|
-
attr_accessor :driver
|
12
|
-
|
13
|
-
# @return [AutomationObject::BluePrint::Composite::Top]
|
14
|
-
attr_accessor :blue_prints
|
15
|
-
|
16
|
-
# @return [AutomationObject::State::Composite::Top]
|
17
|
-
attr_accessor :composite
|
18
|
-
|
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)
|
24
|
-
end
|
25
|
-
|
26
|
-
# @param type [Symbol]
|
27
|
-
# @param name [Symbol]
|
28
|
-
def load(type, name)
|
29
|
-
case type
|
30
|
-
when :screen
|
31
|
-
composite.use(name)
|
32
|
-
when :modal
|
33
|
-
composite.current_screen.use(name)
|
34
|
-
when :element, :element_array, :element_hash
|
35
|
-
return composite.current_screen.get(type, name)
|
36
|
-
else
|
37
|
-
raise AutomationObject::State::UndefinedLoadTypeError
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
# @param type [Symbol]
|
42
|
-
# @param name [Symbol]
|
43
|
-
# @return [Boolean]
|
44
|
-
def active?(type, name)
|
45
|
-
case type
|
46
|
-
when :screen
|
47
|
-
composite.live_screens.include?(name)
|
48
|
-
else
|
49
|
-
raise AutomationObject::State::UndefinedLoadTypeError
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|