appium_lib 9.7.2 → 9.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/docs/android_docs.md +220 -168
  4. data/docs/docs.md +13 -37
  5. data/docs/ios_docs.md +278 -220
  6. data/docs/ios_xcuitest.md +0 -4
  7. data/docs/parallel.md +8 -0
  8. data/lib/appium_lib/android/android.rb +3 -0
  9. data/lib/appium_lib/android/common/helper.rb +3 -0
  10. data/lib/appium_lib/android/espresso.rb +9 -0
  11. data/lib/appium_lib/android/espresso/bridge.rb +14 -0
  12. data/lib/appium_lib/common/multi_touch.rb +151 -4
  13. data/lib/appium_lib/common/touch_actions.rb +21 -0
  14. data/lib/appium_lib/common/wait.rb +2 -22
  15. data/lib/appium_lib/core/android.rb +1 -0
  16. data/lib/appium_lib/core/android/espresso/bridge.rb +18 -0
  17. data/lib/appium_lib/core/android/touch.rb +15 -0
  18. data/lib/appium_lib/core/android/uiautomator1/bridge.rb +3 -1
  19. data/lib/appium_lib/core/android/uiautomator2/bridge.rb +3 -1
  20. data/lib/appium_lib/core/android_espresso.rb +5 -0
  21. data/lib/appium_lib/core/android_uiautomator2.rb +1 -0
  22. data/lib/appium_lib/core/core.rb +1 -1
  23. data/lib/appium_lib/core/device/touch_actions.rb +8 -23
  24. data/lib/appium_lib/core/driver.rb +93 -17
  25. data/lib/appium_lib/core/ios.rb +1 -0
  26. data/lib/appium_lib/core/ios/touch.rb +16 -0
  27. data/lib/appium_lib/core/ios/uiautomation/bridge.rb +2 -0
  28. data/lib/appium_lib/core/ios/xcuitest/bridge.rb +2 -0
  29. data/lib/appium_lib/core/ios/xcuitest/search_context.rb +23 -12
  30. data/lib/appium_lib/core/ios_xcuitest.rb +1 -0
  31. data/lib/appium_lib/driver.rb +18 -15
  32. data/lib/appium_lib/ios/xcuitest/bridge.rb +1 -0
  33. data/lib/appium_lib/ios/xcuitest/command.rb +1 -0
  34. data/lib/appium_lib/ios/xcuitest/command/source.rb +20 -0
  35. data/lib/appium_lib/version.rb +2 -2
  36. data/readme.md +14 -29
  37. data/release_notes.md +8 -0
  38. metadata +10 -3
  39. 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::Common.wait or ::Appium::Common.wait_true.
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::Common.wait or ::Appium::Common.wait_true.
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
- # @driver = Appium::Driver.new(opts).start_driver
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
- # @driver.appium_server_version
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
- # @driver.appium_server_version #=> {}
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
- # @driver.platform_version #=> [10.1.1]
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
- # @driver.screenshot '/tmp/hi.png' #=> nil
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 = appium_lib_opts.fetch :server_url, false
295
- @export_session = appium_lib_opts.fetch :export_session, false
296
- @default_wait = appium_lib_opts.fetch :wait, 0
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('/tmp/appium_lib_session', 'w') { |f| f.puts session_id }
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
@@ -1,6 +1,7 @@
1
1
  # loaded in common/driver.rb
2
2
  require_relative 'ios/search_context'
3
3
  require_relative 'ios/device'
4
+ require_relative 'ios/touch'
4
5
 
5
6
  require_relative 'ios/uiautomation/patch'
6
7
  require_relative 'ios/uiautomation/bridge'
@@ -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
@@ -10,6 +10,8 @@ module Appium
10
10
  target.extend Appium::Ios::Device
11
11
 
12
12
  Core::Ios::Uiautomation.patch_webdriver_element
13
+
14
+ Core::Ios::Touch.extend_touch_actions
13
15
  end
14
16
  end
15
17
  end
@@ -10,6 +10,8 @@ module Appium
10
10
  Core::Ios::Xcuitest::SearchContext.extend
11
11
  target.extend Appium::Ios::Device
12
12
  target.extend Appium::Ios::Xcuitest::Device
13
+
14
+ Core::Ios::Touch.extend_touch_actions
13
15
  end
14
16
  end
15
17
  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
- # ```ruby
11
- # # select the third child button of the first child window element
12
- # find_elements :class_chain, 'XCUIElementTypeWindow/XCUIElementTypeButton[3]'
13
- # # select all the children windows
14
- # find_elements :class_chain, 'XCUIElementTypeWindow'
15
- # # select the second last child of the second child window
16
- # find_elements :class_chain, 'XCUIElementTypeWindow[2]/XCUIElementTypeAny[-2]'
17
- # # matching predicate. <code>`</code> is the mark.
18
- # find_elements :class_chain, 'XCUIElementTypeWindow[`visible = 1][`name = \"bla\"`]'
19
- # # containing predicate. `$` is the mark.
20
- # find_elements :class_chain, 'XCUIElementTypeWindow[$name = \"bla$$$bla\"$]'
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
@@ -1,6 +1,7 @@
1
1
  # loaded in common/driver.rb
2
2
  require_relative 'ios/search_context'
3
3
  require_relative 'ios/device'
4
+ require_relative 'ios/touch'
4
5
 
5
6
  require_relative 'ios/xcuitest/search_context'
6
7
  require_relative 'ios/xcuitest/device'
@@ -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: @core.caps,
218
- automation_name: @core.automation_name,
219
- custom_url: @core.custom_url,
220
- export_session: @core.export_session,
221
- default_wait: @core.default_wait,
222
- sauce_username: @sauce.username,
223
- sauce_access_key: @sauce.access_key,
224
- sauce_endpoint: @sauce.endpoint,
225
- port: @core.port,
226
- device: @core.device,
227
- debug: @appium_debug,
228
- listener: @listener,
229
- wait_timeout: @core.wait_timeout,
230
- wait_interval: @core.wait_interval
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
- driver_quit
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
@@ -1,5 +1,6 @@
1
1
  require_relative 'command/pasteboard'
2
2
  require_relative 'command/gestures'
3
+ require_relative 'command/source'
3
4
 
4
5
  module Appium
5
6
  module Ios
@@ -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
@@ -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.2'.freeze unless defined? ::Appium::VERSION
4
- DATE = '2017-10-07'.freeze unless defined? ::Appium::DATE
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
- - [Bootcamp quick start guide](http://sauceio.com/index.php/tag/appium-bootcamp/) & [Bootcamp example source](https://github.com/tourdedave/appium-getting-started-code-exampes)
15
- - [Mobile automation walkthrough with Ruby and Sauce](http://stackshare.io/sauce-labs/mobile-automation-with-appium-and-sauce-labs) & [code examples](https://github.com/jlipps/appium-ruby-example)
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
- `node .`
23
+ ```bash
24
+ $ npm install -g appium
25
+ $ appium
26
+ ```
26
27
 
27
28
  #### Install / Upgrade
28
-
29
- Update rubygems and bundler.
30
-
31
- ```ruby
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
- ```ruby
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.