testa_appium_driver 0.1.3 → 0.1.7

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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -2
  3. data/.idea/deployment.xml +10 -2
  4. data/.idea/inspectionProfiles/Project_Default.xml +8 -8
  5. data/.idea/runConfigurations/Android_Test.xml +41 -41
  6. data/.idea/runConfigurations.xml +10 -0
  7. data/.idea/sshConfigs.xml +3 -0
  8. data/.idea/webServers.xml +7 -0
  9. data/.rspec +3 -3
  10. data/.rubocop.yml +13 -13
  11. data/CHANGELOG.md +5 -5
  12. data/CODE_OF_CONDUCT.md +102 -102
  13. data/Gemfile +12 -12
  14. data/LICENSE.txt +21 -21
  15. data/README.md +18 -5
  16. data/Rakefile +12 -12
  17. data/bin/console +17 -17
  18. data/bin/setup +8 -8
  19. data/lib/testa_appium_driver/android/class_selectors.rb +101 -16
  20. data/lib/testa_appium_driver/android/driver.rb +19 -1
  21. data/lib/testa_appium_driver/android/locator.rb +22 -7
  22. data/lib/testa_appium_driver/android/scroll_actions/uiautomator_scroll_actions.rb +0 -14
  23. data/lib/testa_appium_driver/common/constants.rb +1 -0
  24. data/lib/testa_appium_driver/common/helpers.rb +5 -1
  25. data/lib/testa_appium_driver/common/locator/scroll_actions.rb +152 -58
  26. data/lib/testa_appium_driver/common/locator.rb +160 -25
  27. data/lib/testa_appium_driver/common/scroll_actions/w3c_scroll_actions.rb +14 -36
  28. data/lib/testa_appium_driver/common/scroll_actions.rb +30 -8
  29. data/lib/testa_appium_driver/common/selenium_element.rb +2 -2
  30. data/lib/testa_appium_driver/driver.rb +99 -29
  31. data/lib/testa_appium_driver/ios/driver.rb +14 -0
  32. data/lib/testa_appium_driver/ios/locator.rb +10 -5
  33. data/lib/testa_appium_driver/ios/type_selectors.rb +0 -13
  34. data/lib/testa_appium_driver/version.rb +5 -5
  35. data/testa_appium_driver.gemspec +1 -1
  36. data/testa_appium_driver.iml +39 -5
  37. metadata +7 -6
@@ -3,17 +3,22 @@ module TestaAppiumDriver
3
3
 
4
4
  private
5
5
  # @return [Array]
6
- def w3c_each(skip_scroll_to_start, &block)
6
+ def w3c_each(direction, &block)
7
7
  elements = []
8
8
  begin
9
- @driver.disable_wait_for_idle
10
- @driver.disable_implicit_wait
11
9
  default_deadzone!
12
10
 
13
11
  iterations = 0
14
12
 
15
13
 
16
- scroll_to_start unless skip_scroll_to_start
14
+ if direction.nil?
15
+ scroll_to_start
16
+ if @scrollable.scroll_orientation == :vertical
17
+ direction = :down
18
+ else
19
+ direction = :right
20
+ end
21
+ end
17
22
 
18
23
  until is_end_of_scroll?
19
24
  matches = @locator.execute(skip_cache: true)
@@ -27,39 +32,23 @@ module TestaAppiumDriver
27
32
  end
28
33
  iterations += 1
29
34
  break if !@max_scrolls.nil? && iterations == @max_scrolls
35
+ self.send("page_#{direction}")
30
36
  end
31
37
  rescue => e
32
38
  raise e
33
- ensure
34
- @driver.enable_implicit_wait
35
- @driver.enable_wait_for_idle
39
+
36
40
  end
37
41
  elements
38
42
  end
39
43
 
40
- def w3c_align(with)
41
- @driver.disable_wait_for_idle
44
+ def w3c_align(with, scroll_to_find)
42
45
  default_deadzone!
43
46
 
44
47
 
45
48
 
46
- @locator.scroll_to unless @raise # called with !
49
+ @locator.scroll_to if scroll_to_find
47
50
 
