appium_lib 15.0.0 → 15.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8d6aaddb4ee973d648e03dfb0cf3e2ec26eaa20aae57764af246320725a3039e
4
- data.tar.gz: 9ced7688862bb8011efb2916b3f338f66d1554ee5eab78e72299f40f3cffec1a
3
+ metadata.gz: f88a026a704b43d222f8d8bf91db42122ff2980d5035aa392ab4071713806d7f
4
+ data.tar.gz: 8d7dd97d70126fe283dc11d60a215301119f9463d2a90e03df701bf547ac9b78
5
5
  SHA512:
6
- metadata.gz: '01642954e0acee422d5c5754c15ed2f104e9e789bee1e870fd9ab55bcbba3e0f996a34b132870b2855630cac5cca8e84f59973379836f57d7fd86b894c0c3484'
7
- data.tar.gz: 6176bae5c61d0756d4a72d165603a3e1249d5e88cf8dda8f08dbfa4618dd3e7e5b2f67caafd2af5dfe2e92ca52910be1a49e4db00a79ee7f5a18b8a3e1c73bdb
6
+ metadata.gz: eb4fd237d52479e5209a04198184b280fc818bcca6a3e1f7c4498207229d4672cd78241b676aa266c076418f5885510c46fe02c5259aa7a9e11612bef111c77e
7
+ data.tar.gz: 7995667f533503dbc6e48d09bce54596ee771cab6675b6d3ea64d38f709310527a075fdf54e48505a095ac52151d641f2fdfe49ff78a8a6487951484faab7d83
data/CHANGELOG.md CHANGED
@@ -3,6 +3,15 @@ Commit based release not is [release_notes.md](./release_notes.md)
3
3
 
4
4
  Release tags are https://github.com/appium/ruby_lib/releases .
5
5
 
6
+ ## 15.2.0 - 2024-07-20
7
+ - Raise defined errors instead of Ruby general errors by appium_lib's own errors
8
+
9
+ ## 15.1.0 - 2024-05-19
10
+ - Use appium_lib_core 9.0.0
11
+
12
+ ## 15.0.1 - 2024-04-26
13
+ - Bump release module (internal only)
14
+
6
15
  ## 15.0.0 - 2024-04-11
7
16
  - Breaking
8
17
  - Use appium_lib_core 8.0.0 and up
data/Thorfile CHANGED
@@ -4,12 +4,4 @@ Appium::Thor::Config.set do
4
4
  gem_name 'appium_lib'
5
5
  github_name 'ruby_lib'
6
6
  version_file 'lib/appium_lib/version.rb'
7
- docs_block do
8
- common_globs = %w(/lib/appium_lib/*.rb /lib/appium_lib/device/*.rb /lib/appium_lib/common/**/*.rb)
9
- android_globs = common_globs + %w(/lib/appium_lib/android/**/*.rb)
10
- ios_globs = common_globs + %w(/lib/appium_lib/ios/**/*.rb)
11
-
12
- run 'docs/android_docs.md', globs(android_globs)
13
- run 'docs/ios_docs.md', globs(ios_globs)
14
- end
15
7
  end
data/appium_lib.gemspec CHANGED
@@ -5,7 +5,6 @@ Gem::Specification.new do |s|
5
5
 
6
6
  s.name = 'appium_lib'
7
7
  s.version = Appium::VERSION
8
- s.date = Appium::DATE
9
8
  s.license = 'Apache-2.0'
10
9
  s.description = 'Ruby library for Appium.'
11
10
  s.summary = 'Ruby library for Appium'
@@ -14,20 +13,20 @@ Gem::Specification.new do |s|
14
13
  s.homepage = 'https://github.com/appium/ruby_lib' # published as appium_lib
15
14
  s.require_paths = ['lib']
16
15
 
17
- s.add_runtime_dependency 'appium_lib_core', '~> 8.0.0'
16
+ s.add_runtime_dependency 'appium_lib_core', '~> 9.0'
18
17
  s.add_runtime_dependency 'nokogiri', '~> 1.8', '>= 1.8.1'
19
18
  s.add_runtime_dependency 'tomlrb', '>= 1.1', '< 3.0'
20
19
 
