appium_lib 9.15.1 → 9.15.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +13 -15
  3. data/CHANGELOG.md +8 -0
  4. data/appium_lib.gemspec +7 -10
  5. data/docs/android_docs.md +259 -181
  6. data/docs/ios_docs.md +322 -244
  7. data/docs/ios_xcuitest.md +1 -1
  8. data/docs/w3c.md +21 -0
  9. data/lib/appium_lib/android/common/helper.rb +13 -13
  10. data/lib/appium_lib/android/element/button.rb +2 -0
  11. data/lib/appium_lib/android/element/generic.rb +2 -2
  12. data/lib/appium_lib/android/element/text.rb +2 -0
  13. data/lib/appium_lib/android/element/textfield.rb +2 -0
  14. data/lib/appium_lib/android/uiautomator2/element/button.rb +3 -0
  15. data/lib/appium_lib/android/uiautomator2/helper.rb +10 -8
  16. data/lib/appium_lib/appium.rb +4 -0
  17. data/lib/appium_lib/common/helper.rb +9 -8
  18. data/lib/appium_lib/common/multi_touch.rb +2 -0
  19. data/lib/appium_lib/common/touch_actions.rb +6 -5
  20. data/lib/appium_lib/driver.rb +72 -19
  21. data/lib/appium_lib/ios/common/helper.rb +36 -30
  22. data/lib/appium_lib/ios/element/button.rb +2 -0
  23. data/lib/appium_lib/ios/element/generic.rb +1 -0
  24. data/lib/appium_lib/ios/element/text.rb +2 -0
  25. data/lib/appium_lib/ios/element/textfield.rb +5 -2
  26. data/lib/appium_lib/ios/xcuitest/command/gestures.rb +4 -4
  27. data/lib/appium_lib/ios/xcuitest/element/button.rb +2 -0
  28. data/lib/appium_lib/ios/xcuitest/element/generic.rb +1 -0
  29. data/lib/appium_lib/ios/xcuitest/element/text.rb +2 -0
  30. data/lib/appium_lib/ios/xcuitest/element/textfield.rb +3 -0
  31. data/lib/appium_lib/ios/xcuitest/helper.rb +3 -4
  32. data/lib/appium_lib/version.rb +2 -2
  33. data/release_notes.md +10 -0
  34. metadata +39 -53
@@ -6,6 +6,7 @@ module Appium
6
6
 
7
7
  def start_element(type, attrs = [])
8
8
  return if filter && !filter.eql?(type)
9
+
9
10
  page = attrs.inject({}) do |hash, attr|
10
11
  hash[attr[0]] = attr[1] if %w(name label value hint visible).include?(attr[0])
11
12
  hash
@@ -15,19 +16,17 @@ module Appium
15
16
 
16
17
  # @private
17
18
  def _print_attr(type, name, label, value, hint, visible) # rubocop:disable Metrics/ParameterLists
19
+ puts type.to_s if name || label || value || hint || visible
20
+
18
21
  if name == label && name == value
19
- puts type.to_s if name || label || value || hint || visible
20
22
  puts " name, label, value: #{name}" if name
21
23
  elsif name == label
22
- puts type.to_s if name || label || value || hint || visible
23
24
  puts " name, label: #{name}" if name
24
25
  puts " value: #{value}" if value
25
26
  elsif name == value
26
- puts type.to_s if name || label || value || hint || visible
27
27
  puts " name, value: #{name}" if name
28
28
  puts " label: #{label}" if label
29
29
  else
30
- puts type.to_s if name || label || value || hint || visible
31
30
  puts " name: #{name}" if name
32
31
  puts " label: #{label}" if label
33
32
  puts " value: #{value}" if value
@@ -60,23 +59,23 @@ module Appium
60
59
  def page(opts = {})
61
60
  class_name = opts.is_a?(Hash) ? opts.fetch(:class, nil) : opts
62
61
 
62
+ source = get_source
63
+
63
64
  # current_context may be nil which breaks start_with
64
65
  if current_context && current_context.start_with?('WEBVIEW')