48
51
  element = @locator.execute
49
- @driver.disable_implicit_wait
50
-
51
- case with
52
- when :top
53
- page_down if is_aligned?(with, element)
54
- when :bottom
55
- page_up if is_aligned?(with, element)
56
- when :right
57
- page_right if is_aligned?(with, element)
58
- when :left
59
- page_left if is_aligned?(with, element)
60
- else
61
- raise "Unsupported align with option: #{with}"
62
- end
63
52
 
64
53
  timeout = 0
65
54
  until is_aligned?(with, element) || timeout == 3
@@ -67,8 +56,6 @@ module TestaAppiumDriver
67
56
  timeout += 1
68
57
  end
69
58
 
70
- @driver.enable_implicit_wait
71
- @driver.enable_wait_for_idle
72
59
  end
73
60
 
74
61
 
@@ -142,8 +129,6 @@ module TestaAppiumDriver
142
129
  end
143
130
 
144
131
  def w3c_scroll_to_start_or_end(type)
145
- @driver.disable_wait_for_idle
146
- @driver.disable_implicit_wait
147
132
  default_deadzone!
148
133
 
149
134
  @previous_elements = nil
@@ -171,15 +156,10 @@ module TestaAppiumDriver
171
156
 
172
157
  # reset the flag for end of scroll elements
173
158
  @previous_elements = nil
174
-
175
- @driver.enable_implicit_wait
176
- @driver.enable_wait_for_idle
177
159
  end
178
160
 
179
161
 
180
162
  def w3c_page_or_fling(type, direction)
181
- @driver.disable_wait_for_idle
182
- @driver.disable_implicit_wait
183
163
  default_deadzone!
184
164
 
185
165
  if direction == :down || direction == :up
@@ -208,8 +188,6 @@ module TestaAppiumDriver
208
188
 
209
189
  w3c_action(x0, y0, x1, y1, type)
210
190
 
211
- @driver.enable_implicit_wait
212
- @driver.enable_wait_for_idle
213
191
  end
214
192
 
215
193
 
@@ -250,7 +228,7 @@ module TestaAppiumDriver
250
228
 
251
229
 
252
230
 
253
- def drag_to(x, y)
231
+ def w3c_drag_to(x, y)
254
232
  x0 = @bounds.center.x
255
233
  y0 = @bounds.center.y
256
234
  w3c_action(x0, y0, x, y, SCROLL_ACTION_TYPE_DRAG)
@@ -3,19 +3,24 @@ require_relative 'scroll_actions/w3c_scroll_actions'
3
3
 
4
4
 
5
5
  module TestaAppiumDriver
6
- #noinspection RubyResolve,RubyTooManyInstanceVariablesInspection
7
- class ScrollActions
8
6
 
7
+ # Class for handling scroll actions
8
+ class ScrollActions
9
+ # @param [TestaAppiumDriver::Locator, nil] scrollable container that will be used to determine the bounds for scrolling
10
+ # @param [Hash] params
11
+ # acceptable params
12
+ # - locator - element that should be found with scrolling actions
13
+ # - deadzone - [Hash] that stores top, bottom, left and right deadzone values. If deadzone[:top] is 200 then 200px from top of the scrollable container will not be used for scrolling
14
+ # - max_scrolls - [Integer] maximum number of scrolls before exception is thrown
15
+ # - default_scroll_strategy - defines which scroll strategy will be used if a scroll action is valid for multiple strategies
9
16
  def initialize(scrollable, params = {})
10
17
  @scrollable = scrollable
11
18
  @locator = params[:locator]
12
19
  @deadzone = params[:deadzone]
13
- @direction = params[:direction]
14
20
  @max_scrolls = params[:max_scrolls]
15
21
  @default_scroll_strategy = params[:default_scroll_strategy]
16
22
  @driver = @locator.driver
17
23
 
18
- @raise = params[:raise]
19
24
 
20
25
  if @scrollable.nil?
21
26
  # if we dont have a scrollable element or if we do have it, but it is not compatible with uiautomator
