testa_appium_driver 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57c9443d16200ae583fc1d8a4cae4b27890566bfd0cd919dc7aae5b7e9f371f9
4
- data.tar.gz: 4fd4ec8bd0b7bb3f0f9ccea250873878e17553ef06993d7f11d8c03db224a065
3
+ metadata.gz: eb79ce18b9e98f651e83630eff7efe2d71d77031231f88c04521e7d4f1baf483
4
+ data.tar.gz: 94d1b8a88844c8726b1b87cd500ca07842b7b92190df7ef223f2cac4f929c9d9
5
5
  SHA512:
6
- metadata.gz: abadbdf89242733883b65c781d2b6875a7a373f5667a7aab7ba4c77bd13bacc4069d7a9ac031d3cc541bc292c9dd48e5bf520dff9dcbb996b8abe6bc5e565e1a
7
- data.tar.gz: 221a32b22c15d0ee23a75cb65fb61862700ff176c13a8fd573878a83896f65f518401a768218b3460fcaef12dc32780199a0e96fa718f07c3a8ac9d43087f0a4
6
+ metadata.gz: 9c2abf9c966c5e8d192c52e48226fcf0d73994315b3d865e48ce03f41aced48f3785dcaf7d46fd26b6e21fa51e0035cae6b00e416fffde3ae1ab0a5cf703b982
7
+ data.tar.gz: e7e087b4b4227eb4d355df738f53d4ea72903b80fe51d3408c8c7ec6ac855a2066f40882dbae55de3418a1827895bcbefa14aa9b3322d767e22cd94393c1a67c
data/.idea/deployment.xml CHANGED
@@ -1,14 +1,22 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <project version="4">
3
- <component name="PublishConfigData">
3
+ <component name="PublishConfigData" autoUpload="On explicit save action" serverName="supertesta.com" autoUploadExternalChanges="true">
4
4
  <serverData>
5
5
  <paths name="supertesta.com">
6
6
  <serverdata>
7
7
  <mappings>
8
- <mapping local="$PROJECT_DIR$" web="/" />
8
+ <mapping deploy="/testa_docker/path_data/testa_appium_driver" local="$PROJECT_DIR$" web="/" />
9
+ </mappings>
10
+ </serverdata>
11
+ </paths>
12
+ <paths name="testa.fun">
13
+ <serverdata>
14
+ <mappings>
15
+ <mapping deploy="/testa_docker/path_data/testa_appium_driver" local="$PROJECT_DIR$" web="/" />
9
16
  </mappings>
10
17
  </serverdata>
11
18
  </paths>
12
19
  </serverData>
20
+ <option name="myAutoUpload" value="ON_EXPLICIT_SAVE" />
13
21
  </component>
14
22
  </project>
data/.idea/sshConfigs.xml CHANGED
@@ -5,6 +5,9 @@
5
5
  <sshConfig authType="PASSWORD" host="supertesta.com" id="ea45cb27-d516-4292-a1f7-430f02857685" port="22" customName="Supertesta.com" nameFormat="CUSTOM" username="testa">
6
6
  <option name="customName" value="Supertesta.com" />
7
7
  </sshConfig>
8
+ <sshConfig authType="PASSWORD" host="testa.fun" id="54640192-a130-4edc-ac3c-f3bc32df1130" port="22" customName="testa.fun" nameFormat="CUSTOM" username="root">
9
+ <option name="customName" value="testa.fun" />
10
+ </sshConfig>
8
11
  </configs>
9
12
  </component>
10
13
  </project>
data/.idea/webServers.xml CHANGED
@@ -9,6 +9,13 @@
9
9
  </advancedOptions>
10
10
  </fileTransfer>
11
11
  </webServer>
12
+ <webServer id="e1897dc5-c089-49e3-802d-1c69de9874a7" name="testa.fun" url="http://something">
13
+ <fileTransfer rootFolder="/ruby_apps" accessType="SFTP" host="testa.fun" port="22" sshConfigId="54640192-a130-4edc-ac3c-f3bc32df1130" sshConfig="testa.fun">
14
+ <advancedOptions>
15
+ <advancedOptions dataProtectionLevel="Private" keepAliveTimeout="0" passiveMode="true" shareSSLContext="true" />
16
+ </advancedOptions>
17
+ </fileTransfer>
18
+ </webServer>
12
19
  </option>
13
20
  </component>
14
21
  </project>
@@ -36,15 +36,19 @@ module TestaAppiumDriver
36
36
 
37
37
 
38
38
  # resolve selector which will be used for finding element
