appium_lib_core 5.0.0 → 6.3.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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +140 -0
  3. data/README.md +55 -10
  4. data/appium_lib_core.gemspec +5 -5
  5. data/lib/appium_lib_core/common/base/bridge.rb +54 -40
  6. data/lib/appium_lib_core/common/base/capabilities.rb +8 -16
  7. data/lib/appium_lib_core/common/base/driver.rb +68 -40
  8. data/lib/appium_lib_core/common/base/has_location.rb +10 -10
  9. data/lib/appium_lib_core/common/base/http_default.rb +1 -1
  10. data/lib/appium_lib_core/common/base/rotable.rb +11 -3
  11. data/lib/appium_lib_core/common/base/search_context.rb +1 -2
  12. data/lib/appium_lib_core/common/command.rb +4 -2
  13. data/lib/appium_lib_core/common/device/app_management.rb +8 -14
  14. data/lib/appium_lib_core/common/device/value.rb +1 -3
  15. data/lib/appium_lib_core/common/error.rb +0 -4
  16. data/lib/appium_lib_core/driver.rb +170 -62
  17. data/lib/appium_lib_core/support/event_firing_bridge.rb +57 -0
  18. data/lib/appium_lib_core/version.rb +2 -2
  19. data/lib/appium_lib_core/{ios/uiautomation/bridge.rb → windows/device/app_management.rb} +20 -12
  20. data/lib/appium_lib_core/windows/device.rb +2 -0
  21. data/lib/appium_lib_core.rb +19 -5
  22. metadata +21 -34
  23. data/.github/ISSUE_TEMPLATE/issue-report.md +0 -29
  24. data/.github/contributing.md +0 -26
  25. data/.github/dependabot.yml +0 -8
  26. data/.github/issue_template.md +0 -20
  27. data/.github/workflows/unittest.yml +0 -67
  28. data/.gitignore +0 -18
  29. data/.rubocop.yml +0 -146
  30. data/azure-pipelines.yml +0 -15
  31. data/ci-jobs/functional/android_setup.yml +0 -3
  32. data/ci-jobs/functional/ios_setup.yml +0 -7
  33. data/ci-jobs/functional/publish_test_result.yml +0 -18
  34. data/ci-jobs/functional/run_appium.yml +0 -25
  35. data/ci-jobs/functional/start-emulator.sh +0 -26
  36. data/ci-jobs/functional_test.yml +0 -298
  37. data/docs/mobile_command.md +0 -34
  38. data/lib/appium_lib_core/ios/uiautomation/device.rb +0 -44
  39. data/lib/appium_lib_core/ios/uiautomation/patch.rb +0 -34
  40. data/lib/appium_lib_core/ios.rb +0 -20
  41. data/release_notes.md +0 -932
  42. data/script/commands.rb +0 -166