@@ -35,16 +40,33 @@ module TestaAppiumDriver
35
40
  end
36
41
 
37
42
 
38
- def align(with)
39
- w3c_align(with)
43
+ def align(with, scroll_to_find)
44
+ w3c_align(with, scroll_to_find)
40
45
  @locator
41
46
  end
42
47
 
43
48
  # @return [Array]
44
- def each(skip_scroll_to_start, &block)
45
- w3c_each(skip_scroll_to_start, &block)
49
+ def each(&block)
50
+ w3c_each(nil, &block)
51
+ end
52
+
53
+ def each_down(&block)
54
+ w3c_each(:down, &block)
55
+ end
56
+
57
+ def each_up(&block)
58
+ w3c_each(:up, &block)
46
59
  end
47
60
 
61
+ def each_right(&block)
62
+ w3c_each(:right, &block)
63
+ end
64
+
65
+ def each_left(&block)
66
+ w3c_each(:left, &block)
67
+ end
68
+
69
+
48
70
  def resolve_strategy
49
71
  if @strategy.nil?
50
72
  @default_scroll_strategy
@@ -1,19 +1,19 @@
1
1
  module Selenium
2
2
  module WebDriver
3
- #noinspection RubyClassVariableUsageInspection
4
3
  class Element
4
+ # sets the testa appium driver instance for the current phone
5
5
  def self.set_driver(driver, udid)
6
6
  udid = "unknown" if udid.nil?
7
7
  @@drivers ||= {}
8
8
  @@drivers[udid] = driver
9
9
  end
10
10
 
11
+ # @return [TestaAppiumDriver::Driver] testa appium driver instance for the current phone
11
12
  def get_driver
12
13
  udid = @bridge.capabilities.instance_variable_get(:@capabilities)["udid"]
13
14
  udid = "unknown" if udid.nil?
14
15
  @@drivers[udid]
15
16
  end
16
-
17
17
  end
18
18
  end
19
19
  end
@@ -24,11 +24,13 @@ module TestaAppiumDriver
24
24
  attr_reader :automation_name
25
25
 
26
26
  # custom options
27
- # - default_strategy: default strategy to be used for finding elements. Available strategies :uiautomator or :xpath
27
+ # - default_find_strategy: default strategy to be used for finding elements. Available strategies :uiautomator or :xpath
28
+ # - default_scroll_strategy: default strategy to be used for scrolling. Available strategies: :uiautomator(android only), :w3c
28
29
  def initialize(opts = {})
29
30
  @testa_opts = opts[:testa_appium_driver] || {}
30
31
 
31
-
32
+ @wait_for_idle_disabled = false
33
+ @implicit_wait_disabled = false
32
34
 
33
35
  core = Appium::Core.for(opts)
34
36
  extend_for(core.device, core.automation_name)
@@ -38,14 +40,15 @@ module TestaAppiumDriver
38
40
  handle_testa_opts
39
41
 
40
42
  @driver = core.start_driver
41
- invalidate_cache!
43
+ invalidate_cache
42
44
 
43
45
 
44
46
  Selenium::WebDriver::Element.set_driver(self, opts[:caps][:udid])
45
47
  end
46
48
 
47
49
 
