automation_object 0.5.1 → 0.6.0
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/driver/appium_adapter/driver.rb +4 -4
- data/lib/automation_object/driver/common_selenium/driver.rb +0 -10
- data/lib/automation_object/driver/selenium_adapter/driver.rb +4 -5
- data/lib/automation_object/dsl/element.rb +1 -4
- data/lib/automation_object/dsl/element_array.rb +1 -4
- data/lib/automation_object/dsl/element_hash.rb +1 -4
- data/lib/automation_object/dsl/modal.rb +2 -2
- data/lib/automation_object/dsl/screen.rb +6 -1
- data/lib/automation_object/state/composite/_base.rb +8 -2
- data/lib/automation_object/state/composite/_common_element.rb +8 -1
- data/lib/automation_object/state/composite/element.rb +3 -1
- data/lib/automation_object/state/composite/element_array.rb +3 -3
- data/lib/automation_object/state/composite/element_hash.rb +5 -3
- data/lib/automation_object/state/composite/helpers/window.rb +22 -4
- data/lib/automation_object/state/composite/helpers/window_manager.rb +5 -6
- data/lib/automation_object/state/composite/hook.rb +1 -2
- data/lib/automation_object/state/composite/hook_action.rb +2 -2
- data/lib/automation_object/state/composite/hook_actions/action_loop.rb +18 -9
- data/lib/automation_object/state/composite/hook_actions/change_screen.rb +3 -8
- data/lib/automation_object/state/composite/hook_actions/change_to_previous_screen.rb +3 -3
- data/lib/automation_object/state/composite/hook_actions/new_screen.rb +0 -4
- data/lib/automation_object/state/composite/hook_actions/possible_screen_changes.rb +2 -2
- data/lib/automation_object/state/composite/hook_actions/show_modal.rb +2 -7
- data/lib/automation_object/state/composite/hook_actions/sleep.rb +1 -6
- data/lib/automation_object/state/composite/hook_actions/wait_for_elements.rb +1 -3
- data/lib/automation_object/state/composite/screen.rb +6 -0
- data/lib/automation_object/state/session.rb +14 -0
- data/lib/automation_object/step_definitions/element.rb +2 -1
- data/lib/automation_object/step_definitions/element_array.rb +7 -6
- data/lib/automation_object/step_definitions/element_hash.rb +8 -7
- data/lib/automation_object/step_definitions/screen.rb +19 -4
- data/lib/automation_object/step_definitions/support/cache.rb +1 -1
- data/lib/automation_object/step_definitions/support/minitest.rb +10 -0
- data/lib/automation_object/step_definitions/support/parse.rb +7 -7
- data/lib/automation_object/version.rb +1 -1
- data/lib/automation_object.rb +1 -0
- metadata +17 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c6397d7cf9b93c229e3184d39b5c97a674fe1b1
|
4
|
+
data.tar.gz: dd8e110716616306e04f0c6b31130473b98ababc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17a499eb9a9d18f29a0a44ba088a3a15d53f6fae349fb3a6c53615ef5f3e0eb0ee7feecd2bd8bb4c7874130f9a354f133ffe34f06dd8a6fbf0a4cb000d7f6bf5
|
7
|
+
data.tar.gz: deb26da5fc8ee5e6f473f3333303c3e3e8880f78e101aded3cee357559963bda93ee8ab24cdcaeba6462fc6d6931cda95fef199d1bf22081d43f95af9d625706
|
@@ -100,10 +100,10 @@ module AutomationObject
|
|
100
100
|
# Window Handles Override
|
101
101
|
# @return [Array<String>] array of window handles
|
102
102
|
def window_handles
|
103
|
-
if @subject.device_is_android? &&
|
103
|
+
if @subject.device_is_android? && browser?
|
104
104
|
window_handles = @subject.window_handles
|
105
105
|
else
|
106
|
-
return @subject.available_contexts unless
|
106
|
+
return @subject.available_contexts unless browser?
|
107
107
|
|
108
108
|
window_handles = []
|
109
109
|
@subject.available_contexts.each do |context|
|
@@ -117,7 +117,7 @@ module AutomationObject
|
|
117
117
|
# Get window handle override
|
118
118
|
# @return [String] current window handle
|
119
119
|
def window_handle
|
120
|
-
return @subject.current_context unless
|
120
|
+
return @subject.current_context unless browser?
|
121
121
|
|
122
122
|
return @subject.window_handle if @subject.device_is_android?
|
123
123
|
|
@@ -137,7 +137,7 @@ module AutomationObject
|
|
137
137
|
|
138
138
|
# @return [Boolean] document is complete
|
139
139
|
def document_complete?
|
140
|
-
return true unless
|
140
|
+
return true unless browser? # Skip for non-browser Appium sessions
|
141
141
|
@subject.execute_script('return document.readyState;') == 'complete'
|
142
142
|
end
|
143
143
|
|
@@ -6,16 +6,6 @@ module AutomationObject
|
|
6
6
|
module CommonSelenium
|
7
7
|
# Common Selenium/AppiumMethods
|
8
8
|
module Driver
|
9
|
-
# Suspend timeout for block running
|
10
|
-
def suspend_timeout
|
11
|
-
original_timeout = @subject.manage.timeouts.implicit_wait
|
12
|
-
@subject.manage.timeouts.implicit_wait = 0
|
13
|
-
|
14
|
-
yield
|
15
|
-
|
16
|
-
@subject.manage.timeouts.implicit_wait = original_timeout
|
17
|
-
end
|
18
|
-
|
19
9
|
# @return [Point] x,y scroll position
|
20
10
|
def scroll_position
|
21
11
|
position = Point.new
|
@@ -48,11 +48,10 @@ module AutomationObject
|
|
48
48
|
exists = false
|
49
49
|
|
50
50
|
begin
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
rescue StandardError
|
51
|
+
element_objects = @subject.find_elements(selector_type, selector_path)
|
52
|
+
exists = true unless element_objects.empty?
|
53
|
+
rescue StandardError => e
|
54
|
+
puts e
|
56
55
|
return false
|
57
56
|
end
|
58
57
|
|
@@ -22,10 +22,7 @@ module AutomationObject
|
|
22
22
|
def method_missing(method, *args, &block)
|
23
23
|
return super if Element.methods.include?(method)
|
24
24
|
|
25
|
-
|
26
|
-
# puts "@state.load(:element, #{@name})"
|
27
|
-
@subject = @state.load(:element, @name)
|
28
|
-
end
|
25
|
+
@subject = @state.load(:element, @name)
|
29
26
|
|
30
27
|
super
|
31
28
|
end
|
@@ -22,10 +22,7 @@ module AutomationObject
|
|
22
22
|
def method_missing(method, *args, &block)
|
23
23
|
return super if ElementArray.methods.include?(method)
|
24
24
|
|
25
|
-
|
26
|
-
# puts "@state.load(:element_array, #{@name})"
|
27
|
-
@subject = @state.load(:element_array, @name)
|
28
|
-
end
|
25
|
+
@subject = @state.load(:element_array, @name)
|
29
26
|
|
30
27
|
super
|
31
28
|
end
|
@@ -22,10 +22,7 @@ module AutomationObject
|
|
22
22
|
def method_missing(method, *args, &block)
|
23
23
|
return super if ElementHash.methods.include?(method)
|
24
24
|
|
25
|
-
|
26
|
-
# puts "@state.load(:element_hash, #{@name})"
|
27
|
-
@subject = @state.load(:element_hash, @name)
|
28
|
-
end
|
25
|
+
@subject = @state.load(:element_hash, @name)
|
29
26
|
|
30
27
|
super
|
31
28
|
end
|
@@ -30,8 +30,8 @@ module AutomationObject
|
|
30
30
|
def method_missing(method, *args, &block)
|
31
31
|
return super if Modal.methods.include?(method)
|
32
32
|
|
33
|
-
# Attempt to load
|
34
|
-
if @subject.
|
33
|
+
# Attempt to load modal if composite object contains that child
|
34
|
+
if @subject.to_h.include?(method)
|
35
35
|
# puts "@state.load(:modal, #{@name})"
|
36
36
|
@state.load(:modal, @name)
|
37
37
|
end
|
@@ -33,13 +33,18 @@ module AutomationObject
|
|
33
33
|
return super if Screen.methods.include?(method)
|
34
34
|
|
35
35
|
# Attempt to load screen if composite object contains that child
|
36
|
-
if @subject.
|
36
|
+
if @subject.to_h.include?(method)
|
37
37
|
# puts "@state.load(:screen, #{@name})"
|
38
38
|
@state.load(:screen, @name)
|
39
39
|
end
|
40
40
|
|
41
41
|
super
|
42
42
|
end
|
43
|
+
|
44
|
+
# @return [Boolean]
|
45
|
+
def active?
|
46
|
+
@state.active?(:screen, @name)
|
47
|
+
end
|
43
48
|
end
|
44
49
|
end
|
45
50
|
end
|
@@ -17,7 +17,7 @@ module AutomationObject
|
|
17
17
|
|
18
18
|
# @param session [AutomationObject::State::Session] session
|
19
19
|
# @param driver [AutomationObject::Driver] driver
|
20
|
-
# @param blue_prints [AutomationObject::BluePrint::Composite] blue print composite
|
20
|
+
# @param blue_prints [AutomationObject::BluePrint::Composite::Base] blue print composite
|
21
21
|
# @param name [Symbol] name of composite element
|
22
22
|
# @param parent [Object, nil] parent composite object
|
23
23
|
# @param location [String] string location for error/debugging purposes
|
@@ -62,13 +62,19 @@ module AutomationObject
|
|
62
62
|
|
63
63
|
# Recursive function to reach parent screen
|
64
64
|
# Can return nil if above a screen!
|
65
|
-
# @return [AutomationObject::State::
|
65
|
+
# @return [AutomationObject::State::Composite::Screen,nil]
|
66
66
|
def screen
|
67
67
|
return nil if is_a?(Top)
|
68
68
|
|
69
69
|
# Should recursively call top until parent is nil
|
70
70
|
is_a?(Screen) ? self : parent.screen
|
71
71
|
end
|
72
|
+
|
73
|
+
# Recursive function to reach top
|
74
|
+
# @return [AutomationObject::State::Composite::Top]
|
75
|
+
def top
|
76
|
+
is_a?(Top) ? self : parent.top
|
77
|
+
end
|
72
78
|
end
|
73
79
|
end
|
74
80
|
end
|
@@ -6,6 +6,12 @@ module AutomationObject
|
|
6
6
|
module Composite
|
7
7
|
# Helper module for Element composite classes
|
8
8
|
module CommonElement
|
9
|
+
attr_accessor :cache
|
10
|
+
|
11
|
+
def reset
|
12
|
+
self.cache = nil
|
13
|
+
end
|
14
|
+
|
9
15
|
def method_hook?(name)
|
10
16
|
blue_prints.method_hooks.key?(name)
|
11
17
|
end
|
@@ -16,8 +22,9 @@ module AutomationObject
|
|
16
22
|
|
17
23
|
@method_hooks = {}
|
18
24
|
blue_prints.method_hooks.each do |key, blue_prints|
|
19
|
-
@method_hooks[key] = Hook.new(
|
25
|
+
@method_hooks[key] = Hook.new(session,
|
20
26
|
driver,
|
27
|
+
blue_prints,
|
21
28
|
key,
|
22
29
|
self,
|
23
30
|
location + "[#{key}]")
|
@@ -13,8 +13,10 @@ module AutomationObject
|
|
13
13
|
|
14
14
|
# @return [AutomationObject::State::Composite::ElementProxy] Selenium proxy
|
15
15
|
def load
|
16
|
+
return cache if cache
|
17
|
+
|
16
18
|
element = driver.find_element(*blue_prints.selector_params)
|
17
|
-
ElementProxy.new(self, element)
|
19
|
+
self.cache = ElementProxy.new(self, element)
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
@@ -13,13 +13,13 @@ module AutomationObject
|
|
13
13
|
|
14
14
|
# @return [Array<AutomationObject::State::Composite::ElementProxy>] Selenium proxy
|
15
15
|
def load
|
16
|
+
return cache if cache
|
17
|
+
|
16
18
|
elements = driver.find_elements(*blue_prints.selector_params)
|
17
19
|
|
18
|
-
|
20
|
+
self.cache = elements.map do |element|
|
19
21
|
ElementProxy.new(self, element)
|
20
22
|
end
|
21
|
-
|
22
|
-
wrapped_elements
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -13,8 +13,10 @@ module AutomationObject
|
|
13
13
|
|
14
14
|
# @return [Hash<String, AutomationObject::State::Composite::ElementProxy>] Selenium proxy
|
15
15
|
def load
|
16
|
+
return cache if cache
|
17
|
+
|
16
18
|
elements = driver.find_elements(*blue_prints.selector_params)
|
17
|
-
|
19
|
+
self.cache = {}
|
18
20
|
|
19
21
|
elements.each do |element|
|
20
22
|
# Want to wrap element, before sending for method!
|
@@ -22,10 +24,10 @@ module AutomationObject
|
|
22
24
|
wrapped_element = ElementProxy.new(self, element)
|
23
25
|
hash_key = wrapped_element.send(blue_prints.define_elements_by) # Send to wrapped state proxy
|
24
26
|
|
25
|
-
|
27
|
+
cache[hash_key] = wrapped_element
|
26
28
|
end
|
27
29
|
|
28
|
-
|
30
|
+
cache
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
@@ -6,10 +6,12 @@ module AutomationObject
|
|
6
6
|
module Composite
|
7
7
|
# Window class
|
8
8
|
class Window
|
9
|
-
# @param [AutomationObject::
|
10
|
-
# @param [
|
11
|
-
# @param [
|
12
|
-
|
9
|
+
# @param window_manager [AutomationObject::State::Composite::WindowManager]
|
10
|
+
# @param driver [AutomationObject::Driver::Driver]
|
11
|
+
# @param handle [String]
|
12
|
+
# @param screen [Symbol]
|
13
|
+
def initialize(window_manager, driver, handle, screen)
|
14
|
+
@window_manager = window_manager
|
13
15
|
@driver = driver
|
14
16
|
@handle = handle
|
15
17
|
|
@@ -18,6 +20,22 @@ module AutomationObject
|
|
18
20
|
@history = [screen]
|
19
21
|
end
|
20
22
|
|
23
|
+
# @return [Symbol,nil] previous screen name
|
24
|
+
def previous
|
25
|
+
return nil if @position < 1
|
26
|
+
@history[@position - 1]
|
27
|
+
end
|
28
|
+
|
29
|
+
# @param name [Symbol] screen name
|
30
|
+
# @return [void]
|
31
|
+
def update(name)
|
32
|
+
# Reset current screen
|
33
|
+
@window_manager.screens[self.name].reset
|
34
|
+
|
35
|
+
@position += 1
|
36
|
+
@history << name
|
37
|
+
end
|
38
|
+
|
21
39
|
# @return [Symbol] current screen
|
22
40
|
def name
|
23
41
|
@history[@position]
|
@@ -7,8 +7,6 @@ module AutomationObject
|
|
7
7
|
module Composite
|
8
8
|
# Collection to manage Window objects
|
9
9
|
module WindowManager
|
10
|
-
attr_accessor :window
|
11
|
-
|
12
10
|
# @param name [Symbol] name of window to use
|
13
11
|
# @return [void]
|
14
12
|
def use(name)
|
@@ -18,11 +16,12 @@ module AutomationObject
|
|
18
16
|
next if window.name != name
|
19
17
|
return if window == self.window
|
20
18
|
|
21
|
-
|
22
|
-
|
19
|
+
@window = window
|
20
|
+
@window.use
|
23
21
|
end
|
24
22
|
end
|
25
23
|
|
24
|
+
# @return [AutomationObject::State::Composite::Window]
|
26
25
|
def window
|
27
26
|
raise AutomationObject::State::Error::NoActiveWindows unless @window
|
28
27
|
@window
|
@@ -51,8 +50,8 @@ module AutomationObject
|
|
51
50
|
# Should only have one extra window
|
52
51
|
raise UnexpectedExtraWindowError if diff_handles.length > 1
|
53
52
|
|
54
|
-
|
55
|
-
windows << window
|
53
|
+
@window = Window.new(self, driver, diff_handles.first, name)
|
54
|
+
windows << @window
|
56
55
|
end
|
57
56
|
end
|
58
57
|
end
|
@@ -16,8 +16,7 @@ module AutomationObject
|
|
16
16
|
return nil if blue_prints.live?.empty?
|
17
17
|
|
18
18
|
blue_prints.live?.each do |element_requirement_blueprints|
|
19
|
-
hook_element_requirement = ElementRequirement.new(element_requirement_blueprints,
|
20
|
-
driver, self, 1)
|
19
|
+
hook_element_requirement = ElementRequirement.new(self, driver, element_requirement_blueprints, 1)
|
21
20
|
return false unless hook_element_requirement.run
|
22
21
|
end
|
23
22
|
|
@@ -23,8 +23,8 @@ module AutomationObject
|
|
23
23
|
hook_action_class = AutomationObject::State::Composite.const_get(hook_name.to_s.pascalize)
|
24
24
|
blue_prints = self.blue_prints.send(hook_name)
|
25
25
|
|
26
|
-
hook_action = hook_action_class.new(
|
27
|
-
return false if hook_action.run == false
|
26
|
+
hook_action = hook_action_class.new(self, driver, blue_prints)
|
27
|
+
return false if hook_action.run == false # Use long form, can return nil!
|
28
28
|
end
|
29
29
|
|
30
30
|
true
|
@@ -4,31 +4,40 @@ module AutomationObject
|
|
4
4
|
module Composite
|
5
5
|
# Composite action loop base class
|
6
6
|
class ActionLoop
|
7
|
-
|
7
|
+
# @return [AutomationObject::State::Composite::Base]
|
8
|
+
attr_accessor :composite
|
9
|
+
# @return [AutomationObject::Driver::Driver]
|
10
|
+
attr_accessor :driver
|
11
|
+
# @return [AutomationObject::BluePrint::Composite::Base]
|
12
|
+
attr_accessor :blue_prints
|
13
|
+
# @return [Integer]
|
14
|
+
attr_accessor :loops
|
8
15
|
|
9
|
-
|
10
|
-
|
11
|
-
|
16
|
+
# @param composite [AutomationObject::State::Composite::Base]
|
17
|
+
# @param driver [AutomationObject::Driver::Driver]
|
18
|
+
# @param blue_prints [AutomationObject::BluePrint::Composite::Base]
|
19
|
+
# @param loops [Integer]
|
20
|
+
def initialize(composite, driver, blue_prints, loops = 30)
|
12
21
|
self.composite = composite
|
22
|
+
self.driver = driver
|
23
|
+
self.blue_prints = blue_prints
|
13
24
|
self.loops = loops
|
14
25
|
end
|
15
26
|
|
16
|
-
def driver
|
17
|
-
composite.driver
|
18
|
-
end
|
19
|
-
|
20
27
|
# @return [Boolean] run success or not
|
21
28
|
def run
|
22
29
|
loops.times do
|
30
|
+
# Sub classes implement single run
|
23
31
|
return true if single_run
|
24
32
|
end
|
25
33
|
|
26
34
|
false
|
27
35
|
end
|
28
36
|
|
37
|
+
# Abstract method, override
|
29
38
|
# @return [Boolean] success or not
|
30
39
|
def single_run
|
31
|
-
raise
|
40
|
+
raise NotImplementedError
|
32
41
|
end
|
33
42
|
end
|
34
43
|
end
|
@@ -6,17 +6,12 @@ module AutomationObject
|
|
6
6
|
module Composite
|
7
7
|
# Change screen hook loop
|
8
8
|
class ChangeScreen < ActionLoop
|
9
|
-
def initialize(args = {})
|
10
|
-
super
|
11
|
-
@new_screen_name = args.fetch :blue_prints
|
12
|
-
end
|
13
|
-
|
14
9
|
def single_run
|
15
10
|
return false unless driver.document_complete?
|
16
11
|
|
17
|
-
new_screen = composite.top.screens[
|
18
|
-
if new_screen.load.live?
|
19
|
-
composite.top.
|
12
|
+
new_screen = composite.top.screens[blue_prints]
|
13
|
+
if new_screen.load.live? != false # Need strict
|
14
|
+
composite.top.window.update(blue_prints)
|
20
15
|
return true
|
21
16
|
else
|
22
17
|
return false
|
@@ -9,9 +9,9 @@ module AutomationObject
|
|
9
9
|
def single_run
|
10
10
|
return false unless driver.document_complete?
|
11
11
|
|
12
|
-
new_screen = composite.top.
|
13
|
-
if new_screen.load.live?
|
14
|
-
composite.top.
|
12
|
+
new_screen = composite.top.window.previous
|
13
|
+
if new_screen.load.live? != false
|
14
|
+
composite.top.window.update(new_screen)
|
15
15
|
return true
|
16
16
|
else
|
17
17
|
return false
|
@@ -8,8 +8,8 @@ module AutomationObject
|
|
8
8
|
class PossibleScreenChanges < ActionLoop
|
9
9
|
def single_run
|
10
10
|
blue_prints.each do |possible_screen_name|
|
11
|
-
if possible_screen_name.load.live?
|
12
|
-
composite.top.
|
11
|
+
if possible_screen_name.load.live? != false
|
12
|
+
composite.top.window.update(possible_screen_name)
|
13
13
|
return true
|
14
14
|
end
|
15
15
|
end
|
@@ -6,16 +6,11 @@ module AutomationObject
|
|
6
6
|
module Composite
|
7
7
|
# Show modal hook loop
|
8
8
|
class ShowModal < ActionLoop
|
9
|
-
def initialize(args = {})
|
10
|
-
super
|
11
|
-
@new_modal_name = args.fetch :blue_prints
|
12
|
-
end
|
13
|
-
|
14
9
|
def single_run
|
15
|
-
new_modal = composite.screen.modals[
|
10
|
+
new_modal = composite.screen.modals[blue_prints]
|
16
11
|
|
17
12
|
if new_modal.load.live? != false
|
18
|
-
composite.screen.current_modal =
|
13
|
+
composite.screen.current_modal = blue_prints
|
19
14
|
composite.screen.modal = new_modal
|
20
15
|
return true
|
21
16
|
else
|
@@ -8,9 +8,7 @@ module AutomationObject
|
|
8
8
|
class WaitForElements < ActionLoop
|
9
9
|
def single_run
|
10
10
|
blue_prints.each do |hook_element_requirement|
|
11
|
-
hook_element_requirement = ElementRequirement.new(
|
12
|
-
composite: self,
|
13
|
-
loops: 1)
|
11
|
+
hook_element_requirement = ElementRequirement.new(driver, hook_element_requirement, 1)
|
14
12
|
return false unless hook_element_requirement.run
|
15
13
|
end
|
16
14
|
|
@@ -43,6 +43,12 @@ module AutomationObject
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
+
def reset
|
47
|
+
elements.values.map(&:reset)
|
48
|
+
element_arrays.values.map(&:reset)
|
49
|
+
element_hashes.values.map(&:reset)
|
50
|
+
end
|
51
|
+
|
46
52
|
# Whether or not modal is active
|
47
53
|
# @return [Boolean]
|
48
54
|
attr_accessor :active
|
@@ -23,6 +23,8 @@ module AutomationObject
|
|
23
23
|
self.composite = Composite::Top.new(self, driver, blue_prints)
|
24
24
|
end
|
25
25
|
|
26
|
+
# @param type [Symbol]
|
27
|
+
# @param name [Symbol]
|
26
28
|
def load(type, name)
|
27
29
|
case type
|
28
30
|
when :screen
|
@@ -35,6 +37,18 @@ module AutomationObject
|
|
35
37
|
raise AutomationObject::State::UndefinedLoadTypeError
|
36
38
|
end
|
37
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
|
38
52
|
end
|
39
53
|
end
|
40
54
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require_relative 'support/parse'
|
3
|
+
require_relative 'support/minitest'
|
3
4
|
|
4
5
|
# Description: Provides step definitions related to elements
|
5
6
|
|
@@ -18,7 +19,7 @@ end
|
|
18
19
|
# - I type "blah" into the "home_screen" "text_field" element
|
19
20
|
# - I type "test" in the "home_screen" "text_field" element
|
20
21
|
# - I type "blah" in "home_screen" "text_field" element
|
21
|
-
When(/^I type "([
|
22
|
+
When(/^I type "([^"]+|%\{[\w\d]+\})" in(?:to)? (?:the )?"(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element$/) do |*args|
|
22
23
|
text, screen, element = AutomationObject::StepDefinitions::Parse.new(args).get
|
23
24
|
AutomationObject::Framework.get.send(screen).send(element).send_keys(text)
|
24
25
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require_relative 'support/parse'
|
3
3
|
require_relative 'support/element_array'
|
4
|
+
require_relative 'support/minitest'
|
4
5
|
|
5
6
|
# Description: Provides step definitions related to element arrays
|
6
7
|
|
@@ -23,7 +24,7 @@ end
|
|
23
24
|
# For: Typing into element array field
|
24
25
|
# Examples:
|
25
26
|
# - I type "blah" into the first "home_screen" "text_field" element array
|
26
|
-
When(%r(^I type "([\w\s]+|%\{[\w\d]+\})" in(?:to| to)? (?:the )?(%\{[\w\d]+\}|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element array
|
27
|
+
When(%r(^I type "([\w\s]+|%\{[\w\d]+\})" in(?:to| to)? (?:the )?(%\{[\w\d]+\}|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element array$)) do |*args|
|
27
28
|
text, key, low_range, high_range, screen, element = AutomationObject::StepDefinitions::Parse.new(args).get
|
28
29
|
|
29
30
|
AutomationObject::StepDefinitions::ElementArray.iterate_and_do(
|
@@ -36,7 +37,7 @@ end
|
|
36
37
|
# For: Scrolling element array item(s) into focus
|
37
38
|
# Examples:
|
38
39
|
# - I scroll to the first "home_screen" "logo_button" element array
|
39
|
-
When(%r(^I (?:scroll |focus )(?:to |through )(?:the )?(%\{[\w\d]+\}|all|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element array
|
40
|
+
When(%r(^I (?:scroll |focus )(?:to |through )(?:the )?(%\{[\w\d]+\}|all|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element array$)) do |*args|
|
40
41
|
key, low_range, high_range, screen, element = AutomationObject::StepDefinitions::Parse.new(args).get
|
41
42
|
|
42
43
|
AutomationObject::StepDefinitions::ElementArray.iterate_and_do(
|
@@ -47,7 +48,7 @@ end
|
|
47
48
|
# For: Saving value from element array for use later
|
48
49
|
# Examples:
|
49
50
|
# - I save "text" as "unique_value" from the first "home_screen" "logo_button" element array
|
50
|
-
When(%r(^I save "(\w+|%\{[\w\d]+\})" as "([\w\d]+)" from (?:the )?(%\{[\w\d]+\}|all|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element array
|
51
|
+
When(%r(^I save "(\w+|%\{[\w\d]+\})" as "([\w\d]+)" from (?:the )?(%\{[\w\d]+\}|all|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element array$)) do |*args|
|
51
52
|
method, value_key, key, low_range, high_range, screen, element = AutomationObject::StepDefinitions::Parse.new(args).get
|
52
53
|
|
53
54
|
AutomationObject::StepDefinitions::ElementArray.iterate_and_do(
|
@@ -61,7 +62,7 @@ end
|
|
61
62
|
# For: Testing the element arrays size
|
62
63
|
# Examples:
|
63
64
|
# - the "home_screen" "title" element array should be greater than 0
|
64
|
-
Then(%r(^(?:the )?"([\w\d]+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element array should(n't|not)? (?:be )?(larger th[ae]n|greater th[ae]n|less th[ae]n|smaller th[ae]n|equals?) (?:to )?(\d+)
|
65
|
+
Then(%r(^(?:the )?"([\w\d]+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element array should(n't|not)? (?:be )?(larger th[ae]n|greater th[ae]n|less th[ae]n|smaller th[ae]n|equals?) (?:to )?(\d+)$)) do |*args|
|
65
66
|
screen, element, negative, comparison, expected_value = AutomationObject::StepDefinitions::Parse.new(args).get
|
66
67
|
|
67
68
|
element_array = AutomationObject::Framework.get.send(screen).send(element)
|
@@ -95,7 +96,7 @@ end
|
|
95
96
|
# - the random "home_screen" "title" element array "text" should not equal "Home"
|
96
97
|
# - the 0..9 "home_screen" "title" element array "text" should equal "Home"
|
97
98
|
# - the all "home_screen" "title" element array "text" should not equal "Home"
|
98
|
-
Then(%r(^(?:the )?(%\{\w+\}|all|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element array "(\w+|%\{[\w\d]+\})" should?(n't| not)? equal "(\w+|%\{[\w\d]+\})"
|
99
|
+
Then(%r(^(?:the )?(%\{\w+\}|all|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element array "(\w+|%\{[\w\d]+\})" should?(n't| not)? equal "(\w+|%\{[\w\d]+\})"$)) do |*args|
|
99
100
|
key, low_range, high_range, screen, element, method, negative, expected_value = AutomationObject::StepDefinitions::Parse.new(args).get
|
100
101
|
|
101
102
|
AutomationObject::StepDefinitions::ElementArray.iterate_and_do(
|
@@ -116,7 +117,7 @@ end
|
|
116
117
|
# - the "home_screen" "title" element array "text" should be unique
|
117
118
|
# - the "home_screen" "title" element array "text" should not be unique
|
118
119
|
# - the "home_screen" "title" element array "text" shouldn't be unique
|
119
|
-
Then(%r(^(?:the )?"([\w\d]+|%\{[\w\d]+\})" "([\w\d]+|%\{[\w\d]+\})" element array "([\w\d]+|%\{[\w\d]+\})" should(n't| not)? be unique
|
120
|
+
Then(%r(^(?:the )?"([\w\d]+|%\{[\w\d]+\})" "([\w\d]+|%\{[\w\d]+\})" element array "([\w\d]+|%\{[\w\d]+\})" should(n't| not)? be unique$)) do |*args|
|
120
121
|
screen, element, method, negative = AutomationObject::StepDefinitions::Parse.new(args).get
|
121
122
|
|
122
123
|
element_array = AutomationObject::Framework.get.send(screen).send(element)
|
@@ -1,13 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require_relative 'support/parse'
|
3
3
|
require_relative 'support/element_hash'
|
4
|
+
require_relative 'support/minitest'
|
4
5
|
|
5
6
|
# Description: Provides step definitions related to element hashes
|
6
7
|
|
7
8
|
# For: Calling an element hash method
|
8
9
|
# Examples:
|
9
10
|
# - I click on the first "home_screen" "about_button" element hash
|
10
|
-
When(%r(^I (\w+|%\{[\w\d]+\})?(?: on| over)?(?: the| a)? (%\{[\w\d]+\}|all|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element hash
|
11
|
+
When(%r(^I (\w+|%\{[\w\d]+\})?(?: on| over)?(?: the| a)? (%\{[\w\d]+\}|all|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element hash$)) do |*args|
|
11
12
|
method, key, low_range, high_range, screen, element = AutomationObject::StepDefinitions::Parse.new(args).get
|
12
13
|
|
13
14
|
AutomationObject::StepDefinitions::ElementHash.iterate_and_do(
|
@@ -20,7 +21,7 @@ end
|
|
20
21
|
# For: Typing into element hash field
|
21
22
|
# Examples:
|
22
23
|
# - I type "blah" into the first "home_screen" "text_field" element hash
|
23
|
-
When(%r(^I type "([\w\s]+|%\{[\w\d]+\})" in(?:to| to)? (?:the )?(%\{[\w\d]+\}|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element hash
|
24
|
+
When(%r(^I type "([\w\s]+|%\{[\w\d]+\})" in(?:to| to)? (?:the )?(%\{[\w\d]+\}|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element hash$)) do |*args|
|
24
25
|
text, key, low_range, high_range, screen, element = AutomationObject::StepDefinitions::Parse.new(args).get
|
25
26
|
|
26
27
|
AutomationObject::StepDefinitions::ElementHash.iterate_and_do(
|
@@ -33,7 +34,7 @@ end
|
|
33
34
|
# For: Scrolling element hash item(s) into focus
|
34
35
|
# Examples:
|
35
36
|
# - I scroll to the first "home_screen" "logo_button" element hash
|
36
|
-
When(%r(^I (?:scroll |focus )(?:to |through )(?:the )?(%\{[\w\d]+\}|all|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element hash
|
37
|
+
When(%r(^I (?:scroll |focus )(?:to |through )(?:the )?(%\{[\w\d]+\}|all|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element hash$)) do |*args|
|
37
38
|
key, low_range, high_range, screen, element = AutomationObject::StepDefinitions::Parse.new(args).get
|
38
39
|
|
39
40
|
AutomationObject::StepDefinitions::ElementHash.iterate_and_do(
|
@@ -44,7 +45,7 @@ end
|
|
44
45
|
# For: Saving value from element hash for use later
|
45
46
|
# Examples:
|
46
47
|
# - I save "text" as "unique_value" from the first "home_screen" "logo_button" element hash
|
47
|
-
When(%r(^I save "(\w+|%\{[\w\d]+\})" as "([\w\d]+)" from (?:the )?(%\{[\w\d]+\}|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element hash
|
48
|
+
When(%r(^I save "(\w+|%\{[\w\d]+\})" as "([\w\d]+)" from (?:the )?(%\{[\w\d]+\}|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element hash$)) do |*args|
|
48
49
|
method, value_key, key, low_range, high_range, screen, element = AutomationObject::StepDefinitions::Parse.new(args).get
|
49
50
|
|
50
51
|
AutomationObject::StepDefinitions::ElementHash.iterate_and_do(
|
@@ -58,7 +59,7 @@ end
|
|
58
59
|
# For: Testing the element hashes size
|
59
60
|
# Examples:
|
60
61
|
# - the "home_screen" "title" element hash should be greater than 0
|
61
|
-
Then(%r(^(?:the )?"([\w\d]+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element hash should(n't|not)? (?:be )?(larger th[ae]n|greater th[ae]n|less th[ae]n|smaller th[ae]n|equals?) (?:to )?(\d+)
|
62
|
+
Then(%r(^(?:the )?"([\w\d]+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element hash should(n't|not)? (?:be )?(larger th[ae]n|greater th[ae]n|less th[ae]n|smaller th[ae]n|equals?) (?:to )?(\d+)$)) do |*args|
|
62
63
|
screen, element, negative, comparison, expected_value = AutomationObject::StepDefinitions::Parse.new(args).get
|
63
64
|
|
64
65
|
element_hash = AutomationObject::Framework.get.send(screen).send(element)
|
@@ -88,7 +89,7 @@ end
|
|
88
89
|
# For: Testing if the element hash value equals a given value
|
89
90
|
# Examples:
|
90
91
|
# - the first "home_screen" "title" element hash "text" should equal "Home"
|
91
|
-
Then(%r(^(?:the )?(%\{\w+\}|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element hash "(\w+|%\{[\w\d]+\})" should ?(n't |not )?equal "(\w+|%\{[\w\d]+\})"
|
92
|
+
Then(%r(^(?:the )?(%\{\w+\}|random|last|first|(\d+)\.\.(\d+)) "(\w+|%\{[\w\d]+\})" "(\w+|%\{[\w\d]+\})" element hash "(\w+|%\{[\w\d]+\})" should ?(n't |not )?equal "(\w+|%\{[\w\d]+\})"$)) do |*args|
|
92
93
|
key, low_range, high_range, screen, element, method, negative, expected_value = AutomationObject::StepDefinitions::Parse.new(args).get
|
93
94
|
|
94
95
|
AutomationObject::StepDefinitions::ElementHash.iterate_and_do(
|
@@ -107,7 +108,7 @@ end
|
|
107
108
|
# For: Testing if the element hashes uniqueness
|
108
109
|
# Examples:
|
109
110
|
# - the "home_screen" "title" element hash "text" should be unique
|
110
|
-
Then(%r(^(?:the )?"([\w\d]+|%\{[\w\d]+\})" "([\w\d]+|%\{[\w\d]+\})" element hash "([\w\d]+|%\{[\w\d]+\})" should(n't|not)? be unique
|
111
|
+
Then(%r(^(?:the )?"([\w\d]+|%\{[\w\d]+\})" "([\w\d]+|%\{[\w\d]+\})" element hash "([\w\d]+|%\{[\w\d]+\})" should(n't|not)? be unique$)) do |*args|
|
111
112
|
screen, element, method, negative = AutomationObject::StepDefinitions::Parse.new(args).get
|
112
113
|
|
113
114
|
element_hash = AutomationObject::Framework.get.send(screen).send(element)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require_relative 'support/parse'
|
3
|
+
require_relative 'support/minitest'
|
3
4
|
|
4
5
|
# Description: Provides step definitions related to screens
|
5
6
|
|
@@ -8,7 +9,7 @@ require_relative 'support/parse'
|
|
8
9
|
# - I close the "contact" screen
|
9
10
|
# - I close the screen
|
10
11
|
# - I destroy the screen
|
11
|
-
Then(%r(^I (?:close|destroy) the ("([\w\s]+|%\{[\w\d]+\})")? ?screen
|
12
|
+
Then(%r(^I (?:close|destroy) the ("([\w\s]+|%\{[\w\d]+\})")? ?screen$)) do |*args|
|
12
13
|
_unparsed_name, name = AutomationObject::StepDefinitions::Parse.new(args).get
|
13
14
|
|
14
15
|
if name
|
@@ -22,7 +23,7 @@ end
|
|
22
23
|
# Examples:
|
23
24
|
# - I navigate back on the screen
|
24
25
|
# - I navigate back on the "contact" screen
|
25
|
-
Then(%r(^I (?:navigate|go) back (?:on )?(?:the )?("([\w\s]+|%\{[\w\d]+\})")? ?screen
|
26
|
+
Then(%r(^I (?:navigate|go) back (?:on )?(?:the )?("([\w\s]+|%\{[\w\d]+\})")? ?screen$)) do
|
26
27
|
_unparsed_name, name = AutomationObject::StepDefinitions::Parse.new(args).get
|
27
28
|
|
28
29
|
if name
|
@@ -36,7 +37,7 @@ end
|
|
36
37
|
# Examples:
|
37
38
|
# - I switch to the "home" screen
|
38
39
|
# - I focus the "contact" screen
|
39
|
-
Then(%r(^I (?:switch|focus) (?:to )?(?:the )?"([\w\s]+|%\{[\w\d]+\})" screen
|
40
|
+
Then(%r(^I (?:switch|focus) (?:to )?(?:the )?"([\w\s]+|%\{[\w\d]+\})" screen$)) do |*args|
|
40
41
|
screen = AutomationObject::StepDefinitions::Parse.new(args).get
|
41
42
|
AutomationObject::Framework.get.focus(screen)
|
42
43
|
end
|
@@ -47,7 +48,7 @@ end
|
|
47
48
|
# - I set the "home" screen size to 1000x2000
|
48
49
|
# - I set the screen width to 1000
|
49
50
|
# - I set the screen height to 2000
|
50
|
-
Then(%r(^I set the ("([\w\s]+|%\{[\w\d]+\})")? ?screen (size|width|height) to (\d+|(\d+)x(\d+))
|
51
|
+
Then(%r(^I set the ("([\w\s]+|%\{[\w\d]+\})")? ?screen (size|width|height) to (\d+|(\d+)x(\d+))$)) do |*args|
|
51
52
|
_unparsed_screen, screen, dimension, size, width, height = AutomationObject::StepDefinitions::Parse.new(args).get
|
52
53
|
|
53
54
|
screen = if screen
|
@@ -60,3 +61,17 @@ Then(%r(^I set the ("([\w\s]+|%\{[\w\d]+\})")? ?screen (size|width|height) to (\
|
|
60
61
|
screen.width(size) if dimension == 'width' && size
|
61
62
|
screen.height(size) if dimension == 'height' && size
|
62
63
|
end
|
64
|
+
|
65
|
+
# For: Test if screen is currently active
|
66
|
+
# Examples:
|
67
|
+
# - the "home" screen should be active
|
68
|
+
# - the "login" screen shouldn't be active
|
69
|
+
Then(%r(^the "([\w\s]+|%\{[\w\d]+\})" screen should ?(n't |not )?be active$)) do |*args|
|
70
|
+
screen, negative = AutomationObject::StepDefinitions::Parse.new(args).get
|
71
|
+
|
72
|
+
if negative
|
73
|
+
assert_equal false, AutomationObject::Framework.get.send(screen).active?
|
74
|
+
else
|
75
|
+
assert_equal true, AutomationObject::Framework.get.send(screen).active?
|
76
|
+
end
|
77
|
+
end
|
@@ -22,19 +22,19 @@ module AutomationObject
|
|
22
22
|
private
|
23
23
|
|
24
24
|
# Used to parse any embedded variables
|
25
|
-
# @param string [String] index of arg
|
25
|
+
# @param string [String, nil] index of arg
|
26
26
|
# @return [String] parsed string
|
27
27
|
def parse(string)
|
28
|
-
|
28
|
+
return string if string.nil?
|
29
29
|
|
30
|
-
string.scan(/%\{
|
31
|
-
|
32
|
-
next unless cached_value
|
30
|
+
string.scan(/%\{[\w\d]+\}/) do |cache_key|
|
31
|
+
unwrapped_cache_key = cache_key.gsub(/[%\{\}]/, '')
|
33
32
|
|
34
|
-
|
33
|
+
cached_value = AutomationObject::StepDefinitions::Cache.get(unwrapped_cache_key)
|
34
|
+
return cached_value if cached_value
|
35
35
|
end
|
36
36
|
|
37
|
-
|
37
|
+
string
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
data/lib/automation_object.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: automation_object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Blatter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -151,61 +151,61 @@ dependencies:
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0.8'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: mocha
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: '
|
159
|
+
version: '1.1'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
166
|
+
version: '1.1'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
168
|
+
name: fakefs
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
171
|
- - "~>"
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: '
|
173
|
+
version: '0.9'
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: '
|
180
|
+
version: '0.9'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
182
|
+
name: minitest
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
185
|
- - "~>"
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version: '
|
188
|
-
type: :
|
187
|
+
version: '5.9'
|
188
|
+
type: :runtime
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
192
|
- - "~>"
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version: '
|
194
|
+
version: '5.9'
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
196
|
+
name: minitest-bonus-assertions
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
199
|
- - "~>"
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version: '0
|
202
|
-
type: :
|
201
|
+
version: '2.0'
|
202
|
+
type: :runtime
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
206
|
- - "~>"
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version: '0
|
208
|
+
version: '2.0'
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
210
|
name: colorize
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -433,6 +433,7 @@ files:
|
|
433
433
|
- lib/automation_object/step_definitions/support/cache.rb
|
434
434
|
- lib/automation_object/step_definitions/support/element_array.rb
|
435
435
|
- lib/automation_object/step_definitions/support/element_hash.rb
|
436
|
+
- lib/automation_object/step_definitions/support/minitest.rb
|
436
437
|
- lib/automation_object/step_definitions/support/parse.rb
|
437
438
|
- lib/automation_object/version.rb
|
438
439
|
homepage: https://github.com/mikeblatter/automation_object
|