21
- s.add_development_dependency 'appium_thor', '~> 1.1', '>= 1.1.4'
20
+ s.add_development_dependency 'appium_thor', '~> 2.0'
22
21
  s.add_development_dependency 'fakefs', '~> 2.5.0'
23
22
  s.add_development_dependency 'hashdiff', '~> 1.1.0'
24
- s.add_development_dependency 'posix-spawn', '~> 0.3'
23
+ s.add_development_dependency 'minitest', '~> 5.0'
24
+ s.add_development_dependency 'minitest-reporters', '~> 1.1'
25
25
  s.add_development_dependency 'pry'
26
26
  s.add_development_dependency 'rake', '~> 13.0'
27
- s.add_development_dependency 'rubocop', '1.63.0'
27
+ s.add_development_dependency 'rubocop', '1.65.0'
28
28
  s.add_development_dependency 'yard', '~> 0.9.11'
29
- s.add_development_dependency 'minitest', '~> 5.0'
30
- s.add_development_dependency 'minitest-reporters', '~> 1.1'
31
29
 
32
30
  s.files = `git ls-files`.split("\n").reject { |v| v.match(/\A^(ios_tests|android_tests|grid|test_apps)\/.+/) }
31
+ s.metadata['rubygems_mfa_required'] = 'true'
33
32
  end
@@ -150,7 +150,7 @@ module Appium
150
150
  index = results.length
151
151
  index -= 1 if index >= 0
152
152
  else
153
- raise 'Index must be >= 1' unless index >= 1
153
+ raise ArgumentError, 'Index must be >= 1' unless index >= 1
154
154
 
155
155
  index -= 1 if index >= 1
156
156
  end
@@ -29,7 +29,7 @@ module Appium
29
29
  # Android needs to combine button and image button to match iOS.
30
30
  if value.is_a? Numeric
31
31
  index = value
32
- raise "#{index} is not a valid index. Must be >= 1" if index <= 0
32
+ raise ArgumentError, "#{index} is not a valid index. Must be >= 1" if index <= 0
33
33
 
34
34
  # 1 indexed
35
35
  return find_element :uiautomator, _button_visible_selectors(index: index)
@@ -25,7 +25,7 @@ module Appium
25
25
  # Android needs to combine button and image button to match iOS.
26
26
  if value.is_a? Numeric
27
27
  index = value
28
- raise "#{index} is not a valid index. Must be >= 1" if index <= 0
28
+ raise ArgumentError, "#{index} is not a valid index. Must be >= 1" if index <= 0
29
29
 
30
30
  # zero index
31
31
  _button_visible_selectors_xpath(index: index - 1)
@@ -25,7 +25,7 @@ module Appium
25
25
  # Android needs to combine button and image button to match iOS.
26
26
  if value.is_a? Numeric
27
27
  index = value
28
- raise "#{index} is not a valid index. Must be >= 1" if index <= 0
28
+ raise ArgumentError, "#{index} is not a valid index. Must be >= 1" if index <= 0
29
29
 
30
30
  result = find_elements :uiautomator, _button_visible_selectors(index: index)
31
31
  raise _no_such_element if result.empty?
@@ -56,11 +56,11 @@ module Appium
56
56
  # @param opts [Hash] file: '/path/to/appium.txt', verbose: true
57
57
  # @return [hash] the symbolized hash with updated :app and :require keys
58
58
  def load_settings(opts = {})
59
- raise 'opts must be a hash' unless opts.is_a? Hash
60
- raise 'opts must not be empty' if opts.empty?
59
+ raise ArgumentError, 'opts must be a hash' unless opts.is_a? Hash
60
+ raise ArgumentError, 'opts must not be empty' if opts.empty?
61
61
 
62
62
  toml = opts[:file]
63
- raise 'Must pass a capability file which has [caps] and [appium_lib]' unless toml
63
+ raise ArgumentError, 'Must pass a capability file which has [caps] and [appium_lib]' unless toml
64
64
 
65
65
  verbose = opts.fetch :verbose, false
66
66
 
@@ -69,7 +69,7 @@ module Appium
69
69
  toml_exists = File.exist? toml
70
70
  Appium::Logger.info "Exists? #{toml_exists}" if verbose
71
71
 
72
- raise "toml doesn't exist #{toml}" unless toml_exists
72
+ raise ArgumentError, "toml doesn't exist #{toml}" unless toml_exists
73
73
 