48
- def invalidate_cache!
50
+ # invalidates current find_element cache
51
+ def invalidate_cache
49
52
  @cache = {
50
53
  strategy: nil,
51
54
  selector: nil,
@@ -58,44 +61,61 @@ module TestaAppiumDriver
58
61
 
59
62
 
60
63
 
61
- #noinspection RubyScope
64
+ # Executes the find_element with the resolved locator strategy and selector. Find_element might be skipped if cache is hit.
65
+ # Cache stores last executed find_element with given selector, strategy and from_element. If given values are the same within
66
+ # last 5 seconds element is retrieved from cache.
62
67
  # @param [TestaAppiumDriver::Locator, TestaAppiumDriver::Driver] from_element element from which start the search
63
- # @param [String] selector resolved string of a [TestaAppiumDriver::Locator] selector xpath for xpath strategy, java UiSelectors for uiautomator
64
68
  # @param [Boolean] single fetch single or multiple results
65
- # @param [Symbol, nil] strategy [TestaAppiumDriver:FIND_STRATEGY_UIAUTOMATOR] or [FIND_STRATEGY_XPATH]
66
- # @param [Symbol] default_strategy if strategy is not enforced, default can be used
69
+ # @param [Array<Hash>] strategies_and_selectors array of usable strategies and selectors
67
70
  # @param [Boolean] skip_cache to skip checking and storing cache
68
71
  # @return [Selenium::WebDriver::Element, Array] element is returned if single is true, array otherwise
69
- def execute(from_element, selector, single, strategy, default_strategy, skip_cache = false)
72
+ def execute(from_element, single, strategies_and_selectors, skip_cache = false, ignore_implicit_wait = false)
70
73
 
71
74
  # if user wants to wait for element to exist, he can use wait_until_present
72
75
  disable_wait_for_idle
76
+ disable_implicit_wait
77
+ start_time = Time.now.to_f
78
+ ss_index = 0
79
+
73
80
 
74
81
 
75
- # if not restricted to a strategy, use the default one
76
- strategy = default_strategy if strategy.nil?
77
82
 
78
83
  # resolve from_element unique id, so that we can cache it properly
79
- from_element_id = from_element.kind_of?(TestaAppiumDriver::Locator) ? from_element.strategy_and_selector[1] : nil
84
+ from_element_id = from_element.instance_of?(TestaAppiumDriver::Locator) ? from_element.strategies_and_selectors : nil
80
85
 
81
- puts "Executing #{from_element_id ? "from #{from_element.strategy}: #{from_element.strategy_and_selector} => " : ""}#{strategy}: #{selector}"
82
86
  begin
83
- if @cache[:selector] != selector || # cache miss, selector is different
87
+ ss = strategies_and_selectors[ss_index % strategies_and_selectors.count]
88
+ ss_index +=1
89
+
90
+ puts "Executing #{from_element_id ? "from #{from_element.strategy}: #{from_element.strategies_and_selectors} => " : ""}#{ss.keys[0]}: #{ss.values[0]}"
91
+
92
+ if @cache[:selector] != ss.values[0] || # cache miss, selector is different
84
93
  @cache[:time] + 5 <= Time.now || # cache miss, older than 5 seconds
85
- @cache[:strategy] != strategy || # cache miss, different find strategy
94
+ @cache[:strategy] != ss.keys[0] || # cache miss, different find strategy
86
95
  @cache[:from_element_id] != from_element_id || # cache miss, search is started from different element
87
96
  skip_cache # cache is skipped
88
97
 
89
- if single
90
- execute_result = from_element.find_element("#{strategy}": selector)
98
+ if ss.keys[0] == FIND_STRATEGY_IMAGE
99
+ set_find_by_image_settings(ss.values[0].dup)
100
+ if single
101
+ execute_result = from_element.find_element_by_image(ss.values[0][:image])
102
+ else
103
+ execute_result = from_element.find_elements_by_image(ss.values[0][:image])
104
+ end
105
+ restore_set_by_image_settings
91
106
  else
92
- execute_result = from_element.find_elements("#{strategy}": selector)
107
+ if single
108
+ execute_result = from_element.find_element(ss)
109
+ else
110
+ execute_result = from_element.find_elements(ss)
111
+ end
93
112
  end
94
113
 
95
114
 
115
+
96
116
  unless skip_cache
97
- @cache[:selector] = selector
98
- @cache[:strategy] = strategy
117
+ @cache[:selector] = ss.values[0]
118
+ @cache[:strategy] = ss.keys[0]
99
119
  @cache[:time] = Time.now
100
120
  @cache[:from_element_id] = from_element_id
101
121
  @cache[:element] = execute_result
@@ -106,8 +126,14 @@ module TestaAppiumDriver
106
126
  puts "Using cache from #{@cache[:time].strftime("%H:%M:%S.%L")}, strategy: #{@cache[:strategy]}"
107
127
  end
108
128
  rescue => e
109
- raise e
129
+ if (start_time + @implicit_wait_ms/1000 < Time.now.to_f && !ignore_implicit_wait) || ss_index < strategies_and_selectors.count
130
+ sleep EXISTS_WAIT if ss_index >= strategies_and_selectors.count
131
+ retry
132
+ else
133
+ raise e
134
+ end
110
135
  ensure
136
+ enable_implicit_wait
111
137
  enable_wait_for_idle
112
138
  end
113
139
 
@@ -116,39 +142,80 @@ module TestaAppiumDriver
116
142
 
117
143
 
118
144
  # method missing is used to forward methods to the actual appium driver
145
+ # after the method is executed, find element cache is invalidated
119
146
  def method_missing(method, *args, &block)
120
- @driver.send(method, *args, &block)
147
+ r = @driver.send(method, *args, &block)
148
+ invalidate_cache
149
+ r
121
150
  end
122
151
 
152
+ # disables implicit wait
123
153
  def disable_implicit_wait
124
- @implicit_wait_ms = @driver.get_timeouts["implicit"]
125
- @driver.manage.timeouts.implicit_wait = 0
154
+ unless @implicit_wait_disabled
155
+ @implicit_wait_ms = @driver.get_timeouts["implicit"]
156
+ @implicit_wait_uiautomator_ms = @driver.get_settings["waitForSelectorTimeout"]
157
+ @driver.manage.timeouts.implicit_wait = 0
158
+ @driver.update_settings({waitForSelectorTimeout: 0})
159
+ @implicit_wait_disabled = true
160
+ end
126
161
  end
127
162
 
163
+ # enables implicit wait, can be called only after disabling implicit wait
128
164
  def enable_implicit_wait
129
- raise "Implicit wait is not disabled" if @implicit_wait_ms.nil?
165
+ raise "Implicit wait is not disabled" unless @implicit_wait_disabled
130
166
  # get_timeouts always returns in milliseconds, but we should set in seconds
131
167
  @driver.manage.timeouts.implicit_wait = @implicit_wait_ms / 1000
168
+ @driver.update_settings({waitForSelectorTimeout: @implicit_wait_uiautomator_ms})
169
+ @implicit_wait_disabled = false
132
170
  end
133
171
 
172
+ # disables wait for idle, only executed for android devices
134
173
  def disable_wait_for_idle
135
- if @device == :android
136
- @wait_for_idle_timeout = @driver.settings.get["waitForIdleTimeout"]
137
- @driver.update_settings({waitForIdleTimeout: 0})
174
+ unless @wait_for_idle_disabled
175
+ if @device == :android
176
+ @wait_for_idle_timeout = @driver.settings.get["waitForIdleTimeout"]
177
+ @driver.update_settings({waitForIdleTimeout: 0})
178
+ end
179
+ @wait_for_idle_disabled = true
138
180
  end
139
181
  end
140
182
 
183
+ # enables wait for idle, only executed for android devices
141
184
  def enable_wait_for_idle
142
185
  if @device == :android
143
- raise "Wait for idle is not disabled" if @wait_for_idle_timeout.nil?
186
+ raise "Wait for idle is not disabled" unless @wait_for_idle_disabled
144
187
  @driver.update_settings({waitForIdleTimeout: @wait_for_idle_timeout})
145
188
  end
146
189
  end
147
190
 
191
+ def set_find_by_image_settings(settings)
192
+ settings.delete(:image)
193
+ @default_find_image_settings = {}
194
+ old_settings = @driver.get_settings
195
+ @default_find_image_settings[:imageMatchThreshold] = old_settings["imageMatchThreshold"]
196
+ @default_find_image_settings[:fixImageFindScreenshotDims] = old_settings["fixImageFindScreenshotDims"]
197
+ @default_find_image_settings[:fixImageTemplateSize] = old_settings["fixImageTemplateSize"]
198
+ @default_find_image_settings[:fixImageTemplateScale] = old_settings["fixImageTemplateScale"]
199
+ @default_find_image_settings[:defaultImageTemplateScale] = old_settings["defaultImageTemplateScale"]
200
+ @default_find_image_settings[:checkForImageElementStaleness] = old_settings["checkForImageElementStaleness"]
201
+ @default_find_image_settings[:autoUpdateImageElementPosition] = old_settings["autoUpdateImageElementPosition"]
202
+ @default_find_image_settings[:imageElementTapStrategy] = old_settings["imageElementTapStrategy"]
203
+ @default_find_image_settings[:getMatchedImageResult] = old_settings["getMatchedImageResult"]
204
+
205
+ @driver.update_settings(settings)
206
+ end
207
+
208
+ def restore_set_by_image_settings
209
+ @driver.update_settings(@default_find_image_settings) if @default_find_image_settings
210
+ end
211
+
212
+
213
+ # @@return [String] current package under test
148
214
  def current_package
149
215
  @driver.current_package
150
216
  end
151
217
 
218
+
152
219
  def window_size
153
220
  @driver.window_size
154
221
  end
@@ -175,6 +242,9 @@ module TestaAppiumDriver
175
242
  end
176
243
 
177
244
 
245
+
246
+
247
+ # @return [Array<Selenium::WebDriver::Element] array of 2 elements, the first element without children and the last element without children in the current page
178
248
  def first_and_last_leaf(from_element = @driver)
179
249
  disable_wait_for_idle
180
250
  disable_implicit_wait
@@ -7,6 +7,20 @@ module TestaAppiumDriver
7
7
  include TypeSelectors
8
8
 
9
9
 
10
+
11
+ # @param params [Hash]
12
+ # @return [TestaAppiumDriver::Locator] first scrollable element
13
+ def scrollable(params = {})
14
+ scroll_view(params)
15
+ end
16
+
17
+ # @param params [Hash]
18
+ # @return [TestaAppiumDriver::Locator] first scrollable element
19
+ def scrollables(params = {})
20
+ scroll_views(params)
21
+ end
22
+
23
+ private
10
24
  def handle_testa_opts
11
25
  if @testa_opts[:default_find_strategy].nil?
12
26
  @default_find_strategy = DEFAULT_IOS_FIND_STRATEGY
@@ -1,7 +1,6 @@
1
1
  require_relative 'locator/attributes'
2
2
 
3
3
  module TestaAppiumDriver
4
- #noinspection RubyTooManyInstanceVariablesInspection
5
4
  class Locator
6
5
  include TypeSelectors
7
6
 
@@ -24,15 +23,21 @@ module TestaAppiumDriver
24
23
  end
25
24
 
26
25
 
27
- def strategy_and_selector
26
+ # @return [Array] returns 2 elements. The first is the resolved find element strategy and the second is the resolved selector
27
+ def strategies_and_selectors
28
+ ss = []
28
29
  if @can_use_id_strategy
29
- return FIND_STRATEGY_NAME, @can_use_id_strategy
30
+ ss.push({"#{FIND_STRATEGY_NAME}": @can_use_id_strategy})
30
31
  end
31
- [FIND_STRATEGY_XPATH, @xpath_selector]
32
+
33
+ ss.push({"#{FIND_STRATEGY_XPATH}": @xpath_selector}) if @strategy.nil? || @strategy == FIND_STRATEGY_XPATH
34
+ ss.push({"#{FIND_STRATEGY_IMAGE}": @image_selector}) if @strategy == FIND_STRATEGY_IMAGE
35
+ ss
32
36
  end
33
37
 
34
38
 
35
- # @return [Locator] existing locator element
39
+
40
+ # @return [Locator] new child locator element
36
41
  def add_child_selector(params)
37
42
  params, selectors = extract_selectors_from_params(params)
38
43
  single = params[:single]
@@ -111,19 +111,6 @@ module TestaAppiumDriver
111
111
  end
112
112
 
113
113
 
114
- # @param params [Hash]
115
- # @return [TestaAppiumDriver::Locator] first scrollable element
116
- def scrollable(params = {})
117
- scroll_view(params)
118
- end
119
-
120
- # @param params [Hash]
121
- # @return [TestaAppiumDriver::Locator] first scrollable element
122
- def scrollables(params = {})
123
- scroll_views(params)
124
- end
125
-
126
-
127
114
  # @return [TestaAppiumDriver::Locator]
128
115
  def scroll_view(params = {})
129
116
  params[:type] = "XCUIElementTypeScrollView"
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
- module TestaAppiumDriver
4
- VERSION = "0.1.3"
5
- end
1
+ # frozen_string_literal: true
2
+
3
+ module TestaAppiumDriver
4
+ VERSION = "0.1.7"
5
+ end
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.require_paths = ["lib"]
32
32
 
33
33
  spec.add_runtime_dependency "appium_lib_core", ["= 4.7.0"]
34
- spec.add_runtime_dependency "json", [">= 2.3.0"]
34
+ spec.add_runtime_dependency "json", ["~> 2.3"]
35
35
 
36
36
  spec.add_development_dependency "rubocop", ["= 1.19.0"]
37
37
  spec.add_development_dependency "rake", ["~> 13.0"]
@@ -11,12 +11,12 @@
11
11
  <orderEntry type="sourceFolder" forTests="false" />
12
12
  <orderEntry type="library" scope="PROVIDED" name="appium_lib_core (v4.7.0, ruby-2.6.5-p114) [gem]" level="application" />
13
13
  <orderEntry type="library" scope="PROVIDED" name="ast (v2.4.2, ruby-2.6.5-p114) [gem]" level="application" />
14
- <orderEntry type="library" scope="PROVIDED" name="bundler (v2.2.25, ruby-2.6.5-p114) [gem]" level="application" />
14
+ <orderEntry type="library" scope="PROVIDED" name="bundler (v2.2.24, ruby-2.6.5-p114) [gem]" level="application" />
15
15
  <orderEntry type="library" scope="PROVIDED" name="childprocess (v3.0.0, ruby-2.6.5-p114) [gem]" level="application" />
16
16
  <orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.4.4, ruby-2.6.5-p114) [gem]" level="application" />
