appium_lib_core 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rubocop.yml +20 -0
  4. data/.travis.yml +16 -0
  5. data/CHANGELOG.md +11 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +202 -0
  8. data/README.md +5 -0
  9. data/Rakefile +62 -0
  10. data/Thorfile +7 -0
  11. data/appium_lib_core.gemspec +35 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/lib/appium_lib_core.rb +41 -0
  15. data/lib/appium_lib_core/android.rb +5 -0
  16. data/lib/appium_lib_core/android/device.rb +174 -0
  17. data/lib/appium_lib_core/android/espresso/bridge.rb +16 -0
  18. data/lib/appium_lib_core/android/search_context.rb +18 -0
  19. data/lib/appium_lib_core/android/touch.rb +17 -0
  20. data/lib/appium_lib_core/android/uiautomator1/bridge.rb +16 -0
  21. data/lib/appium_lib_core/android/uiautomator2/bridge.rb +16 -0
  22. data/lib/appium_lib_core/android_espresso.rb +5 -0
  23. data/lib/appium_lib_core/android_uiautomator2.rb +5 -0
  24. data/lib/appium_lib_core/common.rb +6 -0
  25. data/lib/appium_lib_core/common/base.rb +8 -0
  26. data/lib/appium_lib_core/common/base/bridge.rb +47 -0
  27. data/lib/appium_lib_core/common/base/capabilities.rb +16 -0
  28. data/lib/appium_lib_core/common/base/command.rb +10 -0
  29. data/lib/appium_lib_core/common/base/driver.rb +51 -0
  30. data/lib/appium_lib_core/common/base/http_default.rb +13 -0
  31. data/lib/appium_lib_core/common/base/search_context.rb +89 -0
  32. data/lib/appium_lib_core/common/base/wait.rb +56 -0
  33. data/lib/appium_lib_core/common/command.rb +77 -0
  34. data/lib/appium_lib_core/common/device.rb +567 -0
  35. data/lib/appium_lib_core/common/error.rb +18 -0
  36. data/lib/appium_lib_core/common/log.rb +30 -0
  37. data/lib/appium_lib_core/common/logger.rb +30 -0
  38. data/lib/appium_lib_core/device/multi_touch.rb +48 -0
  39. data/lib/appium_lib_core/device/touch_actions.rb +191 -0
  40. data/lib/appium_lib_core/driver.rb +459 -0
  41. data/lib/appium_lib_core/ios.rb +7 -0
  42. data/lib/appium_lib_core/ios/device.rb +54 -0
  43. data/lib/appium_lib_core/ios/search_context.rb +27 -0
  44. data/lib/appium_lib_core/ios/touch.rb +17 -0
  45. data/lib/appium_lib_core/ios/uiautomation/bridge.rb +18 -0
  46. data/lib/appium_lib_core/ios/uiautomation/patch.rb +20 -0
  47. data/lib/appium_lib_core/ios/xcuitest/bridge.rb +18 -0
  48. data/lib/appium_lib_core/ios/xcuitest/device.rb +66 -0
  49. data/lib/appium_lib_core/ios/xcuitest/search_context.rb +40 -0
  50. data/lib/appium_lib_core/ios_xcuitest.rb +8 -0
  51. data/lib/appium_lib_core/patch.rb +78 -0
  52. data/lib/appium_lib_core/version.rb +6 -0
  53. data/release_notes.md +0 -0
  54. metadata +262 -0
