appium_lib 16.1.1 → 16.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: c66c0b6201b3992cdcc6ba0a8cf83c8cb6e65fa6c8f7da6680de52731966e6e8
4
- data.tar.gz: e3de25d8e982c830b27bc59fb623d51527676c9d68b43d89232295e4bed425b8
3
+ metadata.gz: 1ce9ba5f66a01f14337c06877b4cca232bd6607f0022c89e0fde1dbcd5c2d56a
4
+ data.tar.gz: df68401640b09c89449a78e9d3e4fa35116355aa85f3975b0c2a32e6724bbdd0
5
5
  SHA512:
6
- metadata.gz: 2c378306be4f0b4e17136607908023126a4f1332d2d9663cab3e0550ab3c527e9421b31beaa942a5497ce2d686c8d9269b7d0c2d0bfb1c68d79ea32f7b12a0ac
7
- data.tar.gz: 7c5d11692392a07a3b9b2c96b990131eff58eb776d6277c338c9388beb8ba1d47aa28f31f261eb39cef934114f97be41eeee7a17266837baa71a9ca63771a5d9
6
+ metadata.gz: 0b1a1d43c3463f70046e92e03de743ebb47b1d3bd0c4fc713a73af17e20be036377a2c2affa10b049308c1c898c3311ff310bbbd9b2cfc6c1eb00099058eef9e
7
+ data.tar.gz: 68cdfe45b0bba432f098c8080628f55879eba3161fb7dd94175f4cc142e8762343dfc30afe62239895d24dc351171f210e8c458efb0bb005c645ed50168fd250
@@ -14,11 +14,12 @@ concurrency:
14
14
 
15
15
  jobs:
16
16
  ios_test:
17
- runs-on: macos-14
17
+ runs-on: macos-15
18
+ timeout-minutes: 90
18
19
  env:
19
- XCODE_VERSION: 15.3
20
- IOS_VERSION: 17.4
21
- IOS_DEVICE_NAME: iPhone 15 Plus
20
+ XCODE_VERSION: 16.4
21
+ IOS_VERSION: 18.5
22
+ IOS_DEVICE_NAME: iPhone 16 Plus
22
23
 
23
24
  steps:
24
25
  - uses: actions/checkout@v6
@@ -34,7 +35,7 @@ jobs:
34
35
  xcode-version: ${{ env.XCODE_VERSION }}
35
36
  - run: defaults write com.apple.iphonesimulator PasteboardAutomaticSync -bool false
36
37
 
37
- - uses: futureware-tech/simulator-action@v4
38
+ - uses: futureware-tech/simulator-action@v5
38
39
  with:
39
40
  # https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md
40
41
  model: ${{ env.IOS_DEVICE_NAME }}
@@ -57,15 +58,22 @@ jobs:
57
58
  appium plugin install execute-driver
58
59
  nohup appium --use-plugins=images,execute-driver --relaxed-security --log-timestamp --log-no-colors > appium.log &
59
60
 
61
+ - run: |
62
+ npx appium driver run xcuitest download-wda-sim --platform=ios --outdir=${{ github.workspace }}/wda
63
+ name: Downloading prebuilt WDA
64
+
60
65
  - name: Set up Ruby
61
66
  uses: ruby/setup-ruby@v1
62
67
  with:
63
68
  ruby-version: 4.0
64
69
  - run: |
65
70
  bundle install
66
- rake ios
71
+ bundle exec rake ios
67
72
  name: Run tests
73
+ timeout-minutes: 60
68
74
  working-directory: ios_tests
75
+ env:
76
+ LOCAL_PREBUILT_WDA: ${{ github.workspace }}/wda/WebDriverAgentRunner-Runner.app
69
77
 
70
78
  - name: Save server output
71
79
  if: ${{ always() }}
@@ -75,3 +83,88 @@ jobs:
75
83
  path: |
76
84
  appium.log
77
85
  test/report/