65
- s = get_source
66
66
  parser = @android_html_parser ||= Nokogiri::HTML::SAX::Parser.new(Appium::Common::HTMLElements.new)
67
67
  parser.document.reset
68
68
  parser.document.filter = class_name
69
- parser.parse s
69
+ parser.parse source
70
70
  result = parser.document.result
71
71
  puts result
72
72
  result
73
73
  else
74
- s = get_source
75
74
  parser = Nokogiri::XML::SAX::Parser.new(UITestElementsPrinter.new)
76
75
  if class_name
77
76
  parser.document.filter = class_name.is_a?(Symbol) ? class_name.to_s : class_name
78
77
  end
79
- parser.parse s
78
+ parser.parse source
80
79
  nil
81
80
  end
82
81
  end
@@ -94,6 +93,7 @@ module Appium
94
93
  # @return [Element]
95
94
  def ele_index(class_name, index)
96
95
  raise 'Index must be >= 1' unless index == 'last()' || (index.is_a?(Integer) && index >= 1)
96
+
97
97
  elements = tags(class_name)
98
98
 
99
99
  if index == 'last()'
@@ -105,6 +105,7 @@ module Appium
105
105
  end
106
106
 
107
107
  raise _no_such_element if result.nil?
108
+
108
109
  result
109
110
  end
110
111
 
@@ -147,6 +148,7 @@ module Appium
147
148
  def find_ele_by_predicate(class_name: '*', value:)
148
149
  elements = find_eles_by_predicate(class_name: class_name, value: value)
149
150
  raise _no_such_element if elements.empty?
151
+
150
152
  elements.first
151
153
  end
152
154
 
@@ -156,12 +158,12 @@ module Appium
156
158
  # @param class_name [String] the tag name to match
157
159
  # @return [Array<Element>]
158
160
  def find_eles_by_predicate(class_name: '*', value:)
159
- predicate = if class_name == '*'
160
- %(name ==[c] "#{value}" || label ==[c] "#{value}" || value ==[c] "#{value}")
161
- else
162
- %(type == "#{class_name}" && ) +
163
- %((name ==[c] "#{value}" || label ==[c] "#{value}" || value ==[c] "#{value}"))
164
- end
161
+ predicate = if class_name == '*'
162
+ %(name ==[c] "#{value}" || label ==[c] "#{value}" || value ==[c] "#{value}")
163
+ else
164
+ %(type == "#{class_name}" && ) +
165
+ %((name ==[c] "#{value}" || label ==[c] "#{value}" || value ==[c] "#{value}"))
166
+ end
165
167
  @driver.find_elements :predicate, predicate
166
168
  end
167
169
 
@@ -192,6 +194,7 @@ module Appium
192
194
  def find_ele_by_predicate_include(class_name: '*', value:)
193
195
  elements = find_eles_by_predicate_include(class_name: class_name, value: value)
194
196
  raise _no_such_element if elements.empty?
197
+
195
198
  elements.first
196
199
  end
197
200
 
@@ -280,17 +283,17 @@ module Appium
280
283
  # @return [String]
281
284
  def string_visible_contains(element, value)
282
285
  contains = {
283
- target: value,
284
- substring: true,
286
+ target: value,
287
+ substring: true,
285
288
  insensitive: true
286
289
  }
287
290
 
288
291
  {
289
- typeArray: [element],
292
+ typeArray: [element],
290
293
  onlyVisible: true,
291
- name: contains,
292
- label: contains,
293
- value: contains
294
+ name: contains,
295
+ label: contains,
296
+ value: contains
294
297
  }
295
298
  end
296
299
 
@@ -319,17 +322,17 @@ module Appium
319
322
  # @return [String]
320
323
  def string_visible_exact(element, value)
321
324
  exact = {
322
- target: value,
323
- substring: false,
325
+ target: value,
326
+ substring: false,
324
327
  insensitive: false
325
328
  }
326
329
 