39
- def strategy_and_selector
39
+ def strategies_and_selectors
40
+ ss = []
40
41
  if @can_use_id_strategy
41
- return FIND_STRATEGY_ID, @can_use_id_strategy
42
+ ss.push({"#{FIND_STRATEGY_ID}": @can_use_id_strategy})
42
43
  end
43
- if (@strategy.nil? && @default_find_strategy == FIND_STRATEGY_UIAUTOMATOR) || @strategy == FIND_STRATEGY_UIAUTOMATOR
44
- [FIND_STRATEGY_UIAUTOMATOR, ui_selector]
45
- elsif (@strategy.nil? && @default_find_strategy == FIND_STRATEGY_XPATH) || @strategy == FIND_STRATEGY_XPATH
46
- [FIND_STRATEGY_XPATH, @xpath_selector]
44
+ if @strategy.nil? || @strategy == FIND_STRATEGY_UIAUTOMATOR
45
+ ss.push({"#{FIND_STRATEGY_UIAUTOMATOR}": ui_selector})
47
46
  end
47
+
48
+ if @strategy.nil? || @strategy == FIND_STRATEGY_XPATH
49
+ ss.push({"#{FIND_STRATEGY_XPATH}": @xpath_selector})
50
+ end
51
+ ss
48
52
  end
49
53
 
50
54
 
@@ -25,6 +25,8 @@ module TestaAppiumDriver
25
25
  attr_accessor :default_find_strategy
26
26
  attr_accessor :default_scroll_strategy
27
27
 
28
+ attr_accessor :index_for_multiple
29
+
28
30
 
29
31
  # locator parameters are:
30
32
  # single: true or false
@@ -38,6 +40,7 @@ module TestaAppiumDriver
38
40
  def initialize(driver, from_element, params = {})
39
41
  # @type [TestaAppiumDriver::Driver]
40
42
  @driver = driver
43
+ @index_for_multiple = nil
41
44
 
42
45
  params, selectors = extract_selectors_from_params(params)
43
46
  single = params[:single]
@@ -57,7 +60,8 @@ module TestaAppiumDriver
57
60
  @default_find_strategy = params[:default_find_strategy]
58
61
  @default_scroll_strategy = params[:default_scroll_strategy]
59
62
 
60
- @can_use_id_strategy = selectors.keys.count == 1 && !selectors[:id].nil?
63
+
64
+ @can_use_id_strategy = is_only_id_selector?(selectors)
61
65
  if @can_use_id_strategy
62
66
  if @driver.device == :android
63
67
  @can_use_id_strategy = resolve_id(selectors[:id])
@@ -76,10 +80,22 @@ module TestaAppiumDriver
76
80
  end
77
81
 
78
82
 
83
+ def is_only_id_selector?(selectors)
84
+ # since, name and id is the same thing for iOS,
85
+ if @driver.device == :android
86
+ selectors.keys.count == 1 && !selectors[:id].nil?
87
+ else
88
+ # if it iOS we assign the name to id
89
+ selectors.keys.count == 2 && !selectors[:id].nil? && selectors[:id] == selectors[:name]
90
+ end
91
+ end
92
+
93
+
79
94
  # method missing is used to fetch the element before executing additional commands like click, send_key, count
80
95
  def method_missing(method, *args, &block)
81
96
  r = execute.send(method, *args, &block)
82
97
  @driver.invalidate_cache
98
+ r = r[@index_for_multiple] if !@index_for_multiple.nil? && !@single
83
99
  r
84
100
  end
85
101
 
@@ -100,10 +116,12 @@ module TestaAppiumDriver
100
116
 
101
117
 
102
118
 
103
- strategy, selector = strategy_and_selector
104
119
 
105
120
 
106
- @driver.execute(@from_element, selector, @single, strategy, @default_find_strategy, skip_cache)
121
+
122
+ r = @driver.execute(@from_element, @single, strategies_and_selectors, skip_cache)
123
+ r = r[@index_for_multiple] if !@index_for_multiple.nil? && !@single
124
+ r
107
125
  end
108
126
 
109
127
 
@@ -111,12 +129,8 @@ module TestaAppiumDriver
111
129
  # @return [TestaAppiumDriver::Locator]
112
130
  def wait_until_exists(timeout = nil)
113
131
  timeout = @driver.get_timeouts["implicit"] / 1000 if timeout.nil?
114
- start_time = Time.now.to_f
115
- until exists?
116
- raise "wait until exists timeout exceeded" if start_time + timeout < Time.now.to_f
117
- sleep EXISTS_WAIT
118
- end
119
- self
132
+ args = {timeout: timeout}
133
+ _wait(:until, args)
120
134
  end