17
17
  <orderEntry type="library" scope="PROVIDED" name="eventmachine (v1.2.7, ruby-2.6.5-p114) [gem]" level="application" />
18
18
  <orderEntry type="library" scope="PROVIDED" name="faye-websocket (v0.11.1, ruby-2.6.5-p114) [gem]" level="application" />
19
- <orderEntry type="library" scope="PROVIDED" name="json (v2.1.0, ruby-2.6.5-p114) [gem]" level="application" />
19
+ <orderEntry type="library" scope="PROVIDED" name="json (v2.5.1, ruby-2.6.5-p114) [gem]" level="application" />
20
20
  <orderEntry type="library" scope="PROVIDED" name="parallel (v1.20.1, ruby-2.6.5-p114) [gem]" level="application" />
21
21
  <orderEntry type="library" scope="PROVIDED" name="parser (v3.0.2.0, ruby-2.6.5-p114) [gem]" level="application" />
22
22
  <orderEntry type="library" scope="PROVIDED" name="rainbow (v3.0.0, ruby-2.6.5-p114) [gem]" level="application" />
@@ -28,8 +28,8 @@
28
28
  <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.10.1, ruby-2.6.5-p114) [gem]" level="application" />
29
29
  <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.10.2, ruby-2.6.5-p114) [gem]" level="application" />