327
330
  {
328
- typeArray: [element],
331
+ typeArray: [element],
329
332
  onlyVisible: true,
330
- name: exact,
331
- label: exact,
332
- value: exact
333
+ name: exact,
334
+ label: exact,
335
+ value: exact
333
336
  }
334
337
  end
335
338
 
@@ -359,6 +362,7 @@ module Appium
359
362
  def _all_pred(opts)
360
363
  predicate = opts[:predicate]
361
364
  raise 'predicate must be provided' unless predicate
365
+
362
366
  visible = opts.fetch :visible, true
363
367
  %($.mainApp().getAllWithPredicate("#{predicate}", #{visible});)
364
368
  end
@@ -386,10 +390,11 @@ module Appium
386
390
 
387
391
  def _validate_object(*objects)
388
392
  raise 'objects must be an array' unless objects.is_a? Array
393
+
389
394
  objects.each do |obj|
390
395
  next unless obj # obj may be nil. if so, ignore.
391
396
 
392
- valid_keys = [:target, :substring, :insensitive]
397
+ valid_keys = %i[target substring insensitive]
393
398
  unknown_keys = obj.keys - valid_keys
394
399
  raise "Unknown keys: #{unknown_keys}" unless unknown_keys.empty?
395
400
 
@@ -434,7 +439,7 @@ module Appium
434
439
  # }
435
440
  #
436
441
  def _by_json(opts)
437
- valid_keys = [:typeArray, :onlyFirst, :onlyVisible, :name, :label, :value]
442
+ valid_keys = %i(typeArray onlyFirst onlyVisible name label value)
438
443
  unknown_keys = opts.keys - valid_keys
439
444
  raise "Unknown keys: #{unknown_keys}" unless unknown_keys.empty?
440
445
 
@@ -468,7 +473,7 @@ module Appium
468
473
  JS
469
474
 
470
475
  res = execute_script element_or_elements_by_type
471
- res ? res : raise(Appium::Ios::CommandError, 'mainWindow is nil')
476
+ res || raise(Appium::Ios::CommandError, 'mainWindow is nil')
472
477
  end
473
478
 
474
479
  # For Appium(automation name), not XCUITest
@@ -491,8 +496,9 @@ module Appium
491
496
  # see eles_by_json
492
497
  def ele_by_json(opts)
493
498
  opts[:onlyFirst] = true
494
- result = _by_json(opts).first
499
+ result = _by_json(opts).first
495
500
  raise _no_such_element if result.nil?
501
+
496
502
  result
497
503
  end
498
504
  end # module Ios
@@ -16,6 +16,7 @@ module Appium
16
16
  def button(value)
17
17
  # return button at index.
18
18
  return ele_index button_class, value if value.is_a? Numeric
19
+
19
20
  ele_by_json_visible_contains button_class, value
20
21
  end
21
22
 
@@ -25,6 +26,7 @@ module Appium
25
26
  # @return [Array<UIAButton|XCUIElementTypeButton>]
26
27
  def buttons(value = false)
27
28
  return tags button_class unless value
29
+
28
30
  eles_by_json_visible_contains button_class, value
29
31
  end
30
32
 
@@ -33,6 +33,7 @@ module Appium
33
33
  def raise_error_if_no_element(element)
34
34
  error_message = 'An element could not be located on the page using the given search parameters.'
35
35
  raise(::Selenium::WebDriver::Error::NoSuchElementError, error_message) if element.nil?
36
+
36
37
  element
37
38
  end
38
39
 
@@ -15,6 +15,7 @@ module Appium
15
15
  # @return [UIAStaticText|XCUIElementTypeStaticText]
16
16
  def text(value)
17
17
  return ele_index static_text_class, value if value.is_a? Numeric
18
+
18
19
  ele_by_json_visible_contains static_text_class, value
19
20
  end
20
21
 
@@ -24,6 +25,7 @@ module Appium
24
25
  # @return [Array<UIAStaticText|XCUIElementTypeStaticText>]
25
26
  def texts(value = false)
26
27
  return tags static_text_class unless value
28
+
27
29
  eles_by_json_visible_contains static_text_class, value
28
30
  end
29
31
 
@@ -25,11 +25,12 @@ module Appium
25
25
  if value.is_a? Numeric
26
26
  index = value
27
27
  raise "#{index} is not a valid index. Must be >= 1" if index <= 0
28
+
28
29
  index -= 1 # eles_by_json and _textfields_with_predicate is 0 indexed.
29
30
  result = eles_by_json(_textfield_visible)[index]
30
31
  raise _no_such_element if result.nil?
31
- return result
32
32
 
33
+ return result
33
34
  end
34
35
 
35
36
  ele_by_json _textfield_contains_string value
@@ -41,6 +42,7 @@ module Appium
41
42
  # @return [Array<TextField>]
42
43
  def textfields(value = false)
43
44
  return eles_by_json _textfield_visible unless value
45
+
44
46
  eles_by_json _textfield_contains_string value
45
47
  end
46
48
 
@@ -55,6 +57,7 @@ module Appium
55
57
  def last_textfield
56
58
  result = eles_by_json(_textfield_visible).last
57
59
  raise _no_such_element if result.nil?
60
+
58
61
  result
59
62
  end
60
63
 
@@ -82,7 +85,7 @@ module Appium
82
85
  # Appium
83
86
  def _textfield_exact_string(value)
84
87
  exact = { target: value, substring: false, insensitive: false }
85
- exact_obj = { name: exact, label: exact, value: exact }
88
+ exact_obj = { name: exact, label: exact, value: exact }
86
89
  _textfield_visible.merge(exact_obj)
87
90
  end
88
91
 
@@ -36,7 +36,7 @@ module Appium
36
36
  predicate_string: nil)
37
37
  return 'Set "up", "down", "left" or "right" for :direction' unless %w(up down left right).include?(direction)
38
38
 
39
- args = { direction: direction }
39
+ args = { direction: direction }
40
40
  args[:element] = element.ref if element
41
41
  args[:distance] = distance if distance
42
42
  args[:name] = name if name
@@ -68,7 +68,7 @@ module Appium
68
68
  # double_tap x: 100, y: 100
69
69
  # double_tap element: find_element(:accessibility_id, "some item")
70
70
  # ```
71
- def double_tap(x: nil, y: nil, element: nil)
71
+ def double_tap(x: nil, y: nil, element: nil) # rubocop:disable Naming/UncommunicativeMethodParamName
72
72
  return 'Set x, y or element' if (x.nil? || y.nil?) && element.nil?
73
73
 
74
74
  args = element.nil? ? { x: x, y: y } : { element: element.ref }
@@ -85,7 +85,7 @@ module Appium
85
85
  # touch_and_hold x: 100, y: 100, duration: 2.0
86
86
  # touch_and_hold element: find_element(:accessibility_id, "some item")
87
87
  # ```
88
- def touch_and_hold(x: nil, y: nil, element: nil, duration: 1.0)
88
+ def touch_and_hold(x: nil, y: nil, element: nil, duration: 1.0) # rubocop:disable Naming/UncommunicativeMethodParamName
89
89
  return 'Set x, y or element' if (x.nil? || y.nil?) && element.nil?
90
90
 
91
91
  args = element.nil? ? { x: x, y: y } : { element: element.ref }
@@ -113,7 +113,7 @@ module Appium
113
113
  # tap x: 100, y: 100
114
114
  # tap x: 100, y: 100, element: find_element(:accessibility_id, "some item")
115
115
  # ```
116
- def tap(x:, y:, element: nil)
116
+ def tap(x:, y:, element: nil) # rubocop:disable Naming/UncommunicativeMethodParamName
117
117
  args = { x: x, y: y }
118
118
  args[:element] = element.ref if element
119
119
  @driver.execute_script 'mobile: tap', args
@@ -17,6 +17,7 @@ module Appium
17
17
  def button(value)
18
18
  # return button at index.
19
19
  return ele_index button_class, value if value.is_a? Numeric
20
+
20
21
  raise_error_if_no_element buttons(value).first
21
22
  end
22
23
 
@@ -26,6 +27,7 @@ module Appium
26
27
  # @return [Array<UIAButton|XCUIElementTypeButton>]
27
28
  def buttons(value = false)
28
29
  return tags button_class unless value
30
+
29
31
  elements = find_eles_by_predicate_include(class_name: button_class, value: value)
30
32
  select_visible_elements elements
31
33
  end
@@ -37,6 +37,7 @@ module Appium
37
37
  def raise_error_if_no_element(element)
38
38
  error_message = 'An element could not be located on the page using the given search parameters.'
39
39
  raise(::Selenium::WebDriver::Error::NoSuchElementError, error_message) if element.nil?
40
+
40
41
  element
41
42
  end
42
43
 
@@ -16,6 +16,7 @@ module Appium
16
16
  # @return [UIAStaticText|XCUIElementTypeStaticText]
17
17
  def text(value)
18
18
  return ele_index static_text_class, value if value.is_a? Numeric
19
+
19
20
  raise_error_if_no_element texts(value).first
20
21
  end
21
22
 
@@ -25,6 +26,7 @@ module Appium
25
26
  # @return [Array<UIAStaticText|XCUIElementTypeStaticText>]
26
27
  def texts(value = false)
27
28
  return tags static_text_class unless value
29
+
28
30
  elements = find_eles_by_predicate_include(class_name: static_text_class, value: value)
29
31
  select_visible_elements elements
30
32
  end
@@ -24,9 +24,11 @@ module Appium
24
24
  if value.is_a? Numeric
25
25
  index = value
26
26
  raise "#{index} is not a valid index. Must be >= 1" if index <= 0
27
+
27
28
  index -= 1 # eles_by_json and _textfields_with_predicate is 0 indexed.
28
29
  result = _textfields_with_predicate[index]
29
30
  raise _no_such_element if result.nil?
31
+
30
32
  return result
31
33
 
32
34
  end
@@ -56,6 +58,7 @@ module Appium
56
58
  def last_textfield
57
59
  result = _textfields_with_predicate.last
58
60
  raise _no_such_element if result.nil?
61
+
59
62
  result
60
63
  end
61
64
 
@@ -26,6 +26,7 @@ module Appium
26
26
  def last_ele(class_name)
27
27
  visible_elements = tags class_name
28
28
  raise _no_such_element if visible_elements.empty?
29
+
29
30
  visible_elements.last
30
31
  end
31
32
 
@@ -59,8 +60,7 @@ module Appium
59
60
  c_names = class_names.map { |class_name| %(type == "#{class_name}") }.join(' || ')
60
61
 
61
62
  predicate = if value
62
- %((#{c_names}) && ) +
63
- %((name contains[c] "#{value}" || label contains[c] "#{value}" || value contains[c] "#{value}"))
63
+ %((#{c_names}) && (name contains[c] "#{value}" || label contains[c] "#{value}" || value contains[c] "#{value}")) # rubocop:disable Metrics/LineLength
64
64
  else
65
65
  c_names
66
66
  end
@@ -82,8 +82,7 @@ module Appium
82
82
  c_names = class_names.map { |class_name| %(type == "#{class_name}") }.join(' || ')
83
83
 
84
84
  predicate = if value
85
- %((#{c_names}) && ) +
86
- %((name ==[c] "#{value}" || label ==[c] "#{value}" || value ==[c] "#{value}"))
85
+ %((#{c_names}) && (name ==[c] "#{value}" || label ==[c] "#{value}" || value ==[c] "#{value}"))
87
86
  else
88
87
  c_names
89
88
  end
@@ -1,5 +1,5 @@
1
1
  module Appium
2
2
  # Version and Date are defined on the 'Appium' module, not 'Appium::Common'
3
- VERSION = '9.15.1'.freeze unless defined? ::Appium::VERSION
4
- DATE = '2018-08-27'.freeze unless defined? ::Appium::DATE
3
+ VERSION = '9.15.2'.freeze unless defined? ::Appium::VERSION
4
+ DATE = '2018-11-07'.freeze unless defined? ::Appium::DATE
5
5
  end
@@ -1,3 +1,13 @@
1
+ #### v9.15.1 2018-08-27
2
+
3
+ - [14d1835](https://github.com/appium/ruby_lib/commit/14d1835fc2d8385af5b8b4489d6b6bb077e510e4) [Release 9 15 1 (#817)](https://github.com/appium/ruby_lib/issues/817)
4
+ - [5f6c18e](https://github.com/appium/ruby_lib/commit/5f6c18ed9774fe027ee748e812ff91ee6d15a130) [Add extend core (#816)](https://github.com/appium/ruby_lib/issues/816)
5
+ - [c6e5321](https://github.com/appium/ruby_lib/commit/c6e532186b7552212ba61ab2e351dba247a35312) [Tweak gemspec (#814)](https://github.com/appium/ruby_lib/issues/814)
6
+ - [2864eec](https://github.com/appium/ruby_lib/commit/2864eec1d05fb69a461c37e4295f159aebe406ca) [add tests and tweak helpers which handle xml (#813)](https://github.com/appium/ruby_lib/issues/813)
7
+ - [e04afe9](https://github.com/appium/ruby_lib/commit/e04afe92dbe6ea38773c234deb97cb4a7f8ffdd2) [Revert "Use ::REXML::Document by default in CountElements (#811)" (#812)](https://github.com/appium/ruby_lib/issues/811)
8
+ - [1dcc665](https://github.com/appium/ruby_lib/commit/1dcc6650974a57369cc6b087b577cc1146bdaa1f) [Use ::REXML::Document by default in CountElements (#811)](https://github.com/appium/ruby_lib/issues/811)
9
+
10
+
1
11
  #### v9.15.0 2018-08-10
2
12
 
3
13
  - [b09ea84](https://github.com/appium/ruby_lib/commit/b09ea848cc595d8d3ef6494e0a26770521b9432c) [Release 9 15 0 (#810)](https://github.com/appium/ruby_lib/issues/810)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appium_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.15.1
4
+ version: 9.15.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - code@bootstraponline.com
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-08-27 00:00:00.000000000 Z
12
+ date: 2018-11-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: appium_lib_core
@@ -25,20 +25,6 @@ dependencies:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: 2.0.0
28
- - !ruby/object:Gem::Dependency
29
- name: tomlrb
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - "~>"
33
- - !ruby/object:Gem::Version
34
- version: '1.1'
35
- type: :runtime
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - "~>"
40
- - !ruby/object:Gem::Version
41
- version: '1.1'
42
28
  - !ruby/object:Gem::Dependency
43
29
  name: nokogiri
44
30
  requirement: !ruby/object:Gem::Requirement
@@ -60,137 +46,137 @@ dependencies:
60
46
  - !ruby/object:Gem::Version
61
47
  version: 1.8.1
62
48
  - !ruby/object:Gem::Dependency
63
- name: posix-spawn
49
+ name: tomlrb
64
50
  requirement: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '0.3'
69
- type: :development
54
+ version: '1.1'
55
+ type: :runtime
70
56
  prerelease: false
71
57
  version_requirements: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '0.3'
61
+ version: '1.1'
76
62
  - !ruby/object:Gem::Dependency
77
- name: hashdiff
63
+ name: fakefs
78
64
  requirement: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: 0.2.2
68
+ version: 0.13.0
83
69
  type: :development
84
70
  prerelease: false
85
71
  version_requirements: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: 0.2.2
75
+ version: 0.13.0
90
76
  - !ruby/object:Gem::Dependency
91
- name: spec
77
+ name: hashdiff
92
78
  requirement: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '5.3'
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- version: 5.3.4
82
+ version: 0.3.7
100
83
  type: :development
101
84
  prerelease: false
102
85
  version_requirements: !ruby/object:Gem::Requirement
103
86
  requirements:
104
87
  - - "~>"
105
88
  - !ruby/object:Gem::Version
106
- version: '5.3'
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: 5.3.4
89
+ version: 0.3.7
110
90
  - !ruby/object:Gem::Dependency
111
- name: fakefs
91
+ name: posix-spawn
112
92
  requirement: !ruby/object:Gem::Requirement
113
93
  requirements:
114
94
  - - "~>"
115
95
  - !ruby/object:Gem::Version
116
- version: 0.6.7
96
+ version: '0.3'
117
97
  type: :development
118
98
  prerelease: false
119
99
  version_requirements: !ruby/object:Gem::Requirement
120
100
  requirements:
121
101
  - - "~>"
122
102
  - !ruby/object:Gem::Version
123
- version: 0.6.7
103
+ version: '0.3'
124
104
  - !ruby/object:Gem::Dependency
125
- name: rake
105
+ name: pry
126
106
  requirement: !ruby/object:Gem::Requirement
127
107
  requirements:
128
- - - "~>"
108
+ - - ">="
129
109
  - !ruby/object:Gem::Version
130
- version: '12.0'
110
+ version: '0'
131
111
  type: :development
132
112
  prerelease: false
133
113
  version_requirements: !ruby/object:Gem::Requirement
134
114
  requirements:
135
- - - "~>"
115
+ - - ">="
136
116
  - !ruby/object:Gem::Version
137
- version: '12.0'
117
+ version: '0'
138
118
  - !ruby/object:Gem::Dependency
139
- name: yard
119
+ name: rake
140
120
  requirement: !ruby/object:Gem::Requirement
141
121
  requirements:
142
122
  - - "~>"
143
123
  - !ruby/object:Gem::Version
144
- version: 0.9.11
124
+ version: '12.0'
145
125
  type: :development
146
126
  prerelease: false
147
127
  version_requirements: !ruby/object:Gem::Requirement
148
128
  requirements:
149
129
  - - "~>"
150
130
  - !ruby/object:Gem::Version
151
- version: 0.9.11
131
+ version: '12.0'
152
132
  - !ruby/object:Gem::Dependency
153
133
  name: rubocop
154
134
  requirement: !ruby/object:Gem::Requirement
155
135
  requirements:
156
136
  - - "~>"
157
137
  - !ruby/object:Gem::Version
158
- version: 0.46.0
138
+ version: 0.60.0
159
139
  type: :development
160
140
  prerelease: false
161
141
  version_requirements: !ruby/object:Gem::Requirement
162
142
  requirements:
163
143
  - - "~>"
164
144
  - !ruby/object:Gem::Version
165
- version: 0.46.0
145
+ version: 0.60.0
166
146
  - !ruby/object:Gem::Dependency
167
- name: rainbow
147
+ name: spec
168
148
  requirement: !ruby/object:Gem::Requirement
169
149
  requirements:
170
150
  - - "~>"
171
151
  - !ruby/object:Gem::Version
172
- version: 2.1.0
152
+ version: '5.3'
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: 5.3.4
173
156
  type: :development
174
157
  prerelease: false
175
158
  version_requirements: !ruby/object:Gem::Requirement
176
159
  requirements:
177
160
  - - "~>"
178
161
  - !ruby/object:Gem::Version
179
- version: 2.1.0
162
+ version: '5.3'
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: 5.3.4
180
166
  - !ruby/object:Gem::Dependency
181
- name: pry
167
+ name: yard
182
168
  requirement: !ruby/object:Gem::Requirement
183
169
  requirements:
184
- - - ">="
170
+ - - "~>"
185
171
  - !ruby/object:Gem::Version
186
- version: '0'
172
+ version: 0.9.11
187
173
  type: :development
188
174
  prerelease: false
189
175
  version_requirements: !ruby/object:Gem::Requirement
190
176
  requirements:
191
- - - ">="
177
+ - - "~>"
192
178
  - !ruby/object:Gem::Version
193
- version: '0'
179
+ version: 0.9.11
194
180
  description: Ruby library for Appium.
195
181
  email:
196
182
  - code@bootstraponline.com