appium_lib 8.1.0 → 8.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 +4 -4
- data/Rakefile +14 -8
- data/android_tests/lib/android/specs/common/device.rb +21 -0
- data/android_tests/lib/android/specs/driver.rb +3 -3
- data/android_tests/lib/run.rb +3 -3
- data/contributing.md +3 -1
- data/docs/android_docs.md +14 -2375
- data/docs/migration.md +23 -0
- data/ios_tests/lib/ios/specs/driver.rb +3 -3
- data/lib/appium_lib/common/version.rb +2 -2
- data/lib/appium_lib/device/device.rb +98 -0
- data/lib/appium_lib/driver.rb +40 -36
- data/release_notes.md +9 -2
- metadata +2 -2
data/docs/migration.md
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
### Breaking Changes in 8.2.0
|
2
|
+
change `Appium.load_appium_txt` to `Appium.load_settings`.
|
3
|
+
|
4
|
+
Old | New
|
5
|
+
:--|:--
|
6
|
+
`Appium.load_appium_txt` | `Appium.load_settings`
|
7
|
+
|
8
|
+
- after
|
9
|
+
|
10
|
+
```
|
11
|
+
dir = File.expand_path(File.join(Dir.pwd, 'lib'))
|
12
|
+
appium_txt = File.join(Dir.pwd, 'appium.txt')
|
13
|
+
caps = Appium.load_settings file: appium_txt, verbose: true
|
14
|
+
```
|
15
|
+
|
16
|
+
- before
|
17
|
+
|
18
|
+
```
|
19
|
+
appium_txt = File.expand_path(File.join(Dir.pwd, 'lib'))
|
20
|
+
dir = appium_txt
|
21
|
+
caps = Appium.load_appium_txt file: appium_txt, verbose: true
|
22
|
+
```
|
23
|
+
|
1
24
|
### Breaking Changes in 7.0
|
2
25
|
|
3
26
|
Requires appium 1.4.0-beta or newer for iOS helper methods. appium_lib no longer automatically promotes methods on minispec. To restore the old behavior use: `Appium.promote_appium_methods ::Minitest::Spec`
|
@@ -17,12 +17,12 @@ describe 'driver' do
|
|
17
17
|
data.strip.must_equal 174.chr('UTF-8')
|
18
18
|
end
|
19
19
|
|
20
|
-
t '
|
20
|
+
t 'load_settings' do
|
21
21
|
# skip this test if we're using Sauce
|
22
22
|
# the storage API doesn't have an on disk file
|
23
23
|
skip if sauce?
|
24
|
-
appium_txt = File.
|
25
|
-
opts = Appium.
|
24
|
+
appium_txt = File.join(Dir.pwd, 'appium.txt')
|
25
|
+
opts = Appium.load_settings file: appium_txt, verbose: true
|
26
26
|
|
27
27
|
actual = ''
|
28
28
|
actual = File.basename opts[:caps][:app] if opts && opts[:caps]
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Appium
|
2
2
|
# Version and Date are defined on the 'Appium' module, not 'Appium::Common'
|
3
|
-
VERSION = '8.
|
4
|
-
DATE = '2016-11-
|
3
|
+
VERSION = '8.2.0' unless defined? ::Appium::VERSION
|
4
|
+
DATE = '2016-11-26' unless defined? ::Appium::DATE
|
5
5
|
end
|
@@ -309,6 +309,7 @@ module Appium
|
|
309
309
|
end
|
310
310
|
|
311
311
|
add_touch_actions
|
312
|
+
add_ime_actions
|
312
313
|
extend_search_contexts
|
313
314
|
end
|
314
315
|
|
@@ -359,6 +360,29 @@ module Appium
|
|
359
360
|
end
|
360
361
|
end
|
361
362
|
|
363
|
+
# @private
|
364
|
+
def add_bridge_method(method)
|
365
|
+
if block_given?
|
366
|
+
create_bridge method, &Proc.new
|
367
|
+
else
|
368
|
+
create_bridge method
|
369
|
+
end
|
370
|
+
|
371
|
+
delegate_driver_method method
|
372
|
+
delegate_from_appium_driver method
|
373
|
+
end
|
374
|
+
|
375
|
+
# @private
|
376
|
+
def create_bridge(method)
|
377
|
+
Selenium::WebDriver::Remote::Bridge.class_eval do
|
378
|
+
if block_given?
|
379
|
+
class_eval(&Proc.new)
|
380
|
+
else
|
381
|
+
define_method(method) { execute method }
|
382
|
+
end
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
362
386
|
# @!method find_element
|
363
387
|
# @!method find_elements
|
364
388
|
#
|
@@ -395,6 +419,80 @@ module Appium
|
|
395
419
|
delegate_from_appium_driver(:pinch, Appium::MultiTouch)
|
396
420
|
delegate_from_appium_driver(:zoom, Appium::MultiTouch)
|
397
421
|
end
|
422
|
+
|
423
|
+
def add_ime_actions
|
424
|
+
# Commands for IME are defined in the following commands.rb, but the driver have no bridge.
|
425
|
+
# So, appium_lib define just bridge here.
|
426
|
+
# https://github.com/SeleniumHQ/selenium/blob/selenium-3.0.1/rb/lib/selenium/webdriver/remote/commands.rb#L184-L192
|
427
|
+
|
428
|
+
# @!method ime_activate
|
429
|
+
# Make an engine that is available active.
|
430
|
+
#
|
431
|
+
# Android only.
|
432
|
+
# @param [String] The IME owning the activity [required]
|
433
|
+
#
|
434
|
+
# ```ruby
|
435
|
+
# ime_activate engine: 'com.android.inputmethod.latin/.LatinIME'
|
436
|
+
# ```
|
437
|
+
add_bridge_method(:ime_activate) do
|
438
|
+
def ime_activate(ime_name)
|
439
|
+
execute :imeActivateEngine, {}, engine: ime_name
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
443
|
+
# @!method ime_available_engines
|
444
|
+
# List all available input engines on the machine.
|
445
|
+
# Android only.
|
446
|
+
#
|
447
|
+
# ```ruby
|
448
|
+
# ime_available_engines #=> Get the list of IME installed in the target device
|
449
|
+
# ```
|
450
|
+
add_bridge_method(:ime_available_engines) do
|
451
|
+
def ime_available_engines
|
452
|
+
execute :imeGetAvailableEngines
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
456
|
+
# @!method ime_active_engine
|
457
|
+
# Get the name of the active IME engine.
|
458
|
+
# Android only.
|
459
|
+
#
|
460
|
+
# ```ruby
|
461
|
+
# ime_active_engine #=> Get the current active IME such as 'com.android.inputmethod.latin/.LatinIME'
|
462
|
+
# ```
|
463
|
+
add_bridge_method(:ime_active_engine) do
|
464
|
+
def ime_active_engine
|
465
|
+
execute :imeGetActiveEngine
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
469
|
+
# @!method ime_activated
|
470
|
+
# Indicates whether IME input is active at the moment (not if it is available).
|
471
|
+
# Android only.
|
472
|
+
#
|
473
|
+
# ```ruby
|
474
|
+
# ime_activated #=> True if IME is activated
|
475
|
+
# ```
|
476
|
+
add_bridge_method(:ime_activated) do
|
477
|
+
def ime_activated
|
478
|
+
execute :imeIsActivated
|
479
|
+
end
|
480
|
+
end
|
481
|
+
|
482
|
+
# @!method ime_deactivate
|
483
|
+
# De-activates the currently-active IME engine.
|
484
|
+
#
|
485
|
+
# Android only.
|
486
|
+
#
|
487
|
+
# ```ruby
|
488
|
+
# ime_deactivate #=> Deactivate current IME engine
|
489
|
+
# ```
|
490
|
+
add_bridge_method(:ime_deactivate) do
|
491
|
+
def ime_deactivate
|
492
|
+
execute :imeDeactivate, {}
|
493
|
+
end
|
494
|
+
end
|
495
|
+
end
|
398
496
|
end # class << self
|
399
497
|
|
400
498
|
# @!method set_context
|
data/lib/appium_lib/driver.rb
CHANGED
@@ -51,7 +51,6 @@ end
|
|
51
51
|
|
52
52
|
module Appium
|
53
53
|
# Load appium.txt (toml format)
|
54
|
-
# the basedir of this file + appium.txt is what's used
|
55
54
|
#
|
56
55
|
# ```
|
57
56
|
# [caps]
|
@@ -67,17 +66,15 @@ module Appium
|
|
67
66
|
#
|
68
67
|
# @param opts [Hash] file: '/path/to/appium.txt', verbose: true
|
69
68
|
# @return [hash] the symbolized hash with updated :app and :require keys
|
70
|
-
def self.
|
69
|
+
def self.load_settings(opts = {})
|
71
70
|
fail 'opts must be a hash' unless opts.is_a? Hash
|
72
71
|
fail 'opts must not be empty' if opts.empty?
|
73
72
|
|
74
|
-
|
75
|
-
fail 'Must pass file' unless
|
73
|
+
toml = opts[:file]
|
74
|
+
fail 'Must pass file' unless toml
|
76
75
|
verbose = opts.fetch :verbose, false
|
77
76
|
|
78
|
-
|
79
|
-
toml = File.expand_path File.join parent_dir, 'appium.txt'
|
80
|
-
Appium::Logger.info "appium.txt path: #{toml}" if verbose
|
77
|
+
Appium::Logger.info "appium settings path: #{toml}" if verbose
|
81
78
|
|
82
79
|
toml_exists = File.exist? toml
|
83
80
|
Appium::Logger.info "Exists? #{toml_exists}" if verbose
|
@@ -93,40 +90,47 @@ module Appium
|
|
93
90
|
data[:caps][:app] = Appium::Driver.absolute_app_path data
|
94
91
|
end
|
95
92
|
|
96
|
-
# return list of require files as an array
|
97
|
-
# nil if require doesn't exist
|
98
93
|
if data && data[:appium_lib] && data[:appium_lib][:require]
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
r.map! do |f|
|
103
|
-
file = File.exist?(f) ? f : File.join(parent_dir, f)
|
104
|
-
file = File.expand_path file
|
105
|
-
|
106
|
-
File.exist?(file) ? file : nil
|
107
|
-
end
|
108
|
-
r.compact! # remove nils
|
94
|
+
parent_dir = File.dirname toml
|
95
|
+
data[:appium_lib][:require] = expand_required_files(parent_dir, data[:appium_lib][:require])
|
96
|
+
end
|
109
97
|
|
110
|
-
|
98
|
+
data
|
99
|
+
end
|
111
100
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
# save file
|
116
|
-
files << item
|
117
|
-
next # only look inside folders
|
118
|
-
end
|
119
|
-
Dir.glob(File.expand_path(File.join(item, '**', '*.rb'))) do |f|
|
120
|
-
# do not add folders to the file list
|
121
|
-
files << File.expand_path(f) unless File.directory? f
|
122
|
-
end
|
123
|
-
end
|
101
|
+
class << self
|
102
|
+
alias_method :load_appium_txt, :load_settings
|
103
|
+
end
|
124
104
|
|
125
|
-
|
126
|
-
|
105
|
+
# @param base_dir [String] parent directory of loaded appium.txt (toml)
|
106
|
+
# @param file_paths
|
107
|
+
# @return list of require files as an array, nil if require doesn't exist
|
108
|
+
def self.expand_required_files(base_dir, file_paths)
|
109
|
+
# ensure files are absolute
|
110
|
+
Array(file_paths).map! do |f|
|
111
|
+
file = File.exist?(f) ? f : File.join(base_dir, f)
|
112
|
+
file = File.expand_path file
|
113
|
+
|
114
|
+
File.exist?(file) ? file : nil
|
127
115
|
end
|
116
|
+
r.compact! # remove nils
|
128
117
|
|
129
|
-
|
118
|
+
files = []
|
119
|
+
|
120
|
+
# now expand dirs
|
121
|
+
file_paths.each do |item|
|
122
|
+
unless File.directory? item
|
123
|
+
# save file
|
124
|
+
files << item
|
125
|
+
next # only look inside folders
|
126
|
+
end
|
127
|
+
Dir.glob(File.expand_path(File.join(item, '**', '*.rb'))) do |f|
|
128
|
+
# do not add folders to the file list
|
129
|
+
files << File.expand_path(f) unless File.directory? f
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
files
|
130
134
|
end
|
131
135
|
|
132
136
|
# convert all keys (including nested) to symbols
|
@@ -430,7 +434,7 @@ module Appium
|
|
430
434
|
return app_path unless app_path.match(/[\/\\]/)
|
431
435
|
|
432
436
|
# relative path that must be expanded.
|
433
|
-
# absolute_app_path is called from
|
437
|
+
# absolute_app_path is called from load_settings
|
434
438
|
# and the txt file path is the base of the app path in that case.
|
435
439
|
app_path = File.expand_path app_path
|
436
440
|
fail "App doesn't exist #{app_path}" unless File.exist? app_path
|
data/release_notes.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
+
#### v8.2.0 2016-11-26
|
2
|
+
|
3
|
+
- [4535ec9](https://github.com/appium/ruby_lib/commit/4535ec91f435255ae31b4c4fea9d96e5405d79f5) Release 8.2.0
|
4
|
+
- [8a08021](https://github.com/appium/ruby_lib/commit/8a080213dbe4843f50b6acfbe80628209bfd143d) add endpoint for handling IME in remote bridge (#400)
|
5
|
+
- [222cd47](https://github.com/appium/ruby_lib/commit/222cd47f69ba24b82a122734b0a136e5d6aed330) Allow to name toml files differently than appium.txt, fixes #280 (#397)
|
6
|
+
- [d3a9235](https://github.com/appium/ruby_lib/commit/d3a9235767d6ba770246afac0e62ac58da0eb4b0) update release note and documentation (#396)
|
7
|
+
|
1
8
|
#### v8.1.0 2016-11-18
|
2
9
|
|
3
|
-
- [
|
10
|
+
- [95d3a65](https://github.com/appium/ruby_lib/commit/95d3a6535472559590c4d043e887d15acc445a1a) Release 8.1.0
|
4
11
|
- [6c38ca5](https://github.com/appium/ruby_lib/commit/6c38ca5276342ade6168eb9080424a03608a1b3e) replace end_ to delta_ because end_ is deprecated in #380 (#392)
|
5
12
|
- [09654ab](https://github.com/appium/ruby_lib/commit/09654ab9dbc69a31eff7e7bd426db985da09e3b8) Add EventListener to Driver (#389)
|
6
13
|
- [2d8fc5f](https://github.com/appium/ruby_lib/commit/2d8fc5ff7acce9417847e66772b59fc691c1dbaa) Added touch id endpoint (#384)
|
@@ -1272,4 +1279,4 @@
|
|
1272
1279
|
|
1273
1280
|
- [01f2d15](https://github.com/appium/ruby_lib/commit/01f2d150ae3d8e88970b361a8330c6ccc174097d) Release 0.0.19
|
1274
1281
|
- [10eec2f](https://github.com/appium/ruby_lib/commit/10eec2f197899395978b73de049aed08ceda55cc) AppLib => AppiumLib
|
1275
|
-
- [c1e3b4f](https://github.com/appium/ruby_lib/commit/c1e3b4f0a08be3a0aef65218220f09f4198683bf) AppLib => AppiumLib
|
1282
|
+
- [c1e3b4f](https://github.com/appium/ruby_lib/commit/c1e3b4f0a08be3a0aef65218220f09f4198683bf) AppLib => AppiumLib
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appium_lib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.
|
4
|
+
version: 8.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- code@bootstraponline.com
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: selenium-webdriver
|