74
74
  require 'tomlrb'
75
75
  Appium::Logger.info "Loading #{toml}" if verbose
@@ -151,7 +151,7 @@ module Appium
151
151
  # @param [Array<Module>] modules An array of modules
152
152
  # @param [Driver] driver A driver to extend for
153
153
  def promote_singleton_appium_methods(modules, driver = $driver)
154
- raise 'Global $driver is nil' if driver.nil?
154
+ raise ArgumentError, 'Global $driver is nil' if driver.nil?
155
155
 
156
156
  target_modules = []
157
157
 
@@ -160,7 +160,7 @@ module Appium
160
160
  target_modules << modules.const_get(sub_module)
161
161
  end
162
162
  else
163
- raise 'modules must be a module or an array' unless modules.is_a? Array
163
+ raise ArgumentError, 'modules must be a module or an array' unless modules.is_a? Array
164
164
 
165
165
  target_modules = modules
166
166
  end
@@ -205,7 +205,7 @@ module Appium
205
205
  # Appium.promote_appium_methods Minitest::Spec
206
206
  #
207
207
  def promote_appium_methods(class_array, driver = $driver)
208
- raise 'Driver is nil' if driver.nil?
208
+ raise ArgumentError, 'Driver is nil' if driver.nil?
209
209
 
210
210
  # Wrap single class into an array
211
211
  class_array = [class_array] unless class_array.instance_of? Array
@@ -156,7 +156,7 @@ module Appium
156
156
 
157
157
  $driver&.driver_quit if global_driver
158
158
 
159
- raise 'opts must be a hash' unless opts.is_a? Hash
159
+ raise ArgumentError, 'opts must be a hash' unless opts.is_a? Hash
160
160
 
161
161
  @core = ::Appium::Core.for(opts)
162
162
  extend ::Appium::Core::Device
@@ -329,7 +329,7 @@ module Appium
329
329
  # action.click(element).perform # The `click` is a part of `PointerActions`
330
330
  #
331
331
  def action
332
- @driver.action
332
+ @driver&.action
333
333
  end
334
334
 
335
335
  # Returns the server's version info
@@ -384,12 +384,12 @@ module Appium
384
384
  #
385
385
  # @return [String] APP_PATH as an absolute path
386
386
  def self.absolute_app_path(opts)
387
- raise 'opts must be a hash' unless opts.is_a? Hash
387
+ raise ArgumentError, 'opts must be a hash' unless opts.is_a? Hash
388
388
 
389
389
  # FIXME: 'caps' and 'app' will be correct
390
390
  caps = opts[:caps] || opts['caps'] || {}
391
391
  app_path = caps[:app] || caps['app']
392
- raise 'absolute_app_path invoked and app is not set!' if app_path.nil? || app_path.empty?
392
+ raise ArgumentError, 'absolute_app_path invoked and app is not set!' if app_path.nil? || app_path.empty?
393
393
  # Sauce storage API. http://saucelabs.com/docs/rest#storage
394
394
  return app_path if app_path.start_with? 'sauce-storage:'
395
395
  return app_path if app_path =~ URI::DEFAULT_PARSER.make_regexp # public URL for Sauce
@@ -431,7 +431,7 @@ module Appium
431
431
  # @param png_save_path [String] the full path to save the png
432
432
  # @return [File]
433
433
  def screenshot(png_save_path)
434
- @driver.save_screenshot png_save_path
434
+ @driver&.save_screenshot png_save_path
435
435
  end
436
436
 
437
437
  # Takes a png screenshot of particular element's area
@@ -445,7 +445,7 @@ module Appium
445
445
  # @param [String] png_save_path the full path to save the png
446
446
  # @return [File]
447
447
  def element_screenshot(element, png_save_path)
448
- @driver.take_element_screenshot element, png_save_path
448
+ @driver&.take_element_screenshot element, png_save_path
449
449
  nil
450
450
  end
451
451
 
@@ -469,6 +469,9 @@ module Appium
469
469
  # size.height #=> Integer
470
470
  #
471
471
  def window_size
472
+ # maybe exception is expected as no driver created
473
+ raise NoDriverInstanceError if @driver.nil?
474
+
472
475
  @driver.window_size
473
476
  end
474
477
 