121
135
 
122
136
 
@@ -124,12 +138,19 @@ module TestaAppiumDriver
124
138
  # @return [TestaAppiumDriver::Locator]
125
139
  def wait_while_exists(timeout = nil)
126
140
  timeout = @driver.get_timeouts["implicit"] / 1000 if timeout.nil?
127
- start_time = Time.now.to_f
128
- while exists?
129
- raise "wait until exists timeout exceeded" if start_time + timeout < Time.now.to_f
130
- sleep EXISTS_WAIT
131
- end
132
- self
141
+ args = {timeout: timeout}
142
+ _wait(:while, args)
143
+ end
144
+
145
+
146
+ def wait_while(timeout = nil, args = {})
147
+ args[:timeout] = timeout
148
+ _wait(:while, args)
149
+ end
150
+
151
+ def wait_until(timeout = nil, args = {})
152
+ args[:timeout] = timeout
153
+ _wait(:until, args)
133
154
  end
134
155
 
135
156
 
@@ -179,7 +200,7 @@ module TestaAppiumDriver
179
200
  locator.can_use_id_strategy = false
180
201
  locator
181
202
  else
182
- from_element = self.execute[instance]
203
+ from_element = self.index_for_multiple = instance
183
204
  params = {}.merge({single: true, scrollable_locator: @scrollable_locator})
184
205
  #params[:strategy] = FIND_STRATEGY_XPATH
185
206
  #params[:strategy_reason] = "retrieved instance of a array"
@@ -216,7 +237,8 @@ module TestaAppiumDriver
216
237
  xpath: @xpath_selector,
217
238
  scrollable: @scrollable_locator.nil? ? nil : @scrollable_locator.to_s,
218
239
  scroll_orientation: @scroll_orientation,
219
- resolved: strategy_and_selector
240
+ resolved: strategies_and_selectors,
241
+ index_for_multiple: @index_for_multiple
220
242
  }
221
243
  end
222
244
 
@@ -401,6 +423,51 @@ module TestaAppiumDriver
401
423
 
402
424
  private
403
425
 
426
+ def _wait(type, args)
427
+ interval = EXISTS_WAIT
428
+ interval = args[:interval] unless args[:interval].nil?
429
+
430
+ message = "wait #{type} exists timeout exceeded"
431
+ message = args[:message] unless args[:message].nil?
432
+
433
+ if args[:timeout].nil?
434
+ timeout = @driver.get_timeouts["implicit"] / 1000
435
+ else
436
+ timeout = args[:timeout]
437
+ end
438
+
439
+ args.delete(:message)
440
+ args.delete(:interval)
441
+ args.delete(:timeout)
442
+
443
+
444
+
445
+ start_time = Time.now.to_f
446
+ if type == :while
447
+ while exists? && _attributes_match(args)
448
+ raise message if start_time + timeout < Time.now.to_f
449
+ sleep interval
450
+ end
451
+ else
452
+ until exists? && _attributes_match(args)
453
+ raise message if start_time + timeout < Time.now.to_f
454
+ sleep interval
455
+ end
456
+ end
457
+ self
458
+ end
459
+
460
+ def _attributes_match(attributes)
461
+ all_match = true
462
+ attributes.each do |key, value|
463
+ unless attribute(key) == value
464
+ all_match = false
465
+ break
466
+ end
467
+ end
468
+ all_match
469
+ end
470
+
404
471
  #noinspection RubyNilAnalysis
405
472
  def perform_driver_method(name, *args)
406
473
  elements = execute
@@ -63,42 +63,46 @@ module TestaAppiumDriver
63
63
  # Cache stores last executed find_element with given selector, strategy and from_element. If given values are the same within
64
64
  # last 5 seconds element is retrieved from cache.
65
65
  # @param [TestaAppiumDriver::Locator, TestaAppiumDriver::Driver] from_element element from which start the search
66
- # @param [String] selector resolved string of a [TestaAppiumDriver::Locator] selector xpath for xpath strategy, java UiSelectors for uiautomator or id for ID strategy
67
66
  # @param [Boolean] single fetch single or multiple results
68
- # @param [Symbol, nil] strategy [TestaAppiumDriver::FIND_STRATEGY_UIAUTOMATOR], [TestaAppiumDriver::FIND_STRATEGY_XPATH] or [TestaAppiumDriver::FIND_STRATEGY_ID]
69
- # @param [Symbol] default_strategy if strategy is not enforced, default can be used
67
+ # @param [Array<Hash>] strategies_and_selectors array of usable strategies and selectors
70
68
  # @param [Boolean] skip_cache to skip checking and storing cache