86
+
87
+ android_test:
88
+ runs-on: ubuntu-latest
89
+ timeout-minutes: 90
90
+ env:
91
+ API_LEVEL: 35
92
+ ARCH: x86_64
93
+
94
+ steps:
95
+ - uses: actions/checkout@v6
96
+
97
+ - name: Set up Java
98
+ uses: actions/setup-java@v5
99
+ with:
100
+ distribution: temurin
101
+ java-version: '17'
102
+
103
+ - name: Install Node.js
104
+ uses: actions/setup-node@v6
105
+ with:
106
+ node-version: 'lts/*'
107
+
108
+ - name: Set up Ruby
109
+ uses: ruby/setup-ruby@v1
110
+ with:
111
+ ruby-version: 4.0
112
+
113
+ - name: Install appium
114
+ run: |
115
+ npm install -g appium
116
+ npm install -g mjpeg-consumer
117
+
118
+ - name: Start appium
119
+ run: |
120
+ appium driver install uiautomator2
121
+ appium plugin install images
122
+ appium plugin install execute-driver
123
+ nohup appium --use-plugins=images,execute-driver --relaxed-security --log-timestamp --log-no-colors > appium.log &
124
+
125
+ - name: Enable KVM group perms
126
+ run: |
127
+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
128
+ sudo udevadm control --reload-rules
129
+ sudo udevadm trigger --name-match=kvm
130
+
131
+ - name: AVD cache
132
+ uses: actions/cache@v5
133
+ id: avd-cache
134
+ with:
135
+ path: |
136
+ ~/.android/avd/*
137
+ ~/.android/adb*
138
+ key: avd-${{ env.API_LEVEL }}
139
+
140
+ - name: Create AVD snapshot for cache
141
+ if: steps.avd-cache.outputs.cache-hit != 'true'
142
+ uses: reactivecircus/android-emulator-runner@v2
143
+ with:
144
+ api-level: ${{ env.API_LEVEL }}
145
+ arch: ${{ env.ARCH }}
146
+ target: google_apis
147
+ force-avd-creation: false
148
+ emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
149
+ disable-animations: false
150
+ script: echo "Generated AVD snapshot for caching."
151
+
152
+ - name: run tests
153
+ uses: reactivecircus/android-emulator-runner@v2
154
+ with:
155
+ api-level: ${{ env.API_LEVEL }}
156
+ arch: ${{ env.ARCH }}
157
+ script: cd android_tests;bundle install;bundle exec rake --tasks;bundle exec rake android
158
+ target: google_apis
159
+ profile: Nexus 5X
160
+ disable-spellchecker: true
161
+ disable-animations: true
162
+
163
+ - name: Save server output
164
+ if: ${{ always() }}
165
+ uses: actions/upload-artifact@master
166
+ with:
167
+ name: appium-android_test_with_other_deps.log
168
+ path: |
169
+ appium.log
170
+ test/report/
@@ -0,0 +1,10 @@
1
+ name: Conventional Commits
2
+ on:
3
+ pull_request:
4
+ types: [opened, edited, synchronize, reopened]
5
+
6
+ jobs:
7
+ lint:
8
+ uses: appium/appium-workflows/.github/workflows/pr-title.yml@main
9
+ with:
10
+ config-preset: angular
data/CHANGELOG.md CHANGED
@@ -3,6 +3,9 @@ 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
+ ## [16.2.0] - 2026-04-19
7
+ - Define device methods (`lock`, `unlock`, `hide_keyboard`, `push_file`, `pull_file`, `background_app`, `shake`, etc.) natively on `Appium::Driver` via `def_delegators :driver`, replacing the implicit delegation previously set up by `extend ::Appium::Core::Device`. Paves the way for `ruby_lib_core` to drop its static compatibility list (appium/ruby_lib_core#97).
8
+
6
9
  ## 16.1.1 - 2025-12-28
7
10
  - Add deprecated mark for start_logs_broadcast/stop_logs_broadcast to use BiDi instead
8
11
 
data/Gemfile CHANGED
@@ -16,11 +16,10 @@ source 'https://rubygems.org'
16
16
  gemspec
17
17
 
18
18
  gem 'appium_thor', '~> 2.0'
19
- gem 'fakefs', '~> 3.0.0'
20
19
  gem 'hashdiff', '~> 1.2.0'
21
20
  gem 'minitest', '~> 5.0'
22
21
  gem 'minitest-reporters', '~> 1.1'
23
22
  gem 'pry'
24
23
  gem 'rake', '~> 13.0'
25
- gem 'rubocop', '1.82.0'
24
+ gem 'rubocop', '1.86.1'
26
25
  gem 'yard', '~> 0.9.11'
data/appium_lib.gemspec CHANGED
@@ -13,8 +13,7 @@ Gem::Specification.new do |s|
13
13
  s.homepage = 'https://github.com/appium/ruby_lib' # published as appium_lib
14
14
  s.require_paths = ['lib']
15
15
 
16
- # TODO: We must remove start_logs_broadcast/stop_logs_broadcast to bump the appium_lib_core version to v12+.
17
- s.add_dependency 'appium_lib_core', '>= 9.2.1', '< 12.0'
16
+ s.add_dependency 'appium_lib_core', '>= 9.2.1', '< 13.0'
18
17
  s.add_dependency 'nokogiri', '~> 1.8', '>= 1.8.1'
19
18
  s.add_dependency 'tomlrb', '>= 1.1', '< 3.0'
20
19
 
@@ -30,37 +30,6 @@ module Appium
30
30
  # --relaxed-security
31
31
  @driver.execute_script 'mobile: shell', args
32
32
  end
33
-
34
- # @deprecated Please use BiDi implementation via `$driver.driver.bidi` directly instead.
35
- #
36
- # Starts Android logcat broadcast websocket
37
- #
38
- # @param [String] logcat_file A file path to write messages from a logcat WebSocket client
39
- #
40
- # @example
41
- #
42
- # start_logs_broadcast 'outputfile.log' #=> #<Appium::Android::Command::WsLogcat:...>
43
- #
44
- def start_logs_broadcast(logcat_file = 'logcat.log')
45
- @driver.execute_script 'mobile: startLogsBroadcast'
46
-
47
- socket_url = "ws://#{URI.parse(server_url).host}:#{@core.port}/ws/session/#{@driver.session_id}/appium/device/logcat"
48
- @logcat_client = ::Appium::Common::Command::WsLogcat.new(url: socket_url, output_file: logcat_file)
49
- end
50
-
51
- # @deprecated Please use BiDi implementation directly instead.
52
- #
53
- # Stop Android logcat broadcast websocket
54
- #
55
- # @example
56
- #
57
- # stop_logs_broadcast #=> nil
58
- #
59
- def stop_logs_broadcast
60
- @logcat_client.close
61
-
62
- @driver.execute_script 'mobile: stopLogsBroadcast'
63
- end
64
33
  end
65
34
  end
66
35
  end
@@ -12,8 +12,6 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require_relative 'command/ws_logcat'
16
-
17
15
  module Appium
18
16
  module Common
19
17
  module Command
@@ -40,6 +40,33 @@ require 'uri'
40
40
 
41
41
  module Appium
42
42
  class Driver
43
+ extend Forwardable
44
+
45
+ # Methods forwarded to the underlying Appium::Core::Base::Driver instance
46
+ # (exposed via `#driver`). Previously these were wired up implicitly by
47
+ # `extend ::Appium::Core::Device` through a static compatibility list in
48
+ # `ruby_lib_core` (see appium/ruby_lib_core#97). Defining them here lets
49
+ # `ruby_lib_core` eventually drop that list.
50
+ CORE_BRIDGE_METHODS = %i[
51
+ take_element_screenshot save_viewport_screenshot
52
+ lock device_locked? unlock
53
+ hide_keyboard is_keyboard_shown
54
+ ime_activate ime_available_engines ime_active_engine ime_activated ime_deactivate
55
+ get_settings update_settings
56
+ within_context current_context available_contexts set_context
57
+ push_file pull_file pull_folder
58
+ keyevent press_keycode long_press_keycode
59
+ match_images_features find_image_occurrence get_images_similarity compare_images
60
+ app_strings background_app
61
+ install_app remove_app app_installed? activate_app terminate_app
62
+ app_state
63
+ stop_recording_screen stop_and_save_recording_screen
64
+ shake device_time
65
+ execute_cdp
66
+ ].freeze
67
+
68
+ def_delegators :driver, *CORE_BRIDGE_METHODS
69
+
43
70
  # @private
44
71
  class << self
45
72
  def convert_to_symbol(value)
@@ -27,7 +27,6 @@ module Appium
27
27
  target.extend Appium::Ios::Xcuitest::Gesture
28
28
  target.extend Appium::Ios::Xcuitest::MultiAppHandler
29
29
  target.extend Appium::Ios::Xcuitest::Element
30
- target.extend Appium::Ios::Xcuitest::Command
31
30
  target.extend Appium::Ios::Xcuitest::GetContext
32
31
  end
33
32
  end
@@ -17,42 +17,3 @@ require_relative 'command/gestures'
17
17
  require_relative 'command/source'
18
18
  require_relative 'command/multi_app_handler'
19
19
  require_relative 'command/get_context'
20
-
21
- module Appium
22
- module Ios
23
- module Xcuitest
24
- module Command
25
- # @deprecated Please use BiDi implementation via `$driver.driver.bidi` directly instead.
26
- #
27
- # Starts iOS syslog broadcast websocket
28
- #
29
- # @param [String] syslog_file A file path to write messages from a syslog WebSocket client
30
- #
31
- # @example
32
- #
33
- # start_logs_broadcast 'outputfile.log' #=> #<Appium::Android::Command::WsLogcat:...>
34
- #
35
- def start_logs_broadcast(syslog_file = 'syslog.log')
36
- @driver.execute_script 'mobile: startLogsBroadcast'
37
-
38
- socket_url = "ws://#{URI.parse(server_url).host}:#{@core.port}/ws/session/#{@driver.session_id}/appium/device/syslog"
39
- @logcat_client = ::Appium::Common::Command::WsLogcat.new(url: socket_url, output_file: syslog_file)
40
- end
41
-
42
- # @deprecated Please use BiDi implementation directly instead.
43
- #
44
- # Stop iOS syslog broadcast websocket
45
- #
46
- # @example
47
- #
48
- # stop_logs_broadcast #=> nil
49
- #
50
- def stop_logs_broadcast
51
- @logcat_client.close
52
-
53
- @driver.execute_script 'mobile: stopLogsBroadcast'
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -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 = '16.1.1' unless defined? ::Appium::VERSION
18
- DATE = '2025-12-28' unless defined? ::Appium::DATE
17
+ VERSION = '16.2.0' unless defined? ::Appium::VERSION
18
+ DATE = '2026-04-19' unless defined? ::Appium::DATE
19
19
  end
data/release_notes.md CHANGED
@@ -1,3 +1,22 @@
1
+ #### v16.2.0 2026-04-19
2
+
3
+ - [939a204](https://github.com/appium/ruby_lib/commit/939a20461738c80f9a19bb9ee8fe41030ab6c91e) Release 16.2.0
4
+ - [324b646](https://github.com/appium/ruby_lib/commit/324b646adcf182b92cad66bd53ec8f7b1892b34f) feat: define device methods natively on Appium::Driver (#1109)
5
+ - [5e60d97](https://github.com/appium/ruby_lib/commit/5e60d973ca74fe25af3b58ad7dcf9ce46d209b08) chore: Update rubocop requirement from 1.86.0 to 1.86.1 (#1108)
6
+ - [76a85fd](https://github.com/appium/ruby_lib/commit/76a85fde1c05b5a479179d07e062a2ca9b18d48d) chore: Bump actions/cache from 4 to 5 (#1107)
7
+ - [555767c](https://github.com/appium/ruby_lib/commit/555767cf885f49705cfeea8be4688f7bddb08cd7) ci: add android (#1106)
8
+ - [59a27af](https://github.com/appium/ruby_lib/commit/59a27af6c3c2bbfd37664e59d2a9e3322250199c) feat: drop deprecated start_logs_broadcast/stop_logs_broadcast methods (#1105)
9
+ - [4bd31dc](https://github.com/appium/ruby_lib/commit/4bd31dc1b15de6dccb80a5eb2f70e5c592af7293) chore: Update rubocop requirement from 1.85.1 to 1.86.0 (#1104)
10
+ - [070e4e3](https://github.com/appium/ruby_lib/commit/070e4e34294e1d2a6bf57519493e4f47d96a7fae) chore: Update rubocop requirement from 1.85.0 to 1.85.1 (#1103)
11
+ - [e624cea](https://github.com/appium/ruby_lib/commit/e624cea7ab88fd543f77d63517eb0fc4b3d138fe) chore: Bump futureware-tech/simulator-action from 4 to 5 (#1102)
12
+ - [6192589](https://github.com/appium/ruby_lib/commit/6192589e4379e4405d6dbf0c99fb583544be996c) chore: Update rubocop requirement from 1.84.2 to 1.85.0 (#1101)
13
+ - [211cb0b](https://github.com/appium/ruby_lib/commit/211cb0bfb746b51db6f24d27a7d1ae8153fc6937) chore: Update rubocop requirement from 1.84.1 to 1.84.2 (#1100)
14
+ - [56e092d](https://github.com/appium/ruby_lib/commit/56e092de3ff7c4c29a2cf9f63672563f60f5457f) chore: Update rubocop requirement from 1.84.0 to 1.84.1 (#1099)
15
+ - [858cacb](https://github.com/appium/ruby_lib/commit/858cacb2675dcfd7935bee7c8fc9dbfd6eae60c1) chore: Update rubocop requirement from 1.82.1 to 1.84.0 (#1098)
16
+ - [0451b50](https://github.com/appium/ruby_lib/commit/0451b50e15723b649d92f4f1476d5b575ed92482) ci: add pr title check
17
+ - [d5a27a8](https://github.com/appium/ruby_lib/commit/d5a27a8de9fcca37accd851686c6a8a90a40b374) chore: Update rubocop requirement from 1.82.0 to 1.82.1 (#1097)
18
+
19
+
1
20
  #### v16.1.1 2025-12-28
2
21
 
3
22
  - [2efaf09](https://github.com/appium/ruby_lib/commit/2efaf0937dfaf3759d370607fdea05c890df634a) Release 16.1.1
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: 16.1.1
4
+ version: 16.2.0
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: 2025-12-28 00:00:00.000000000 Z
12
+ date: 2026-04-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: appium_lib_core
@@ -20,7 +20,7 @@ dependencies:
20
20
  version: 9.2.1
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: '12.0'
23
+ version: '13.0'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
@@ -30,7 +30,7 @@ dependencies:
30
30
  version: 9.2.1
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '12.0'
33
+ version: '13.0'
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: nokogiri
36
36
  requirement: !ruby/object:Gem::Requirement
@@ -84,6 +84,7 @@ files:
84
84
  - ".github/PULL_REQUEST_TEMPLATE.md"
85
85
  - ".github/dependabot.yml"
86
86
  - ".github/workflows/functional-test.yml"
87
+ - ".github/workflows/pr-title.yml"
87
88
  - ".github/workflows/rubocop.yml"
88
89
  - ".gitignore"
89
90
  - ".rubocop.yml"
@@ -121,7 +122,6 @@ files:
121
122
  - lib/appium_lib/android/uiautomator2/helper.rb
122
123
  - lib/appium_lib/appium.rb
123
124
  - lib/appium_lib/common/command.rb
124
- - lib/appium_lib/common/command/ws_logcat.rb
125
125
  - lib/appium_lib/common/device.rb
126
126
  - lib/appium_lib/common/helper.rb
127
127
  - lib/appium_lib/common/http_client.rb
@@ -1,31 +0,0 @@
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
- module Common
17
- module Command
18
- # TODO: Remove this implementation after dropping start_logs_broadcast
19
- class WsLogcat < ::Appium::Core::WebSocket
20
- def initialize(url:, output_file: 'logcat.log')
21
- super(url: url)
22
- @output_file = output_file
23
- end
24
-
25
- def handle_message_data(data)
26
- File.open(@output_file, 'a') { |f| f.write("#{data}\n") }
27
- end
28
- end
29
- end
30
- end
31
- end