@@ -484,6 +487,8 @@ module Appium
484
487
  # size.y #=> Integer
485
488
  #
486
489
  def window_rect
490
+ raise NoDriverInstanceError if @driver.nil?
491
+
487
492
  @driver.window_rect
488
493
  end
489
494
 
@@ -555,7 +560,7 @@ module Appium
555
560
 
556
561
  # Set implicit wait to zero.
557
562
  def no_wait
558
- @driver.manage.timeouts.implicit_wait = 0
563
+ @driver&.manage&.timeouts&.implicit_wait = 0
559
564
  end
560
565
 
561
566
  # Set implicit wait. Default to @default_wait.
@@ -570,7 +575,7 @@ module Appium
570
575
  # @return [void]
571
576
  def set_wait(timeout = nil)
572
577
  timeout = @default_wait if timeout.nil?
573
- @driver.manage.timeouts.implicit_wait = timeout
578
+ @driver&.manage&.timeouts&.implicit_wait = timeout
574
579
  end
575
580
 
576
581
  # Returns existence of element.
@@ -589,9 +594,9 @@ module Appium
589
594
  # do not uset set_wait here.
590
595
  # it will cause problems with other methods reading the default_wait of 0
591
596
  # which then gets converted to a 1 second wait.
592
- @driver.manage.timeouts.implicit_wait = pre_check
597
+ @driver&.manage&.timeouts&.implicit_wait = pre_check
593
598
  # the element exists unless an error is raised.
594
- exists = true
599
+ exists = true
595
600
 
596
601
  begin
597
602
  yield # search for element
@@ -600,7 +605,7 @@ module Appium
600
605
  end
601
606
 
602
607
  # restore wait
603
- @driver.manage.timeouts.implicit_wait = post_check if post_check != pre_check
608
+ @driver&.manage&.timeouts&.implicit_wait = post_check if post_check != pre_check
604
609
 
605
610
  exists
606
611
  end
@@ -610,6 +615,8 @@ module Appium
610
615
  # @param [*args] args The args to pass to the script
611
616
  # @return [Object]
612
617
  def execute_script(script, *args)
618
+ raise NoDriverInstanceError if @driver.nil?
619
+
613
620
  @driver.execute_script script, *args
614
621
  end
615
622
 
@@ -618,6 +625,8 @@ module Appium
618
625
  ###
619
626
  # Get the window handles of open browser windows
620
627
  def execute_async_script(script, *args)
628
+ raise NoDriverInstanceError if @driver.nil?
629
+
621
630
  @driver.execute_async_script script, *args
622
631
  end
623
632
 
@@ -650,41 +659,59 @@ module Appium
650
659
  # r.logs #=> The `logs` key part as `{'log' => [], 'warn' => [], 'error' => []}`
651
660
  #
652
661
  def execute_driver(script: '', type: 'webdriverio', timeout_ms: nil)
662
+ raise NoDriverInstanceError if @driver.nil?
663
+
653
664
  @driver.execute_driver(script: script, type: type, timeout_ms: timeout_ms)
654
665
  end
655
666
 
656
667
  def window_handles
668
+ raise NoDriverInstanceError if @driver.nil?
669
+
657
670
  @driver.window_handles
658
671
  end
659
672
 
660
673
  # Get the current window handle
661
674
  def window_handle
675
+ raise NoDriverInstanceError if @driver.nil?
676
+
662
677
  @driver.window_handle
663
678
  end
664
679
 
665
680
  def navigate
681
+ raise NoDriverInstanceError if @driver.nil?
682
+
666
683
  @driver.navigate
667
684
  end
668
685
 
669
686
  def manage
687
+ raise NoDriverInstanceError if @driver.nil?
688
+
670
689
  @driver.manage
671
690
  end
672
691
 
673
692
  def get(url)
693
+ raise NoDriverInstanceError if @driver.nil?
694
+
674
695
  @driver.get(url)
675
696
  end
676
697
 
677
698
  def current_url
699
+ raise NoDriverInstanceError if @driver.nil?
700
+
678
701
  @driver.current_url
679
702
  end
680
703
 
681
704
  def title
705
+ raise NoDriverInstanceError if @driver.nil?
706
+
682
707
  @driver.title
683
708
  end
684
709
 
685
710
  # @return [TargetLocator]