@@ -0,0 +1,7 @@
1
+ # loaded in common/driver.rb
2
+ require_relative 'ios/search_context'
3
+ require_relative 'ios/device'
4
+ require_relative 'ios/touch'
5
+
6
+ require_relative 'ios/uiautomation/patch'
7
+ require_relative 'ios/uiautomation/bridge'
@@ -0,0 +1,54 @@
1
+ module Appium
2
+ module Ios
3
+ module Device
4
+ extend Forwardable
5
+
6
+ # @!method touch_id(match = true)
7
+ # An instance method of Appium::Core::Device .
8
+ # Simulate Touch ID with either valid (match == true) or invalid (match == false) fingerprint.
9
+ # @param [Boolean] match fingerprint validity. Defaults to true.
10
+ # @return [String]
11
+ #
12
+ # @example
13
+ #
14
+ # @driver.touch_id true #=> Simulate valid fingerprint
15
+ # @driver.touch_id false #=> Simulate invalid fingerprint
16
+ #
17
+
18
+ # @!method toggle_touch_id_enrollment(enabled = true)
19
+ # An instance method of Appium::Core::Device .
20
+ # Toggle touch id enrollment on an iOS Simulator.
21
+ # @param [Boolean] enabled Enable toggle touch id enrollment. Set true by default.
22
+ # @return [String]
23
+ #
24
+ # @example
25
+ #
26
+ # @driver.toggle_touch_id_enrollment #=> Enable toggle enrolled
27
+ # @driver.toggle_touch_id_enrollment true #=> Enable toggle enrolled
28
+ # @driver.toggle_touch_id_enrollment false #=> Disable toggle enrolled
29
+ #
30
+
31
+ ####
32
+ ## class << self
33
+ ####
34
+
35
+ class << self
36
+ def extended(_mod)
37
+ ::Appium::Core::Device.extend_webdriver_with_forwardable
38
+
39
+ ::Appium::Core::Device.add_endpoint_method(:touch_id) do
40
+ def touch_id(match = true)
41
+ execute :touch_id, {}, match: match
42
+ end
43
+ end
44
+
45
+ ::Appium::Core::Device.add_endpoint_method(:toggle_touch_id_enrollment) do
46
+ def toggle_touch_id_enrollment(enabled = true)
47
+ execute :toggle_touch_id_enrollment, {}, enabled: enabled
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end # module Device
53
+ end # module iOS
54
+ end # module Appium
@@ -0,0 +1,27 @@
1
+ module Appium
2
+ module Core
3
+ module Ios
4
+ module SearchContext
5
+ # @!method uiautomation_find
6
+ # find_element/s can be used with a [UIAutomation command](https://developer.apple.com/library/ios/documentation/ToolsLanguages/Reference/UIAWindowClassReference/UIAWindow/UIAWindow.html#//apple_ref/doc/uid/TP40009930).
7
+ #
8
+ # @example
9
+ # find_elements :uiautomation, 'elements()
10
+ #
11
+ #
12
+ # @!method ios_predicate_string_find
13
+ # find_element/s can be used with a [Predicates](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Predicates/AdditionalChapters/Introduction.html)
14
+ #
15
+ # @example
16
+ # find_elements :predicate, "isWDVisible == 1"
17
+ # find_elements :predicate, 'wdName == "Buttons"'
18
+ # find_elements :predicate, 'wdValue == "SearchBar" AND isWDDivisible == 1'
19
+ #
20
+ def self.extend
21
+ ::Appium::Core::Base::SearchContext.add_finders(uiautomation: '-ios uiautomation')
22
+ ::Appium::Core::Base::SearchContext.add_finders(predicate: '-ios predicate string')
23
+ end
24
+ end # class << self
25
+ end # module Ios
26
+ end # module Core
27
+ end # module Appium
@@ -0,0 +1,17 @@
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 "extended Appium::Core::Ios::Touch, start_x: #{start_x},"\
9
+ " start_y: #{start_y}, offset_x: #{offset_x}, offset_y: #{offset_y}"
10
+ { offset_x: offset_x, offset_y: offset_y }
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ module Appium
2
+ module Core
3
+ module Ios
4
+ module Uiautomation
5
+ module Bridge
6
+ def self.for(target)
7
+ Core::Ios::SearchContext.extend
8
+ target.extend Appium::Ios::Device
9
+
10
+ Core::Ios::Uiautomation.patch_webdriver_element
11
+
12
+ Core::Ios::Touch.extend_touch_actions
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ module Appium
2
+ module Core
3
+ module Ios
4
+ module Uiautomation
5
+ # @private
6
+ # class_eval inside a method because class Selenium::WebDriver::Element
7
+ # will trigger as soon as the file is required. in contrast a method
8
+ # will trigger only when invoked.
9
+ def self.patch_webdriver_element
10
+ ::Selenium::WebDriver::Element.class_eval do
11
+ # Cross platform way of entering text into a textfield
12
+ def type(text, driver)
13
+ driver.execute_script %(au.getElement('#{ref}').setValue('#{text}');)
14
+ end # def type
15
+ end # Selenium::WebDriver::Element.class_eval
16
+ end # def patch_webdriver_element
17
+ end # module Uiautomation
18
+ end # module Ios
19
+ end # module Core
20
+ end # module Appium
@@ -0,0 +1,18 @@
1
+ module Appium
2
+ module Core
3
+ module Ios
4
+ module Xcuitest
5
+ module Bridge
6
+ def self.for(target)
7
+ Core::Ios::SearchContext.extend
8
+ Core::Ios::Xcuitest::SearchContext.extend
9
+ target.extend Appium::Ios::Device
10
+ target.extend Appium::Ios::Xcuitest::Device
11
+
12
+ Core::Ios::Touch.extend_touch_actions
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,66 @@
1
+ module Appium
2
+ module Ios
3
+ module Xcuitest
4
+ module Device
5
+ extend Forwardable
6
+
7
+ # @!method hide_keyboard(close_key = nil, strategy = nil)
8
+ # Hide the onscreen keyboard
9
+ # @param [String] close_key The name of the key which closes the keyboard.
10
+ # @param [Symbol] strategy The symbol of the strategy which closes the keyboard.
11
+ # XCUITest ignore this argument.
12
+ # Default for iOS is `:pressKey`. Default for Android is `:tapOutside`.
13
+ #
14
+ # @example
15
+ #
16
+ # @driver.hide_keyboard # Close a keyboard with the 'Done' button
17
+ # @driver.hide_keyboard('Finished') # Close a keyboard with the 'Finished' button
18
+ #
19
+
20
+ # @!method background_app(duration = 0)
21
+ # Backgrounds the app for a set number of seconds.
22
+ # This is a blocking application.
23
+ # @param [Integer] duration How many seconds to background the app for.
24
+ #
25
+ # @example
26
+ #
27
+ # @driver.background_app
28
+ # @driver.background_app(5)
29
+ # @driver.background_app(-1) #=> the app never come back. https://github.com/appium/appium/issues/7741
30
+ #
31
+
32
+ ####
33
+ ## class << self
34
+ ####
35
+
36
+ class << self
37
+ def extended(_mod)
38
+ ::Appium::Core::Device.extend_webdriver_with_forwardable
39
+
40
+ # Override
41
+ ::Appium::Core::Device.add_endpoint_method(:hide_keyboard) do
42
+ def hide_keyboard(close_key = nil, strategy = nil)
43
+ option = {}
44
+
45
+ option[:key] = close_key if close_key
46
+ option[:strategy] = strategy if strategy
47
+
48
+ execute :hide_keyboard, {}, option
49
+ end
50
+ end
51
+
52
+ # Override
53
+ ::Appium::Core::Device.add_endpoint_method(:background_app) do
54
+ def background_app(duration = 0)
55
+ # https://github.com/appium/ruby_lib/issues/500, https://github.com/appium/appium/issues/7741
56
+ # `execute :background_app, {}, seconds: { timeout: duration_milli_sec }` works over Appium 1.6.4
57
+ duration_milli_sec = duration.nil? ? nil : duration * 1000
58
+ execute :background_app, {}, seconds: { timeout: duration_milli_sec }
59
+ end
60
+ end
61
+ end
62
+ end # class << self
63
+ end # module Device
64
+ end # module Xcuitest
65
+ end # module Ios
66
+ end # module Appium
@@ -0,0 +1,40 @@
1
+ module Appium
2
+ module Core
3
+ module Ios
4
+ module Xcuitest
5
+ module SearchContext
6
+ # @!method ios_class_chain_find
7
+ # Only for XCUITest(WebDriverAgent)
8
+ # find_element/s can be used with a [class chain]( https://github.com/facebook/WebDriverAgent/wiki/Queries)
9
+ #
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
+ #
33
+ def self.extend
34
+ ::Appium::Core::Base::SearchContext.add_finders(class_chain: '-ios class chain')
35
+ end
36
+ end
37
+ end # class << self
38
+ end # module Ios
39
+ end # module Core
40
+ end # module Appium
@@ -0,0 +1,8 @@
1
+ # loaded in common/driver.rb
2
+ require_relative 'ios/search_context'
3
+ require_relative 'ios/device'
4
+ require_relative 'ios/touch'
5
+
6
+ require_relative 'ios/xcuitest/search_context'
7
+ require_relative 'ios/xcuitest/device'
8
+ require_relative 'ios/xcuitest/bridge'
@@ -0,0 +1,78 @@
1
+ # rubocop:disable Style/ClassAndModuleChildren
2
+ module Appium
3
+ module Core
4
+ # Implement useful features for element.
5
+ # Patch for Selenium Webdriver.
6
+ class Selenium::WebDriver::Element
7
+ # Note: For testing .text should be used over value, and name.
8
+
9
+ # Returns the value attribute
10
+ #
11
+ # Fixes NoMethodError: undefined method `value' for Selenium::WebDriver::Element for iOS
12
+ # @return [String]
13
+ #
14
+ # @example
15
+ #
16
+ # e = @driver.find_element :accessibility_id, 'something'
17
+ # e.value
18
+ #
19
+ def value
20
+ attribute :value
21
+ end
22
+
23
+ # Returns the name attribute
24
+ #
25
+ # Fixes NoMethodError: undefined method `name' for Selenium::WebDriver::Element for iOS
26
+ # @return [String]
27
+ #
28
+ # @example
29
+ #
30
+ # e = @driver.find_element :accessibility_id, 'something'
31
+ # e.name
32
+ #
33
+ def name
34
+ attribute :name
35
+ end
36
+
37
+ # Enable access to iOS accessibility label
38
+ # accessibility identifier is supported as 'name'
39
+ # @return [String]
40
+ #
41
+ # @example
42
+ #
43
+ # e = @driver.find_element :accessibility_id, 'something'
44
+ # e.label
45
+ #
46
+ def label
47
+ attribute :label
48
+ end
49
+
50
+ # Alias for type
51
+ alias type send_keys
52
+
53
+ # For use with location_rel.
54
+ #
55
+ # @return [::Selenium::WebDriver::Point] the relative x, y in a struct. ex: { x: 0.50, y: 0.20 }
56
+ #
57
+ # @example
58
+ #
59
+ # e = @driver.find_element :accessibility_id, 'something'
60
+ # e.location_rel @driver
61
+ #
62
+ def location_rel(driver)
63
+ rect = self.rect
64
+ location_x = rect.x.to_f
65
+ location_y = rect.y.to_f
66
+
67
+ size_width = rect.width.to_f
68
+ size_height = rect.height.to_f
69
+
70
+ center_x = location_x + (size_width / 2.0)
71
+ center_y = location_y + (size_height / 2.0)
72
+
73
+ w = driver.window_size
74
+ ::Selenium::WebDriver::Point.new "#{center_x} / #{w.width.to_f}", "#{center_y} / #{w.height.to_f}"
75
+ end
76
+ end
77
+ end # module Core
78
+ end # module Appium
@@ -0,0 +1,6 @@
1
+ module Appium
2
+ module Core
3
+ VERSION = '0.1.0'.freeze unless defined? ::Appium::Core::VERSION
4
+ DATE = '2017-11-04'.freeze unless defined? ::Appium::Core::DATE
5
+ end
6
+ end
File without changes
metadata ADDED
@@ -0,0 +1,262 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: appium_lib_core
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Kazuaki MATSUO
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-11-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: selenium-webdriver
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.4'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 3.4.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '3.4'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 3.4.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: json
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '1.8'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '1.8'
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.14'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.14'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '10.0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '10.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: yard
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.9'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.9'
89
+ - !ruby/object:Gem::Dependency
90
+ name: minitest
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '5.0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '5.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: minitest-reporters
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.1'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '1.1'
117
+ - !ruby/object:Gem::Dependency
118
+ name: webmock
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 3.1.0
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: 3.1.0
131
+ - !ruby/object:Gem::Dependency
132
+ name: pry
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: rubocop
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: appium_thor
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.0'
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: 0.0.7
169
+ type: :development
170
+ prerelease: false
171
+ version_requirements: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - "~>"
174
+ - !ruby/object:Gem::Version
175
+ version: '0.0'
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: 0.0.7
179
+ description: Minimal Ruby library for Appium.
180
+ email:
181
+ - fly.49.89.over@gmail.com
182
+ executables: []
183
+ extensions: []
184
+ extra_rdoc_files: []
185
+ files:
186
+ - ".gitignore"
187
+ - ".rubocop.yml"
188
+ - ".travis.yml"
189
+ - CHANGELOG.md
190
+ - Gemfile
191
+ - LICENSE.txt
192
+ - README.md
193
+ - Rakefile
194
+ - Thorfile
195
+ - appium_lib_core.gemspec
196
+ - bin/console
197
+ - bin/setup
198
+ - lib/appium_lib_core.rb
199
+ - lib/appium_lib_core/android.rb
200
+ - lib/appium_lib_core/android/device.rb
201
+ - lib/appium_lib_core/android/espresso/bridge.rb
202
+ - lib/appium_lib_core/android/search_context.rb
203
+ - lib/appium_lib_core/android/touch.rb
204
+ - lib/appium_lib_core/android/uiautomator1/bridge.rb
205
+ - lib/appium_lib_core/android/uiautomator2/bridge.rb
206
+ - lib/appium_lib_core/android_espresso.rb
207
+ - lib/appium_lib_core/android_uiautomator2.rb
208
+ - lib/appium_lib_core/common.rb
209
+ - lib/appium_lib_core/common/base.rb
210
+ - lib/appium_lib_core/common/base/bridge.rb
211
+ - lib/appium_lib_core/common/base/capabilities.rb
212
+ - lib/appium_lib_core/common/base/command.rb
213
+ - lib/appium_lib_core/common/base/driver.rb
214
+ - lib/appium_lib_core/common/base/http_default.rb
215
+ - lib/appium_lib_core/common/base/search_context.rb
216
+ - lib/appium_lib_core/common/base/wait.rb
217
+ - lib/appium_lib_core/common/command.rb
218
+ - lib/appium_lib_core/common/device.rb
219
+ - lib/appium_lib_core/common/error.rb
220
+ - lib/appium_lib_core/common/log.rb
221
+ - lib/appium_lib_core/common/logger.rb
222
+ - lib/appium_lib_core/device/multi_touch.rb
223
+ - lib/appium_lib_core/device/touch_actions.rb
224
+ - lib/appium_lib_core/driver.rb
225
+ - lib/appium_lib_core/ios.rb
226
+ - lib/appium_lib_core/ios/device.rb
227
+ - lib/appium_lib_core/ios/search_context.rb
228
+ - lib/appium_lib_core/ios/touch.rb
229
+ - lib/appium_lib_core/ios/uiautomation/bridge.rb
230
+ - lib/appium_lib_core/ios/uiautomation/patch.rb
231
+ - lib/appium_lib_core/ios/xcuitest/bridge.rb
232
+ - lib/appium_lib_core/ios/xcuitest/device.rb
233
+ - lib/appium_lib_core/ios/xcuitest/search_context.rb
234
+ - lib/appium_lib_core/ios_xcuitest.rb
235
+ - lib/appium_lib_core/patch.rb
236
+ - lib/appium_lib_core/version.rb
237
+ - release_notes.md
238
+ homepage: https://github.com/appium/ruby_lib
239
+ licenses:
240
+ - Apache-2.0
241
+ metadata: {}
242
+ post_install_message:
243
+ rdoc_options: []
244
+ require_paths:
245
+ - lib
246
+ required_ruby_version: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ required_rubygems_version: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - ">="
254
+ - !ruby/object:Gem::Version
255
+ version: '0'
256
+ requirements: []
257
+ rubyforge_project:
258
+ rubygems_version: 2.6.8
259
+ signing_key:
260
+ specification_version: 4
261
+ summary: Minimal Ruby library for Appium.
262
+ test_files: []