@@ -1,298 +0,0 @@
1
- # jobs for functional test
2
- parameters:
3
- vmImage: 'macOS-10.15'
4
- vmImageForIOS: 'macOS-10.15'
5
- xcodeForIOS: 12.2
6
- xcodeForTVOS: 12.2
7
- androidSDK: 29 # API Level 30 emulators are more unstable than 29
8
- appiumVersion: 'beta'
9
- ignoreVersionSkip: true
10
- CI: true
11
-
12
-
13
- jobs:
14
- # Run unit tests on different Node versions
15
- - job: func_test_ios_base
16
- pool:
17
- vmImage: ${{ parameters.vmImageForIOS }}
18
- variables:
19
- CI: ${{ parameters.ci }}
20
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
21
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
22
- steps:
23
- - template: ./functional/ios_setup.yml
24
- parameters:
25
- xcodeVersion: ${{ parameters.xcodeForIOS }}
26
- - template: ./functional/run_appium.yml
27
- - script: bundle exec rake test:func:ios TESTS=test/functional/ios/driver_test.rb,test/functional/ios/patch_test.rb
28
- displayName: Run tests func_test_ios_base
29
- - template: ./functional/publish_test_result.yml
30
-
31
- - job: func_test_ios_webdriver1
32
- pool:
33
- vmImage: ${{ parameters.vmImageForIOS }}
34
- variables:
35
- CI: ${{ parameters.ci }}
36
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
37
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
38
- steps:
39
- - template: ./functional/ios_setup.yml
40
- parameters:
41
- xcodeVersion: ${{ parameters.xcodeForIOS }}
42
- - template: ./functional/run_appium.yml
43
- - script: bundle exec rake test:func:ios TESTS=test/functional/ios/webdriver/create_session_test.rb,test/functional/ios/webdriver/w3c_actions_test.rb
44
- displayName: Run tests func_test_ios_webdriver1
45
- - template: ./functional/publish_test_result.yml
46
-
47
- - job: func_test_ios_webdriver2
48
- pool:
49
- vmImage: ${{ parameters.vmImageForIOS }}
50
- variables:
51
- CI: ${{ parameters.ci }}
52
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
53
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
54
- steps:
55
- - template: ./functional/ios_setup.yml
56
- parameters:
57
- xcodeVersion: ${{ parameters.xcodeForIOS }}
58
- - template: ./functional/run_appium.yml
59
- - script: bundle exec rake test:func:ios TESTS=test/functional/ios/webdriver/device_test.rb
60
- displayName: Run tests func_test_ios_webdriver2
61
- - template: ./functional/publish_test_result.yml
62
-
63
- - job: func_test_ios_ios1
64
- pool:
65
- vmImage: ${{ parameters.vmImageForIOS }}
66
- variables:
67
- CI: ${{ parameters.ci }}
68
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
69
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
70
- steps:
71
- - template: ./functional/ios_setup.yml
72
- parameters:
73
- xcodeVersion: ${{ parameters.xcodeForIOS }}
74
- - template: ./functional/run_appium.yml
75
- - script: bundle exec rake test:func:ios TESTS=test/functional/ios/ios/device_test.rb
76
- displayName: Run tests func_test_ios_ios1
77
- - template: ./functional/publish_test_result.yml
78
-
79
- - job: func_test_ios_ios2
80
- pool:
81
- vmImage: ${{ parameters.vmImageForIOS }}
82
- variables:
83
- CI: ${{ parameters.ci }}
84
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
85
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
86
- steps:
87
- - template: ./functional/ios_setup.yml
88
- parameters:
89
- xcodeVersion: ${{ parameters.xcodeForIOS }}
90
- - template: ./functional/run_appium.yml
91
- - script: bundle exec rake test:func:ios TESTS=test/functional/ios/ios/device_wda_attachment_test.rb,test/functional/ios/ios/search_context_test.rb
92
- displayName: Run tests func_test_ios_ios2
93
- - template: ./functional/publish_test_result.yml
94
-
95
- - job: func_test_ios_ios3
96
- pool:
97
- vmImage: ${{ parameters.vmImageForIOS }}
98
- variables:
99
- CI: ${{ parameters.ci }}
100
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
101
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
102
- steps:
103
- - template: ./functional/ios_setup.yml
104
- parameters:
105
- xcodeVersion: ${{ parameters.xcodeForIOS }}
106
- - script: brew install ffmpeg && brew tap wix/brew && brew install applesimutils
107
- displayName: Install ffmpeg and applesimutils
108
- - template: ./functional/run_appium.yml
109
- - script: bundle exec rake test:func:ios TESTS=test/functional/ios/ios/mjpeg_server_test.rb,test/functional/ios/ios/mobile_commands_test.rb
110
- displayName: Run tests func_test_ios_ios3
111
- - template: ./functional/publish_test_result.yml
112
-
113
- - job: func_test_ios_tvos
114
- pool:
115
- vmImage: ${{ parameters.vmImage }}
116
- variables:
117
- CI: ${{ parameters.ci }}
118
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
119
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
120
- steps:
121
- - template: ./functional/ios_setup.yml
122
- parameters:
123
- xcodeVersion: ${{ parameters.xcodeForTVOS }}
124
- - template: ./functional/run_appium.yml
125
- - script: bundle exec rake test:func:ios TESTS=test/functional/ios/tv_driver_test.rb
126
- displayName: Run tests func_test_ios_tvos
127
- - template: ./functional/publish_test_result.yml
128
-
129
- # Skip since opencv4nodejs fails to install on the macOS instance
130
- # - job: func_test_ios_opencv
131
- # pool:
132
- # vmImage: ${{ parameters.vmImageForIOS }}
133
- # variables:
134
- # CI: ${{ parameters.ci }}
135
- # IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
136
- # APPIUM_VERSION: ${{ parameters.appiumVersion }}
137
- # steps:
138
- # - template: ./functional/ios_setup.yml
139
- # parameters:
140
- # xcodeVersion: ${{ parameters.xcodeForIOS }}
141
- # - template: ./functional/run_appium.yml
142
- # - script: npm install -g opencv4nodejs@5.1.0
143
- # displayName: Install opencv4nodejs@5.1.0
144
- # - script: bundle exec rake test:func:ios test/functional/ios/ios/image_comparison_test.rb
145
- # displayName: Run tests
146
- # - template: ./functional/publish_test_result.yml
147
-
148
-
149
- - job: func_test_android_base
150
- pool:
151
- vmImage: ${{ parameters.vmImage }}
152
- variables:
153
- CI: ${{ parameters.ci }}
154
- ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
155
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
156
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
157
- strategy:
158
- matrix:
159
- uiautomator2:
160
- AUTOMATION_NAME_DROID: 'uiautomator2'
161
- espresso:
162
- AUTOMATION_NAME_DROID: 'espresso'
163
- steps:
164
- - template: ./functional/android_setup.yml
165
- - template: ./functional/run_appium.yml
166
- - script: bundle exec rake test:func:android TESTS=test/functional/android/driver_test.rb,test/functional/android/patch_test.rb
167
- displayName: Run tests func_test_android_base
168
- - template: ./functional/publish_test_result.yml
169
-
170
- - job: func_test_android_webdriver
171
- pool:
172
- vmImage: ${{ parameters.vmImage }}
173
- variables:
174
- CI: ${{ parameters.ci }}
175
- ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
176
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
177
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
178
- strategy:
179
- matrix:
180
- uiautomator2:
181
- AUTOMATION_NAME_DROID: 'uiautomator2'
182
- espresso:
183
- AUTOMATION_NAME_DROID: 'espresso'
184
- steps:
185
- - template: ./functional/android_setup.yml
186
- - template: ./functional/run_appium.yml
187
- - script: bundle exec rake test:func:android TESTS=test/functional/android/webdriver/create_session_test.rb,test/functional/android/webdriver/device_test.rb,test/functional/android/webdriver/w3c_actions_test.rb
188
- displayName: Run tests func_test_android_webdriver
189
- - template: ./functional/publish_test_result.yml
190
-
191
- - job: func_test_android_android1
192
- pool:
193
- vmImage: ${{ parameters.vmImage }}
194
- variables:
195
- CI: ${{ parameters.ci }}
196
- ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
197
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
198
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
199
- strategy:
200
- matrix:
201
- uiautomator2:
202
- AUTOMATION_NAME_DROID: 'uiautomator2'
203
- espresso:
204
- AUTOMATION_NAME_DROID: 'espresso'
205
- steps:
206
- - template: ./functional/android_setup.yml
207
- - template: ./functional/run_appium.yml
208
- - script: bundle exec rake test:func:android TESTS=test/functional/android/android/device_test.rb
209
- displayName: Run tests func_test_android_android1
210
- - template: ./functional/publish_test_result.yml
211
-
212
- - job: func_test_android_android2
213
- pool:
214
- vmImage: ${{ parameters.vmImage }}
215
- variables:
216
- CI: ${{ parameters.ci }}
217
- ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
218
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
219
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
220
- strategy:
221
- matrix:
222
- uiautomator2:
223
- AUTOMATION_NAME_DROID: 'uiautomator2'
224
- espresso:
225
- AUTOMATION_NAME_DROID: 'espresso'
226
- steps:
227
- - template: ./functional/android_setup.yml
228
- - template: ./functional/run_appium.yml
229
- - script: bundle exec rake test:func:android TESTS=test/functional/android/android/search_context_test.rb,test/functional/android/android/mjpeg_server_test.rb
230
- displayName: Run tests func_test_android_android2
231
- - template: ./functional/publish_test_result.yml
232
-
233
- - job: func_test_android_android3
234
- pool:
235
- vmImage: ${{ parameters.vmImage }}
236
- variables:
237
- CI: ${{ parameters.ci }}
238
- ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
239
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
240
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
241
- strategy:
242
- matrix:
243
- uiautomator2:
244
- AUTOMATION_NAME_DROID: 'uiautomator2'
245
- espresso:
246
- AUTOMATION_NAME_DROID: 'espresso'
247
- steps:
248
- - template: ./functional/android_setup.yml
249
- - template: ./functional/run_appium.yml
250
- - script: bundle exec rake test:func:android TESTS=test/functional/android/android/device_data_test.rb
251
- displayName: Run tests func_test_android_android3
252
- - template: ./functional/publish_test_result.yml
253
-
254
- - job: func_test_android_mobile_command_espresso
255
- pool:
256
- vmImage: ${{ parameters.vmImage }}
257
- variables:
258
- CI: ${{ parameters.ci }}
259
- ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
260
- AUTOMATION_NAME_DROID: espresso
261
- IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
262
- APPIUM_VERSION: ${{ parameters.appiumVersion }}
263
- strategy:
264
- matrix:
265
- uiautomator2:
266
- AUTOMATION_NAME_DROID: 'uiautomator2'
267
- espresso:
268
- AUTOMATION_NAME_DROID: 'espresso'
269
- steps:
270
- - template: ./functional/android_setup.yml
271
- - template: ./functional/run_appium.yml
272
- - script: bundle exec rake test:func:android TESTS=test/functional/android/android/mobile_commands_test.rb
273
- displayName: Run tests func_test_android_mobile_command_espresso
274
- - template: ./functional/publish_test_result.yml
275
-
276
- # Skip since opencv4nodejs fails to install on the macOS instance
277
- # - job: func_test_android_opencv
278
- # pool:
279
- # vmImage: ${{ parameters.vmImage }}
280
- # variables:
281
- # CI: ${{ parameters.ci }}
282
- # ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
283
- # IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
284
- # APPIUM_VERSION: ${{ parameters.appiumVersion }}
285
- # strategy:
286
- # matrix:
287
- # uiautomator2:
288
- # AUTOMATION_NAME_DROID: 'uiautomator2'
289
- # espresso:
290
- # AUTOMATION_NAME_DROID: 'espresso'
291
- # steps:
292
- # - template: ./functional/android_setup.yml
293
- # - template: ./functional/run_appium.yml
294
- # - script: npm install -g opencv4nodejs@5.1.0
295
- # displayName: Install opencv4nodejs@5.1.0
296
- # - script: bundle exec rake test:func:android TESTS=test/functional/android/android/image_comparison_test.rb
297
- # displayName: Run tests func_test_android_opencv
298
- # - template: ./functional/publish_test_result.yml
@@ -1,34 +0,0 @@
1
- # Mobile Command
2
-
3
- Appium has `mobile:` command.
4
- We can invoke them via `execute_script` command with `mobile:` arguments.
5
-
6
- - root:
7
- - https://github.com/appium/appium/blob/master/commands-yml/commands/mobile-command.yml
8
- - Android:
9
- - https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android
10
- - iOS:
11
- - https://github.com/appium/appium/tree/master/docs/en/writing-running-appium/ios
12
-
13
-
14
- ```ruby
15
- # Android shell : https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/android-shell.md
16
- args = { command: 'echo', args: 'list' }
17
- @driver.execute_script 'mobile: shell', args # Run `adb shell echo 'list'`
18
-
19
- # iOS performance : https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/ios/ios-xctest-performance.md
20
- args = { timeout: 60 * 1000, profileName: 'Activity Monitor' }
21
- @driver.execute_script 'mobile: startPerfRecord', args
22
-
23
- @driver.execute_script 'mobile: stopPerfRecord', { profileName: 'Activity Monitor' }
24
- ```
25
-
26
- Mobile commands return their error messages. As a selenium client, it usually handles as unknown error.
27
- To handle it, we would recommend you to handle the error based on the error message.
28
-
29
- ```ruby
30
- error = assert_raises ::Selenium::WebDriver::Error::UnknownError do
31
- @driver.execute_script 'mobile: scrollToPage', { element: el.id, scrollToPage: -100 }
32
- end
33
- assert error.message.include? 'be a non-negative integer'
34
- ```
@@ -1,44 +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 Core
17
- module Ios
18
- module Uiautomation
19
- module Device
20
- def self.add_methods
21
- # UiAutomation, Override included method in bridge
22
- ::Appium::Core::Device.add_endpoint_method(:hide_keyboard) do
23
- def hide_keyboard(close_key = nil, strategy = nil)
24
- option = {}
25
-
26
- option[:key] = close_key || 'Done' # default to Done key.
27
- option[:strategy] = strategy || :pressKey # default to pressKey
28
-
29
- execute :hide_keyboard, {}, option
30
- end
31
- end
32
-
33
- # UiAutomation, Override included method in bridge
34
- ::Appium::Core::Device.add_endpoint_method(:background_app) do
35
- def background_app(duration = 0)
36
- execute :background_app, {}, seconds: duration
37
- end
38
- end
39
- end
40
- end # module Device
41
- end # module Uiautomation
42
- end # module Ios
43
- end # module Core
44
- end # module Appium
@@ -1,34 +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 Core
17
- module Ios
18
- module Uiautomation
19
- # @private
20
- # class_eval inside a method because class Selenium::WebDriver::Element
21
- # will trigger as soon as the file is required. in contrast a method
22
- # will trigger only when invoked.
23
- def self.patch_webdriver_element
24
- ::Appium::Core::Element.class_eval do
25
- # Cross platform way of entering text into a textfield
26
- def type(text, driver)
27
- driver.execute_script %(au.getElement('#{ref}').setValue('#{text}');)
28
- end # def type
29
- end # Selenium::WebDriver::Element.class_eval
30
- end # def patch_webdriver_element
31
- end # module Uiautomation
32
- end # module Ios
33
- end # module Core
34
- end # module Appium
@@ -1,20 +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
- # loaded in common/driver.rb
16
- require_relative 'ios/device'
17
-
18
- require_relative 'ios/uiautomation/patch'
19
- require_relative 'ios/uiautomation/device'
20
- require_relative 'ios/uiautomation/bridge'