30
30
  <orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.10.2, ruby-2.6.5-p114) [gem]" level="application" />
31
- <orderEntry type="library" scope="PROVIDED" name="rubocop (v1.19.0, ruby-2.6.5-p114) [gem]" level="application" />
32
- <orderEntry type="library" scope="PROVIDED" name="rubocop-ast (v1.10.0, ruby-2.6.5-p114) [gem]" level="application" />
31
+ <orderEntry type="library" scope="PROVIDED" name="rubocop (v1.20.0, ruby-2.6.5-p114) [gem]" level="application" />
32
+ <orderEntry type="library" scope="PROVIDED" name="rubocop-ast (v1.11.0, ruby-2.6.5-p114) [gem]" level="application" />
33
33
  <orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.11.0, ruby-2.6.5-p114) [gem]" level="application" />
34
34
  <orderEntry type="library" scope="PROVIDED" name="rubyzip (v2.3.2, ruby-2.6.5-p114) [gem]" level="application" />
35
35
  <orderEntry type="library" scope="PROVIDED" name="selenium-webdriver (v3.142.7, ruby-2.6.5-p114) [gem]" level="application" />
@@ -39,7 +39,41 @@
39
39
  </component>
40
40
  <component name="RakeTasksCache">
41
41
  <option name="myRootTask">
