appium_lib 9.7.2 → 9.7.3
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 +4 -4
- data/CHANGELOG.md +13 -0
- data/docs/android_docs.md +220 -168
- data/docs/docs.md +13 -37
- data/docs/ios_docs.md +278 -220
- data/docs/ios_xcuitest.md +0 -4
- data/docs/parallel.md +8 -0
- data/lib/appium_lib/android/android.rb +3 -0
- data/lib/appium_lib/android/common/helper.rb +3 -0
- data/lib/appium_lib/android/espresso.rb +9 -0
- data/lib/appium_lib/android/espresso/bridge.rb +14 -0
- data/lib/appium_lib/common/multi_touch.rb +151 -4
- data/lib/appium_lib/common/touch_actions.rb +21 -0
- data/lib/appium_lib/common/wait.rb +2 -22
- data/lib/appium_lib/core/android.rb +1 -0
- data/lib/appium_lib/core/android/espresso/bridge.rb +18 -0
- data/lib/appium_lib/core/android/touch.rb +15 -0
- data/lib/appium_lib/core/android/uiautomator1/bridge.rb +3 -1
- data/lib/appium_lib/core/android/uiautomator2/bridge.rb +3 -1
- data/lib/appium_lib/core/android_espresso.rb +5 -0
- data/lib/appium_lib/core/android_uiautomator2.rb +1 -0
- data/lib/appium_lib/core/core.rb +1 -1
- data/lib/appium_lib/core/device/touch_actions.rb +8 -23
- data/lib/appium_lib/core/driver.rb +93 -17
- data/lib/appium_lib/core/ios.rb +1 -0
- data/lib/appium_lib/core/ios/touch.rb +16 -0
- data/lib/appium_lib/core/ios/uiautomation/bridge.rb +2 -0
- data/lib/appium_lib/core/ios/xcuitest/bridge.rb +2 -0
- data/lib/appium_lib/core/ios/xcuitest/search_context.rb +23 -12
- data/lib/appium_lib/core/ios_xcuitest.rb +1 -0
- data/lib/appium_lib/driver.rb +18 -15
- data/lib/appium_lib/ios/xcuitest/bridge.rb +1 -0
- data/lib/appium_lib/ios/xcuitest/command.rb +1 -0
- data/lib/appium_lib/ios/xcuitest/command/source.rb +20 -0
- data/lib/appium_lib/version.rb +2 -2
- data/readme.md +14 -29
- data/release_notes.md +8 -0
- metadata +10 -3
- data/lib/appium_lib/core/device/multi_touch.rb +0 -213
@@ -10,6 +10,7 @@ module Appium
|
|
10
10
|
attr_reader :http_client
|
11
11
|
|
12
12
|
# Device type to request from the appium server
|
13
|
+
# @return [Symbol] :android and :ios, for example
|
13
14
|
attr_reader :device
|
14
15
|
|
15
16
|
# Automation name sent to appium server or received from server
|
@@ -24,6 +25,8 @@ module Appium
|
|
24
25
|
# Export session id to textfile in /tmp for 3rd party tools
|
25
26
|
# @return [Boolean]
|
26
27
|
attr_reader :export_session
|
28
|
+
# @return [String] By default, session id is exported in '/tmp/appium_lib_session'
|
29
|
+
attr_reader :export_session_path
|
27
30
|
|
28
31
|
# Default wait time for elements to appear
|
29
32
|
# Returns the default client side wait.
|
@@ -38,13 +41,13 @@ module Appium
|
|
38
41
|
attr_reader :port
|
39
42
|
|
40
43
|
# Return a time wait timeout
|
41
|
-
# Wait time for ::Appium::
|
44
|
+
# Wait time for ::Appium::Core::Base::Wait, wait and wait_true
|
42
45
|
# Provide Appium::Drive like { appium_lib: { wait_timeout: 20 } }
|
43
46
|
# @return [Integer]
|
44
47
|
attr_reader :wait_timeout
|
45
48
|
|
46
49
|
# Return a time wait timeout
|
47
|
-
# Wait interval time for ::Appium::
|
50
|
+
# Wait interval time for ::Appium::Core::Base::Wait, wait and wait_true
|
48
51
|
# Provide Appium::Drive like { appium_lib: { wait_interval: 20 } }
|
49
52
|
# @return [Integer]
|
50
53
|
attr_reader :wait_interval
|
@@ -52,13 +55,9 @@ module Appium
|
|
52
55
|
# instance of AbstractEventListener for logging support
|
53
56
|
attr_reader :listener
|
54
57
|
|
55
|
-
private
|
56
|
-
|
57
58
|
# @return [Appium::Core::Base::Driver]
|
58
59
|
attr_reader :driver
|
59
60
|
|
60
|
-
public
|
61
|
-
|
62
61
|
# @private
|
63
62
|
# @see Appium::Core.for
|
64
63
|
#
|
@@ -117,7 +116,8 @@ module Appium
|
|
117
116
|
# listener: nil,
|
118
117
|
# }
|
119
118
|
# }
|
120
|
-
# @
|
119
|
+
# @core = Appium::Driver.new(opts)
|
120
|
+
# @driver = @core.start_driver
|
121
121
|
#
|
122
122
|
def start_driver(server_url: nil,
|
123
123
|
http_client_ops: { http_client: nil, open_timeout: 999_999, read_timeout: 999_999 })
|
@@ -141,7 +141,7 @@ module Appium
|
|
141
141
|
listener: @listener)
|
142
142
|
|
143
143
|
# export session
|
144
|
-
write_session_id(@driver.session_id) if @export_session
|
144
|
+
write_session_id(@driver.session_id, @export_session_path) if @export_session
|
145
145
|
rescue Errno::ECONNREFUSED
|
146
146
|
raise "ERROR: Unable to connect to Appium. Is the server running on #{server_url}?"
|
147
147
|
end
|
@@ -155,6 +155,11 @@ module Appium
|
|
155
155
|
|
156
156
|
# Quits the driver
|
157
157
|
# @return [void]
|
158
|
+
#
|
159
|
+
# @example
|
160
|
+
#
|
161
|
+
# @core.quit_driver
|
162
|
+
#
|
158
163
|
def quit_driver
|
159
164
|
@driver.quit
|
160
165
|
rescue
|
@@ -166,7 +171,7 @@ module Appium
|
|
166
171
|
#
|
167
172
|
# @example
|
168
173
|
#
|
169
|
-
# @
|
174
|
+
# @core.appium_server_version
|
170
175
|
# {
|
171
176
|
# "build" => {
|
172
177
|
# "version" => "0.18.1",
|
@@ -178,7 +183,7 @@ module Appium
|
|
178
183
|
#
|
179
184
|
# @example
|
180
185
|
#
|
181
|
-
# @
|
186
|
+
# @core.appium_server_version #=> {}
|
182
187
|
#
|
183
188
|
def appium_server_version
|
184
189
|
@driver.remote_status
|
@@ -193,7 +198,7 @@ module Appium
|
|
193
198
|
#
|
194
199
|
# @example
|
195
200
|
#
|
196
|
-
# @
|
201
|
+
# @core.platform_version #=> [10.1.1]
|
197
202
|
#
|
198
203
|
def platform_version
|
199
204
|
p_version = @driver.capabilities['platformVersion']
|
@@ -207,15 +212,81 @@ module Appium
|
|
207
212
|
#
|
208
213
|
# @example
|
209
214
|
#
|
210
|
-
# @
|
215
|
+
# @core.screenshot '/tmp/hi.png' #=> nil
|
216
|
+
# # same as `@driver.save_screenshot png_save_path`
|
211
217
|
#
|
212
218
|
def screenshot(png_save_path)
|
213
219
|
@driver.save_screenshot png_save_path
|
214
220
|
nil
|
215
221
|
end
|
216
222
|
|
223
|
+
# Check every interval seconds to see if yield returns a truthy value.
|
224
|
+
# Note this isn't a strict boolean true, any truthy value is accepted.
|
225
|
+
# false and nil are considered failures.
|
226
|
+
# Give up after timeout seconds.
|
227
|
+
#
|
228
|
+
# Wait code from the selenium Ruby gem
|
229
|
+
# https://github.com/SeleniumHQ/selenium/blob/cf501dda3f0ed12233de51ce8170c0e8090f0c20/rb/lib/selenium/webdriver/common/wait.rb
|
230
|
+
#
|
231
|
+
# If only a number is provided then it's treated as the timeout value.
|
232
|
+
#
|
233
|
+
# @param [Hash] opts Options
|
234
|
+
# @option opts [Numeric] :timeout Seconds to wait before timing out. Set default by `appium_wait_timeout` (30).
|
235
|
+
# @option opts [Numeric] :interval Seconds to sleep between polls. Set default by `appium_wait_interval` (0.5).
|
236
|
+
# @option opts [String] :message Exception message if timed out.
|
237
|
+
# @option opts [Array, Exception] :ignore Exceptions to ignore while polling (default: Exception)
|
238
|
+
#
|
239
|
+
# @example
|
240
|
+
#
|
241
|
+
# @core.wait_true { @driver.find_element :accessibility_id, 'something' }
|
242
|
+
#
|
243
|
+
def wait_true(opts = {})
|
244
|
+
opts = process_wait_opts(opts).merge(return_if_true: true)
|
245
|
+
|
246
|
+
opts[:timeout] ||= @wait_timeout
|
247
|
+
opts[:interval] ||= @wait_interval
|
248
|
+
|
249
|
+
wait = ::Appium::Core::Base::Wait.new opts
|
250
|
+
wait.until { yield }
|
251
|
+
end
|
252
|
+
|
253
|
+
# Check every interval seconds to see if yield doesn't raise an exception.
|
254
|
+
# Give up after timeout seconds.
|
255
|
+
#
|
256
|
+
# Wait code from the selenium Ruby gem
|
257
|
+
# https://github.com/SeleniumHQ/selenium/blob/cf501dda3f0ed12233de51ce8170c0e8090f0c20/rb/lib/selenium/webdriver/common/wait.rb
|
258
|
+
#
|
259
|
+
# If only a number is provided then it's treated as the timeout value.
|
260
|
+
#
|
261
|
+
# @param [Hash] opts Options
|
262
|
+
# @option opts [Numeric] :timeout Seconds to wait before timing out. Set default by `appium_wait_timeout` (30).
|
263
|
+
# @option opts [Numeric] :interval Seconds to sleep between polls. Set default by `appium_wait_interval` (0.5).
|
264
|
+
# @option opts [String] :message Exception message if timed out.
|
265
|
+
# @option opts [Array, Exception] :ignore Exceptions to ignore while polling (default: Exception)
|
266
|
+
#
|
267
|
+
# @example
|
268
|
+
#
|
269
|
+
# @core.wait_true { @driver.find_element :accessibility_id, 'something' }
|
270
|
+
#
|
271
|
+
def wait(opts = {})
|
272
|
+
opts = process_wait_opts(opts).merge(return_if_true: false)
|
273
|
+
|
274
|
+
opts[:timeout] ||= @wait_timeout
|
275
|
+
opts[:interval] ||= @wait_interval
|
276
|
+
|
277
|
+
wait = ::Appium::Core::Base::Wait.new opts
|
278
|
+
wait.until { yield }
|
279
|
+
end
|
280
|
+
|
217
281
|
private
|
218
282
|
|
283
|
+
# @private
|
284
|
+
def process_wait_opts(opts)
|
285
|
+
opts = { timeout: opts } if opts.is_a?(Numeric)
|
286
|
+
raise 'opts must be a hash' unless opts.is_a? Hash
|
287
|
+
opts
|
288
|
+
end
|
289
|
+
|
219
290
|
# @private
|
220
291
|
def extend_for(device:, automation_name:, target:)
|
221
292
|
target.extend Appium::Core
|
@@ -224,6 +295,8 @@ module Appium
|
|
224
295
|
case device
|
225
296
|
when :android
|
226
297
|
case automation_name
|
298
|
+
when :espresso
|
299
|
+
::Appium::Core::Android::Espresso::Bridge.for(self)
|
227
300
|
when :uiautomator2
|
228
301
|
::Appium::Core::Android::Uiautomator2::Bridge.for(self)
|
229
302
|
else # default and UiAutomator
|
@@ -291,9 +364,12 @@ module Appium
|
|
291
364
|
|
292
365
|
# @private
|
293
366
|
def set_appium_lib_specific_values(appium_lib_opts)
|
294
|
-
@custom_url
|
295
|
-
@
|
296
|
-
|
367
|
+
@custom_url = appium_lib_opts.fetch :server_url, false
|
368
|
+
@default_wait = appium_lib_opts.fetch :wait, 0
|
369
|
+
|
370
|
+
# bump current session id into a particular file
|
371
|
+
@export_session = appium_lib_opts.fetch :export_session, false
|
372
|
+
@export_session_path = appium_lib_opts.fetch :export_session_path, '/tmp/appium_lib_session'
|
297
373
|
|
298
374
|
@port = appium_lib_opts.fetch :port, 4723
|
299
375
|
|
@@ -330,8 +406,8 @@ module Appium
|
|
330
406
|
end
|
331
407
|
|
332
408
|
# @private
|
333
|
-
def write_session_id(session_id)
|
334
|
-
File.open(
|
409
|
+
def write_session_id(session_id, export_path = '/tmp/appium_lib_session')
|
410
|
+
File.open(export_path, 'w') { |f| f.puts session_id }
|
335
411
|
rescue IOError => e
|
336
412
|
::Appium::Logger.warn e
|
337
413
|
nil
|
data/lib/appium_lib/core/ios.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
module Appium
|
2
|
+
module Core
|
3
|
+
module Ios
|
4
|
+
module Touch
|
5
|
+
def self.extend_touch_actions
|
6
|
+
::Appium::Core::TouchAction.class_eval do
|
7
|
+
def swipe_coordinates(start_x: 0, start_y: 0, offset_x: 0, offset_y: 0)
|
8
|
+
Appium::Logger.info "start_x: #{start_x}, start_y: #{start_y}, offset_x: #{offset_x}, offset_y: #{offset_y}"
|
9
|
+
{ offset_x: offset_x, offset_y: offset_y }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -7,18 +7,29 @@ module Appium
|
|
7
7
|
# Only for XCUITest(WebDriverAgent)
|
8
8
|
# find_element/s can be used with a [class chain]( https://github.com/facebook/WebDriverAgent/wiki/Queries)
|
9
9
|
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
10
|
+
# @example
|
11
|
+
#
|
12
|
+
# # select the third child button of the first child window element
|
13
|
+
# find_elements :class_chain, 'XCUIElementTypeWindow/XCUIElementTypeButton[3]'
|
14
|
+
#
|
15
|
+
# # select all the children windows
|
16
|
+
# find_elements :class_chain, 'XCUIElementTypeWindow'
|
17
|
+
#
|
18
|
+
# # select the second last child of the second child window
|
19
|
+
# find_elements :class_chain, 'XCUIElementTypeWindow[2]/XCUIElementTypeAny[-2]'
|
20
|
+
#
|
21
|
+
# # matching predicate. <code>`</code> is the mark.
|
22
|
+
# find_elements :class_chain, 'XCUIElementTypeWindow[`visible = 1][`name = \"bla\"`]'
|
23
|
+
#
|
24
|
+
# # containing predicate. `$` is the mark.
|
25
|
+
# # Require appium-xcuitest-driver 2.54.0+
|
26
|
+
# # PR: https://github.com/facebook/WebDriverAgent/pull/707/files
|
27
|
+
# find_elements :class_chain, 'XCUIElementTypeWindow[$name = \"bla$$$bla\"$]'
|
28
|
+
# e = find_element :class_chain, "**/XCUIElementTypeWindow[$name == 'Buttons'$]"
|
29
|
+
# e.tag_name #=> "XCUIElementTypeWindow"
|
30
|
+
# e = find_element :class_chain, "**/XCUIElementTypeStaticText[$name == 'Buttons'$]"
|
31
|
+
# e.tag_name #=> "XCUIElementTypeStaticText"
|
32
|
+
#
|
22
33
|
def self.extend
|
23
34
|
::Appium::Core::Base::SearchContext.add_finders(class_chain: '-ios class chain')
|
24
35
|
end
|
data/lib/appium_lib/driver.rb
CHANGED
@@ -39,6 +39,7 @@ module Appium
|
|
39
39
|
attr_reader :caps
|
40
40
|
attr_reader :custom_url
|
41
41
|
attr_reader :export_session
|
42
|
+
attr_reader :export_session_path
|
42
43
|
attr_reader :default_wait
|
43
44
|
attr_reader :appium_port
|
44
45
|
attr_reader :appium_device
|
@@ -129,6 +130,7 @@ module Appium
|
|
129
130
|
@caps = @core.caps
|
130
131
|
@custom_url = @core.custom_url
|
131
132
|
@export_session = @core.export_session
|
133
|
+
@export_session_path = @core.export_session_path
|
132
134
|
@default_wait = @core.default_wait
|
133
135
|
@appium_port = @core.port
|
134
136
|
@appium_wait_timeout = @core.wait_timeout
|
@@ -214,20 +216,21 @@ module Appium
|
|
214
216
|
# Returns a hash of the driver attributes
|
215
217
|
def driver_attributes
|
216
218
|
{
|
217
|
-
caps:
|
218
|
-
automation_name:
|
219
|
-
custom_url:
|
220
|
-
export_session:
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
219
|
+
caps: @core.caps,
|
220
|
+
automation_name: @core.automation_name,
|
221
|
+
custom_url: @core.custom_url,
|
222
|
+
export_session: @core.export_session,
|
223
|
+
export_session_path: @core.export_session_path,
|
224
|
+
default_wait: @core.default_wait,
|
225
|
+
sauce_username: @sauce.username,
|
226
|
+
sauce_access_key: @sauce.access_key,
|
227
|
+
sauce_endpoint: @sauce.endpoint,
|
228
|
+
port: @core.port,
|
229
|
+
device: @core.device,
|
230
|
+
debug: @appium_debug,
|
231
|
+
listener: @listener,
|
232
|
+
wait_timeout: @core.wait_timeout,
|
233
|
+
wait_interval: @core.wait_interval
|
231
234
|
}
|
232
235
|
end
|
233
236
|
|
@@ -431,7 +434,7 @@ module Appium
|
|
431
434
|
# @return [Selenium::WebDriver] the new global driver
|
432
435
|
def start_driver(http_client_ops =
|
433
436
|
{ http_client: ::Appium::Http::Default.new, open_timeout: 999_999, read_timeout: 999_999 })
|
434
|
-
|
437
|
+
@core.quit_driver
|
435
438
|
|
436
439
|
# If automationName is set only in server side, then the following automation_name should be nil before
|
437
440
|
# starting driver.
|
@@ -9,6 +9,7 @@ module Appium
|
|
9
9
|
target.extend Appium::Ios::Device
|
10
10
|
target.extend Appium::Ios::Xcuitest
|
11
11
|
target.extend Appium::Ios::Xcuitest::Command
|
12
|
+
target.extend Appium::Ios::Xcuitest::Source
|
12
13
|
target.extend Appium::Ios::Xcuitest::Helper
|
13
14
|
target.extend Appium::Ios::Xcuitest::Gesture
|
14
15
|
target.extend Appium::Ios::Xcuitest::Element
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Appium
|
2
|
+
module Ios
|
3
|
+
module Xcuitest
|
4
|
+
module Source
|
5
|
+
# @param [String|Symbol] format :xml or :json. :xml is by default.
|
6
|
+
# @option opts [Element] :element Element to swipe on
|
7
|
+
#
|
8
|
+
# ```ruby
|
9
|
+
# xcuitest_source format: :json
|
10
|
+
# ```
|
11
|
+
def xcuitest_source(format: :xml)
|
12
|
+
format = format.to_s if format.is_a? Symbol
|
13
|
+
args = { format: format }
|
14
|
+
|
15
|
+
@driver.execute_script 'mobile: source', args
|
16
|
+
end
|
17
|
+
end # module Gesture
|
18
|
+
end # module Xcuitest
|
19
|
+
end # module Ios
|
20
|
+
end # module Appium
|
data/lib/appium_lib/version.rb
CHANGED
@@ -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.7.
|
4
|
-
DATE = '2017-10-
|
3
|
+
VERSION = '9.7.3'.freeze unless defined? ::Appium::VERSION
|
4
|
+
DATE = '2017-10-21'.freeze unless defined? ::Appium::DATE
|
5
5
|
end
|
data/readme.md
CHANGED
@@ -11,36 +11,34 @@
|
|
11
11
|
- [appium_lib on RubyGems](https://rubygems.org/gems/appium_lib)
|
12
12
|
- [Documentation for appium_lib](https://github.com/appium/ruby_lib/tree/master/docs)
|
13
13
|
- [Appium Ruby Console](https://github.com/appium/ruby_console)
|
14
|
-
- [
|
15
|
-
- [
|
14
|
+
- [Getting Started](https://github.com/appium/appium/blob/master/docs/en/about-appium/getting-started.md)
|
15
|
+
- [code examples](https://github.com/appium/sample-code/tree/master/sample-code/examples/ruby)
|
16
16
|
|
17
17
|
Helper methods for writing cross platform (iOS, Android) tests in Ruby using Appium. Note that user waits should not exceed 120 seconds if they're going to run on Sauce Labs.
|
18
18
|
|
19
19
|
Make sure you're using Appium 1.0.0 or newer and Ruby 2.2+ with upgraded rubygems and bundler.
|
20
20
|
|
21
|
-
XCUITest for iOS requires `Appium 1.6.0+`. `appium_lib9.1.0+` requires `selenium-webdriver3.0.2+`.(`appium_lib9.0.0` or less requires `selenium-webdriver2.x`)
|
22
|
-
|
23
21
|
#### Start appium server
|
24
22
|
|
25
|
-
|
23
|
+
```bash
|
24
|
+
$ npm install -g appium
|
25
|
+
$ appium
|
26
|
+
```
|
26
27
|
|
27
28
|
#### Install / Upgrade
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
gem update --system ;\
|
33
|
-
gem update bundler
|
29
|
+
- Update rubygems and bundler
|
30
|
+
```bash
|
31
|
+
$ gem update --system
|
32
|
+
$ gem update bundler
|
34
33
|
```
|
35
34
|
|
36
|
-
Install the latest gem release
|
37
|
-
|
38
|
-
|
39
|
-
gem uninstall -aIx appium_lib ;\
|
35
|
+
- Install the latest gem release
|
36
|
+
```bash
|
37
|
+
gem uninstall -aIx appium_lib
|
40
38
|
gem install --no-rdoc --no-ri appium_lib
|
41
39
|
```
|
42
40
|
|
43
|
-
#### Sauce Labs env vars
|
41
|
+
#### [Sauce Labs env vars](https://github.com/appium/ruby_lib/blob/master/lib/appium_lib/sauce_labs.rb)
|
44
42
|
|
45
43
|
- `SAUCE_USERNAME` Sauce username
|
46
44
|
- `SAUCE_ACCESS_KEY` Sauce API key
|
@@ -48,11 +46,6 @@ gem install --no-rdoc --no-ri appium_lib
|
|
48
46
|
|
49
47
|
(Note: If these variables are set, all tests will use Sauce Labs unless over-ridden in configuration.)
|
50
48
|
|
51
|
-
#### Troubleshooting
|
52
|
-
|
53
|
-
1. Does `adb kill-server; adb devices` list an active Android device?
|
54
|
-
3. Are you running appium from source? `node .`
|
55
|
-
|
56
49
|
#### Documentation
|
57
50
|
|
58
51
|
- [Installing Appium on OS X](https://github.com/appium/ruby_console/blob/master/osx.md)
|
@@ -62,13 +55,5 @@ gem install --no-rdoc --no-ri appium_lib
|
|
62
55
|
- [Tips for XCUITest for iOS](https://github.com/appium/ruby_lib/blob/master/docs/ios_xcuitest.md)
|
63
56
|
- [Appium Server docs](https://github.com/appium/appium/tree/master/docs)
|
64
57
|
|
65
|
-
#### Logging
|
66
|
-
|
67
|
-
[Log level](https://github.com/appium/ruby_lib/blob/1673a694121d2ae24ffd1530eb71b7015d44dc52/lib/appium_lib/logger.rb) can be adjusted. The default level is `Logger::WARN`
|
68
|
-
|
69
|
-
```ruby
|
70
|
-
Appium::Logger.level = Logger::INFO
|
71
|
-
```
|
72
|
-
|
73
58
|
#### Load Pry
|
74
59
|
`Pry.config.pager = false` is set if you have no `.pryrc` files and `Pry` is defined.
|