686
711
  # @see TargetLocator
687
712
  def switch_to
713
+ raise NoDriverInstanceError if @driver.nil?
714
+
688
715
  @driver.switch_to
689
716
  end
690
717
  ###
@@ -712,6 +739,8 @@ module Appium
712
739
  # @param [*args] args The args to use
713
740
  # @return [Array<Element>] Array is empty when no elements are found.
714
741
  def find_elements(*args)
742
+ raise NoDriverInstanceError if @driver.nil?
743
+
715
744
  @driver.find_elements(*args)
716
745
  end
717
746
 
@@ -728,6 +757,8 @@ module Appium
728
757
  # @param [*args] args The args to use
729
758
  # @return [Element]
730
759
  def find_element(*args)
760
+ raise NoDriverInstanceError if @driver.nil?
761
+
731
762
  @driver.find_element(*args)
732
763
  end
733
764
 
@@ -743,6 +774,8 @@ module Appium
743
774
  # @driver.find_element_by_image './test/functional/data/test_element_image.png'
744
775
  #
745
776
  def find_element_by_image(png_img_path)
777
+ raise NoDriverInstanceError if @driver.nil?
778
+
746
779
  @driver.find_element_by_image(png_img_path)
747
780
  end
748
781
 
@@ -758,6 +791,8 @@ module Appium
758
791
  # @driver.find_elements_by_image ['./test/functional/data/test_element_image.png']
759
792
  #
760
793
  def find_elements_by_image(png_img_paths)
794
+ raise NoDriverInstanceError if @driver.nil?
795
+
761
796
  @driver.find_elements_by_image(png_img_paths)
762
797
  end
763
798
 
@@ -771,6 +806,8 @@ module Appium
771
806
  # @option opts [Float] :altitude the altitude, defaulting to 75
772
807
  # @return [Selenium::WebDriver::Location] the location constructed by the selenium webdriver
773
808
  def set_location(opts = {})
809
+ raise NoDriverInstanceError if @driver.nil?
810
+
774
811
  latitude = opts.fetch(:latitude)
775
812
  longitude = opts.fetch(:longitude)
776
813
  altitude = opts.fetch(:altitude, 75)
@@ -794,10 +831,13 @@ module Appium
794
831
  # # 'appium:anotherEvent' => 1572959315}
795
832
  #
796
833
  def log_event(vendor:, event:)
834
+ raise NoDriverInstanceError if @driver.nil?
835
+
797
836
  @driver.logs.event vendor: vendor, event: event
798
837
  end
799
838
 
800
839
  def log_event=(log_event)
840
+ raise if @driver.nil?
801
841
  unless log_event.is_a?(Hash)
802
842
  raise ::Appium::Core::Error::ArgumentError('log_event should be Hash like { vendor: "appium", event: "funEvent"}')
803
843
  end
@@ -817,6 +857,8 @@ module Appium
817
857
  # log_events #=> {'commands' => [{'cmd' => 123455, ....}], 'startTime' => 1572954894127, }
818
858
  #
819
859
  def log_events(type = nil)
860
+ raise NoDriverInstanceError if @driver.nil?
861
+
820
862
  @driver.logs.events(type)
821
863
  end
822
864
 
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Appium
16
+ class Error < StandardError; end
17
+
18
+ # Driver instance hasn't been created yet.
19
+ class NoDriverInstanceError < Appium::Error; end
20
+
21
+ class ArgumentError < ArgumentError; end
22
+ end
@@ -107,7 +107,7 @@ module Appium
107
107
  # @param index [Integer] the index
108
108
  # @return [Element]
109
109
  def ele_index(class_name, index)
110
- raise 'Index must be >= 1' unless index == 'last()' || (index.is_a?(Integer) && index >= 1)
110
+ raise ArgumentError, 'Index must be >= 1' unless index == 'last()' || (index.is_a?(Integer) && index >= 1)
111
111
 
112
112
  elements = tags(class_name)
113
113
 
@@ -376,7 +376,7 @@ module Appium
376
376
  #
377
377
  def _all_pred(opts)
378
378
  predicate = opts[:predicate]
379
- raise 'predicate must be provided' unless predicate
379
+ raise ArgumentError, 'predicate must be provided' unless predicate
380
380
 
381
381
  visible = opts.fetch :visible, true