42
- <RakeTaskImpl id="rake" />
42
+ <RakeTaskImpl id="rake">
43
+ <subtasks>
44
+ <RakeTaskImpl description="Build testa_appium_driver-0.1.5.gem into the pkg directory" fullCommand="build" id="build" />
45
+ <RakeTaskImpl id="build">
46
+ <subtasks>
47
+ <RakeTaskImpl description="Generate SHA512 checksum if testa_appium_driver-0.1.5.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
48
+ </subtasks>
49
+ </RakeTaskImpl>
50
+ <RakeTaskImpl description="Remove any temporary products" fullCommand="clean" id="clean" />
51
+ <RakeTaskImpl description="Remove any generated files" fullCommand="clobber" id="clobber" />
52
+ <RakeTaskImpl description="Build and install testa_appium_driver-0.1.5.gem into system gems" fullCommand="install" id="install" />
53
+ <RakeTaskImpl id="install">
54
+ <subtasks>
55
+ <RakeTaskImpl description="Build and install testa_appium_driver-0.1.5.gem into system gems without network access" fullCommand="install:local" id="local" />
56
+ </subtasks>
57
+ </RakeTaskImpl>
58
+ <RakeTaskImpl description="Create tag v0.1.5 and build and push testa_appium_driver-0.1.5.gem to rubygems.org" fullCommand="release[remote]" id="release[remote]" />
59
+ <RakeTaskImpl description="Run RuboCop" fullCommand="rubocop" id="rubocop" />
60
+ <RakeTaskImpl id="rubocop">
61
+ <subtasks>
62
+ <RakeTaskImpl description="Auto-correct RuboCop offenses" fullCommand="rubocop:auto_correct" id="auto_correct" />
63
+ </subtasks>
64
+ </RakeTaskImpl>
65
+ <RakeTaskImpl description="Run RSpec code examples" fullCommand="spec" id="spec" />
66
+ <RakeTaskImpl description="" fullCommand="default" id="default" />
67
+ <RakeTaskImpl description="" fullCommand="release" id="release" />
68
+ <RakeTaskImpl id="release">
69
+ <subtasks>
70
+ <RakeTaskImpl description="" fullCommand="release:guard_clean" id="guard_clean" />
71
+ <RakeTaskImpl description="" fullCommand="release:rubygem_push" id="rubygem_push" />
72
+ <RakeTaskImpl description="" fullCommand="release:source_control_push" id="source_control_push" />
73
+ </subtasks>
74
+ </RakeTaskImpl>
75
+ </subtasks>
76
+ </RakeTaskImpl>
43
77
  </option>
44
78
  </component>
45
79
  </module>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: testa_appium_driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - karlo.razumovic
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-23 00:00:00.000000000 Z
11
+ date: 2021-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: appium_lib_core
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.3.0
33
+ version: '2.3'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 2.3.0
40
+ version: '2.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rubocop
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,7 @@ files:
80
80
  - ".idea/inspectionProfiles/Project_Default.xml"
81
81
  - ".idea/misc.xml"
82
82
  - ".idea/modules.xml"
83
+ - ".idea/runConfigurations.xml"
83
84
  - ".idea/runConfigurations/Android_Test.xml"
84
85
  - ".idea/sshConfigs.xml"
85
86
  - ".idea/vcs.xml"