71
69
  # @return [Selenium::WebDriver::Element, Array] element is returned if single is true, array otherwise
72
- def execute(from_element, selector, single, strategy, default_strategy, skip_cache = false)
70
+ def execute(from_element, single, strategies_and_selectors, skip_cache = false)
73
71
 
74
72
  # if user wants to wait for element to exist, he can use wait_until_present
75
73
  disable_wait_for_idle
74
+ disable_implicit_wait
75
+ start_time = Time.now.to_f
76
+ ss_index = 0
77
+
76
78
 
77
79
 
78
- # if not restricted to a strategy, use the default one
79
- strategy = default_strategy if strategy.nil?
80
80
 
81
81
  # resolve from_element unique id, so that we can cache it properly
82
82
  from_element_id = from_element.kind_of?(TestaAppiumDriver::Locator) ? from_element.strategy_and_selector[1] : nil
83
83
 
84
- puts "Executing #{from_element_id ? "from #{from_element.strategy}: #{from_element.strategy_and_selector} => " : ""}#{strategy}: #{selector}"
85
84
  begin
86
- if @cache[:selector] != selector || # cache miss, selector is different
85
+ ss = strategies_and_selectors[ss_index % strategies_and_selectors.count]
86
+ ss_index +=1
87
+
88
+ puts "Executing #{from_element_id ? "from #{from_element.strategy}: #{from_element.strategy_and_selector} => " : ""}#{ss.keys[0]}: #{ss.values[0]}"
89
+
90
+ if @cache[:selector] != ss.values[0] || # cache miss, selector is different
87
91
  @cache[:time] + 5 <= Time.now || # cache miss, older than 5 seconds
88
- @cache[:strategy] != strategy || # cache miss, different find strategy
92
+ @cache[:strategy] != ss.keys[0] || # cache miss, different find strategy
89
93
  @cache[:from_element_id] != from_element_id || # cache miss, search is started from different element
90
94
  skip_cache # cache is skipped
91
95
 
92
96
  if single
93
- execute_result = from_element.find_element("#{strategy}": selector)
97
+ execute_result = from_element.find_element(ss)
94
98
  else
95
- execute_result = from_element.find_elements("#{strategy}": selector)
99
+ execute_result = from_element.find_elements(ss)
96
100
  end
97
101
 
98
102
 
99
103
  unless skip_cache
100
- @cache[:selector] = selector
101
- @cache[:strategy] = strategy
104
+ @cache[:selector] = ss.values[0]
105
+ @cache[:strategy] = ss.keys[0]
102
106
  @cache[:time] = Time.now
103
107
  @cache[:from_element_id] = from_element_id
104
108
  @cache[:element] = execute_result
@@ -109,8 +113,14 @@ module TestaAppiumDriver
109
113
  puts "Using cache from #{@cache[:time].strftime("%H:%M:%S.%L")}, strategy: #{@cache[:strategy]}"
110
114
  end
111
115
  rescue => e
112
- raise e
116
+ if start_time + @implicit_wait_ms/1000 < Time.now.to_f || ss_index < strategies_and_selectors.count
117
+ sleep EXISTS_WAIT if ss_index >= strategies_and_selectors.count
118
+ retry
119
+ else
120
+ raise e
121
+ end
113
122
  ensure
123
+ enable_implicit_wait
114
124
  enable_wait_for_idle
115
125
  end
116
126
 
@@ -121,9 +131,8 @@ module TestaAppiumDriver
121
131
  # method missing is used to forward methods to the actual appium driver
122
132
  # after the method is executed, find element cache is invalidated
123
133
  def method_missing(method, *args, &block)
124
- r = @driver.send(method, *args, &block)
125
134
  invalidate_cache
126
- r
135
+ @driver.send(method, *args, &block)
127
136
  end
128
137
 
129
138
  # disables implicit wait
@@ -24,11 +24,13 @@ module TestaAppiumDriver
24
24
 
25
25
 
26
26
  # @return [Array] returns 2 elements. The first is the resolved find element strategy and the second is the resolved selector
27
- def strategy_and_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
+ ss.push({"#{FIND_STRATEGY_XPATH}": @xpath_selector})
33
+ ss
32
34
  end
33
35
 
34
36
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TestaAppiumDriver
4
- VERSION = "0.1.5"
4
+ VERSION = "0.1.6"
5
5
  end
@@ -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.1.4, 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.5
4
+ version: 0.1.6
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-24 00:00:00.000000000 Z
11
+ date: 2021-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: appium_lib_core