382
382
  %($.mainApp().getAllWithPredicate("#{predicate}", #{visible});)
@@ -404,23 +404,23 @@ module Appium
404
404
  end
405
405
 
406
406
  def _validate_object(*objects)
407
- raise 'objects must be an array' unless objects.is_a? Array
407
+ raise ArgumentError, 'objects must be an array' unless objects.is_a? Array
408
408
 
409
409
  objects.each do |obj|
410
410
  next unless obj # obj may be nil. if so, ignore.
411
411
 
412
412
  valid_keys = %i[target substring insensitive]
413
413
  unknown_keys = obj.keys - valid_keys
414
- raise "Unknown keys: #{unknown_keys}" unless unknown_keys.empty?
414
+ raise ArgumentError, "Unknown keys: #{unknown_keys}" unless unknown_keys.empty?
415
415
 
416
416
  target = obj[:target]
417
- raise 'target must be a string' unless target.is_a? String
417
+ raise ArgumentError, 'target must be a string' unless target.is_a? String
418
418
 
419
419
  substring = obj[:substring]
420
- raise 'substring must be a boolean' unless [true, false].include? substring
420
+ raise ArgumentError, 'substring must be a boolean' unless [true, false].include? substring
421
421
 
422
422
  insensitive = obj[:insensitive]
423
- raise 'insensitive must be a boolean' unless [true, false].include? insensitive
423
+ raise ArgumentError, 'insensitive must be a boolean' unless [true, false].include? insensitive
424
424
  end
425
425
  end
426
426
 
@@ -456,16 +456,16 @@ module Appium
456
456
  def _by_json(opts)
457
457
  valid_keys = %i(typeArray onlyFirst onlyVisible name label value)
458
458
  unknown_keys = opts.keys - valid_keys
459
- raise "Unknown keys: #{unknown_keys}" unless unknown_keys.empty?
459
+ raise ArgumentError, "Unknown keys: #{unknown_keys}" unless unknown_keys.empty?
460
460
 
461
461
  type_array = opts[:typeArray]
462
- raise 'typeArray must be an array' unless type_array.is_a? Array
462
+ raise ArgumentError, 'typeArray must be an array' unless type_array.is_a? Array
463
463
 
464
464
  only_first = opts[:onlyFirst]
465
- raise 'onlyFirst must be a boolean' unless [true, false].include? only_first
465
+ raise ArgumentError, 'onlyFirst must be a boolean' unless [true, false].include? only_first
466
466
 
467
467
  only_visible = opts[:onlyVisible]
468
- raise 'onlyVisible must be a boolean' unless [true, false].include? only_visible
468
+ raise ArgumentError, 'onlyVisible must be a boolean' unless [true, false].include? only_visible
469
469
 
470
470
  # name/label/value are optional. when searching for class only, then none
471
471
  # will be present.
@@ -42,7 +42,7 @@ module Appium
42
42
  def textfield(value)
43
43
  if value.is_a? Numeric
44
44
  index = value
45
- raise "#{index} is not a valid index. Must be >= 1" if index <= 0
45
+ raise ArgumentError, "#{index} is not a valid index. Must be >= 1" if index <= 0
46
46
 
47
47
  index -= 1 # eles_by_json and _textfields_with_predicate is 0 indexed.
48
48
  result = eles_by_json(_textfield_visible)[index]
@@ -37,7 +37,7 @@ module Appium
37
37
  def textfield(value)
38
38
  if value.is_a? Numeric
39
39
  index = value
40
- raise "#{index} is not a valid index. Must be >= 1" if index <= 0
40
+ raise ArgumentError, "#{index} is not a valid index. Must be >= 1" if index <= 0
41
41
 
42
42
  index -= 1 # eles_by_json and _textfields_with_predicate is 0 indexed.
43
43
  result = _textfields_with_predicate[index]
@@ -14,6 +14,6 @@
14
14
 
15
15
  module Appium
16
16
  # Version and Date are defined on the 'Appium' module, not 'Appium::Common'
17
- VERSION = '15.0.0' unless defined? ::Appium::VERSION
18
- DATE = '2024-04-11' unless defined? ::Appium::DATE
17
+ VERSION = '15.2.0' unless defined? ::Appium::VERSION
18
+ DATE = '2024-07-20' unless defined? ::Appium::DATE
19
19
  end
data/release_notes.md CHANGED
@@ -1,3 +1,33 @@
1
+ #### v15.2.0 2024-07-20
2
+
3
+ - [d73525e](https://github.com/appium/ruby_lib/commit/d73525eec584c3c31690dcd55a6c52d641d43f9f) Release 15.2.0
4
+ - [6b5d969](https://github.com/appium/ruby_lib/commit/6b5d9693f10e64a521f6ac5d31c78d71e5f0f6be) feat: raise its own defined errors (#1035)
5
+ - [4a74c60](https://github.com/appium/ruby_lib/commit/4a74c60937e66bf028a66e4f05a324ce8b2077ce) chore: Update rubocop requirement from = 1.64.1 to = 1.65.0 (#1034)
6
+ - [fa4cea4](https://github.com/appium/ruby_lib/commit/fa4cea4e5bea0aa4e3ed7052ba77812c82684fe0) chore: Update rubocop requirement from = 1.64.0 to = 1.64.1 (#1033)
7
+ - [96ce262](https://github.com/appium/ruby_lib/commit/96ce26264d985b5260e99573486e8f712bfb12e3) chore: Update rubocop requirement from = 1.63.5 to = 1.64.0 (#1032)
8
+ - [14590cc](https://github.com/appium/ruby_lib/commit/14590cce6f6cbef8c20e12ae10b00bf3f7b5ab3a) chore: tweak changelog format
9
+
10
+
11
+ #### v15.1.0 2024-05-19
12
+
13
+ - [b1534cc](https://github.com/appium/ruby_lib/commit/b1534cc8e781e37f9632fa1cbaa6e2422b6a768d) Release 15.1.0
14
+ - [f6cc482](https://github.com/appium/ruby_lib/commit/f6cc482e6bcf75cd4388911355700e31da74b578) chore: tweak deps
15
+ - [c034ec5](https://github.com/appium/ruby_lib/commit/c034ec5cb74e442db6db4cfc8365a43c903cbbfc) feat: update ruby lib core to v9 (#1030)
16
+ - [50bca8f](https://github.com/appium/ruby_lib/commit/50bca8f8acd2c4c144684cd33dd0ea9787a40bf5) chore: Update rubocop requirement from = 1.63.4 to = 1.63.5 (#1028)
17
+ - [415b3c6](https://github.com/appium/ruby_lib/commit/415b3c6b52e28f3b43cdd95a0684b1e9aadc0ae8) chore: Update rubocop requirement from = 1.63.3 to = 1.63.4 (#1027)
18
+ - [7461e6a](https://github.com/appium/ruby_lib/commit/7461e6a44569245b6dbd1b352f3ff76503bb1bbb) docs: remove no longer used docs
19
+ - [66e323c](https://github.com/appium/ruby_lib/commit/66e323c08dbc9616366e55ebf3835530549edf37) chore: remove unused docs_block
20
+
21
+
22
+ #### v15.0.1 2024-04-26
23
+
24
+ - [3ab38a7](https://github.com/appium/ruby_lib/commit/3ab38a7339bf077dd85d9b700f08ddfe2ca608e5) Release 15.0.1
25
+ - [720dfdd](https://github.com/appium/ruby_lib/commit/720dfdd31f0feacf5926f668ff15e521920e360c) chore: bump thor and remove unused posix
26
+ - [c869327](https://github.com/appium/ruby_lib/commit/c869327d50d2046a2c45e3a360b8667e006f9f56) chore: Update rubocop requirement from = 1.63.2 to = 1.63.3 (#1026)
27
+ - [6543765](https://github.com/appium/ruby_lib/commit/65437658a89b234fbc431246266a383a0988009a) chore: Update rubocop requirement from = 1.63.1 to = 1.63.2 (#1025)
28
+ - [2b428b5](https://github.com/appium/ruby_lib/commit/2b428b5e714e83ee283bce993fd3eba61827a287) chore: Update rubocop requirement from = 1.63.0 to = 1.63.1 (#1024)
29
+
30
+
1
31
  #### v15.0.0 2024-04-11
2
32
 
3
33
  - [203a605](https://github.com/appium/ruby_lib/commit/203a6052db42039c89cd000f245f1534379bc86b) Release 15.0.0