appium_lib 9.4.5 → 9.4.6
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 +9 -0
- data/appium_lib.gemspec +1 -1
- data/docs/android_docs.md +224 -224
- data/docs/ios_docs.md +250 -250
- data/lib/appium_lib/common/version.rb +1 -1
- data/release_notes.md +13 -0
- metadata +1 -109
- data/android_tests/Gemfile +0 -2
- data/android_tests/LICENSE-2.0.txt +0 -202
- data/android_tests/Rakefile +0 -68
- data/android_tests/api.apk +0 -0
- data/android_tests/appium.txt +0 -11
- data/android_tests/flaky.txt +0 -1
- data/android_tests/lib/android/specs/android/element/alert.rb +0 -48
- data/android_tests/lib/android/specs/android/element/button.rb +0 -52
- data/android_tests/lib/android/specs/android/element/generic.rb +0 -58
- data/android_tests/lib/android/specs/android/element/text.rb +0 -35
- data/android_tests/lib/android/specs/android/element/textfield.rb +0 -62
- data/android_tests/lib/android/specs/android/helper.rb +0 -111
- data/android_tests/lib/android/specs/android/patch.rb +0 -27
- data/android_tests/lib/android/specs/common/command.rb +0 -52
- data/android_tests/lib/android/specs/common/device.rb +0 -159
- data/android_tests/lib/android/specs/common/device_touchaction.rb +0 -34
- data/android_tests/lib/android/specs/common/element/window.rb +0 -11
- data/android_tests/lib/android/specs/common/helper.rb +0 -112
- data/android_tests/lib/android/specs/common/patch.rb +0 -78
- data/android_tests/lib/android/specs/common/version.rb +0 -9
- data/android_tests/lib/android/specs/common/web_context.rb +0 -60
- data/android_tests/lib/android/specs/device/touch_actions.rb +0 -71
- data/android_tests/lib/android/specs/driver.rb +0 -280
- data/android_tests/lib/android/specs/install.rb +0 -26
- data/android_tests/lib/format.rb +0 -47
- data/android_tests/lib/run.rb +0 -91
- data/android_tests/readme.md +0 -30
- data/grid/README.md +0 -21
- data/grid/appium.txt.ios.example +0 -15
- data/grid/config.json +0 -25
- data/grid/hub_config.json +0 -14
- data/grid/selenium-server-standalone-2.53.1.jar +0 -0
- data/grid/selenium-server-standalone-3.2.0.jar +0 -0
- data/ios_tests/Gemfile +0 -4
- data/ios_tests/LICENSE-2.0.txt +0 -202
- data/ios_tests/Rakefile +0 -54
- data/ios_tests/UICatalog.app.zip +0 -0
- data/ios_tests/UICatalog.app/12-6AM.png +0 -0
- data/ios_tests/UICatalog.app/12-6PM.png +0 -0
- data/ios_tests/UICatalog.app/6-12AM.png +0 -0
- data/ios_tests/UICatalog.app/6-12PM.png +0 -0
- data/ios_tests/UICatalog.app/Default-568h@2x.png +0 -0
- data/ios_tests/UICatalog.app/Default@2x.png +0 -0
- data/ios_tests/UICatalog.app/Info.plist +0 -0
- data/ios_tests/UICatalog.app/PkgInfo +0 -1
- data/ios_tests/UICatalog.app/UIButton_custom.png +0 -0
- data/ios_tests/UICatalog.app/UICatalog +0 -0
- data/ios_tests/UICatalog.app/blueButton.png +0 -0
- data/ios_tests/UICatalog.app/bookmarkImage.png +0 -0
- data/ios_tests/UICatalog.app/bookmarkImageHighlighted.png +0 -0
- data/ios_tests/UICatalog.app/divider.png +0 -0
- data/ios_tests/UICatalog.app/en.lproj/AlertsViewController.nib +0 -0
- data/ios_tests/UICatalog.app/en.lproj/ButtonsViewController.nib +0 -0
- data/ios_tests/UICatalog.app/en.lproj/ControlsViewController.nib +0 -0
- data/ios_tests/UICatalog.app/en.lproj/ImagesViewController.nib +0 -0
- data/ios_tests/UICatalog.app/en.lproj/Localizable.strings +0 -0
- data/ios_tests/UICatalog.app/en.lproj/MainWindow.nib +0 -0
- data/ios_tests/UICatalog.app/en.lproj/PickerViewController.nib +0 -0
- data/ios_tests/UICatalog.app/en.lproj/SearchBarController.nib +0 -0
- data/ios_tests/UICatalog.app/en.lproj/SegmentViewController.nib +0 -0
- data/ios_tests/UICatalog.app/en.lproj/TextFieldController.nib +0 -0
- data/ios_tests/UICatalog.app/en.lproj/TextViewController.nib +0 -0
- data/ios_tests/UICatalog.app/en.lproj/ToolbarViewController.nib +0 -0
- data/ios_tests/UICatalog.app/en.lproj/TransitionViewController.nib +0 -0
- data/ios_tests/UICatalog.app/en.lproj/WebViewController.nib +0 -0
- data/ios_tests/UICatalog.app/orangeslide.png +0 -0
- data/ios_tests/UICatalog.app/scene1.jpg +0 -0
- data/ios_tests/UICatalog.app/scene2.jpg +0 -0
- data/ios_tests/UICatalog.app/scene3.jpg +0 -0
- data/ios_tests/UICatalog.app/scene4.jpg +0 -0
- data/ios_tests/UICatalog.app/scene5.jpg +0 -0
- data/ios_tests/UICatalog.app/searchBarBackground.png +0 -0
- data/ios_tests/UICatalog.app/segment_check.png +0 -0
- data/ios_tests/UICatalog.app/segment_search.png +0 -0
- data/ios_tests/UICatalog.app/segment_tools.png +0 -0
- data/ios_tests/UICatalog.app/segmentedBackground.png +0 -0
- data/ios_tests/UICatalog.app/slider_ball.png +0 -0
- data/ios_tests/UICatalog.app/toolbarBackground.png +0 -0
- data/ios_tests/UICatalog.app/whiteButton.png +0 -0
- data/ios_tests/UICatalog.app/yellowslide.png +0 -0
- data/ios_tests/appium.txt +0 -15
- data/ios_tests/data/unicode.txt +0 -1
- data/ios_tests/flaky.txt +0 -1
- data/ios_tests/lib/common.rb +0 -84
- data/ios_tests/lib/format.rb +0 -23
- data/ios_tests/lib/ios/specs/common/command.rb +0 -45
- data/ios_tests/lib/ios/specs/common/element/window.rb +0 -17
- data/ios_tests/lib/ios/specs/common/helper.rb +0 -228
- data/ios_tests/lib/ios/specs/common/patch.rb +0 -54
- data/ios_tests/lib/ios/specs/common/version.rb +0 -17
- data/ios_tests/lib/ios/specs/common/web_context.rb +0 -15
- data/ios_tests/lib/ios/specs/device/device.rb +0 -130
- data/ios_tests/lib/ios/specs/device/multi_touch.rb +0 -31
- data/ios_tests/lib/ios/specs/device/touch_actions.rb +0 -90
- data/ios_tests/lib/ios/specs/driver.rb +0 -308
- data/ios_tests/lib/ios/specs/ios/element/alert.rb +0 -51
- data/ios_tests/lib/ios/specs/ios/element/button.rb +0 -58
- data/ios_tests/lib/ios/specs/ios/element/generic.rb +0 -37
- data/ios_tests/lib/ios/specs/ios/element/text.rb +0 -63
- data/ios_tests/lib/ios/specs/ios/element/textfield.rb +0 -135
- data/ios_tests/lib/ios/specs/ios/helper.rb +0 -59
- data/ios_tests/lib/ios/specs/ios/mobile_methods.rb +0 -20
- data/ios_tests/lib/ios/specs/ios/patch.rb +0 -34
- data/ios_tests/lib/ios/specs/ios/xcuitest_gestures.rb +0 -110
- data/ios_tests/lib/run.rb +0 -4
- data/ios_tests/readme.md +0 -31
- data/ios_tests/upload/sauce_storage.rb +0 -67
- data/ios_tests/upload/upload.rb +0 -6
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# rubocop:disable Lint/RescueException
|
|
2
|
-
# rubocop:disable Metrics/LineLength
|
|
3
|
-
|
|
4
|
-
#
|
|
5
|
-
# Skip:
|
|
6
|
-
# status # status patches are already tested in driver.rb
|
|
7
|
-
# raw_execute # debug output for Pry
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
# rake ios[common/patch]
|
|
11
|
-
describe 'common/patch.rb' do
|
|
12
|
-
def before_first
|
|
13
|
-
screen.must_equal catalog
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
t 'before_first' do
|
|
17
|
-
before_first
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# Attributes are busted in Android.
|
|
21
|
-
# Blocked on https://github.com/appium/appium/issues/628
|
|
22
|
-
describe 'Selenium::WebDriver::Element methods' do
|
|
23
|
-
# TODO: t 'value' do; end
|
|
24
|
-
|
|
25
|
-
t 'name' do
|
|
26
|
-
first_text.name.must_equal 'UICatalog'
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# t 'tag_name' do; end # Doesn't work on Android
|
|
30
|
-
|
|
31
|
-
t 'location_rel' do
|
|
32
|
-
loc = first_text.location_rel
|
|
33
|
-
loc.x.class.must_equal String
|
|
34
|
-
loc.y.class.must_equal String
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
describe 'common patch' do
|
|
39
|
-
# By default, the webdriver gem will return message instead of origValue
|
|
40
|
-
# {"message":"An unknown server-side error occurred while processing the command.","origValue":"Strategy id is not valid."}
|
|
41
|
-
t 'error_message' do
|
|
42
|
-
value = ''
|
|
43
|
-
begin
|
|
44
|
-
set_wait 0
|
|
45
|
-
find_element(:css, 'ok')
|
|
46
|
-
rescue Exception => e
|
|
47
|
-
value = e.message
|
|
48
|
-
ensure
|
|
49
|
-
set_wait
|
|
50
|
-
end
|
|
51
|
-
value.must_equal "Locator Strategy 'css selector' is not supported for this session"
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
describe 'version.rb' do
|
|
2
|
-
def before_first
|
|
3
|
-
screen.must_equal catalog
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
t 'before_first' do
|
|
7
|
-
before_first
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
t '::Appium::VERSION' do
|
|
11
|
-
::Appium::VERSION.must_match(/(\d+)\.(\d+).(\d+)/)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
t '::Appium::DATE' do
|
|
15
|
-
::Appium::DATE.must_match(/(\d+)\-(\d+)\-(\d+)/)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Tests specifically for areas where the web_context differs in behaviour
|
|
2
|
-
describe 'the web context' do
|
|
3
|
-
t 'get_android_inspect' do
|
|
4
|
-
text('Web').click
|
|
5
|
-
set_context 'WEBVIEW'
|
|
6
|
-
current_context.must_equal 'WEBVIEW_1'
|
|
7
|
-
sleep 1 # Give a chance to load
|
|
8
|
-
page.start_with?("\nhtml\n").must_equal true
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
t 'after_last' do
|
|
12
|
-
set_context 'NATIVE_APP'
|
|
13
|
-
back_click
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
describe 'device/device' do
|
|
2
|
-
def before_first
|
|
3
|
-
screen.must_equal catalog
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
# go back to the main page
|
|
7
|
-
def go_back
|
|
8
|
-
back
|
|
9
|
-
wait { !exists { id 'ArrowButton' } } # successfully transitioned back
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
t 'before_first' do
|
|
13
|
-
before_first
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
t 'device_time' do
|
|
17
|
-
Date.parse(device_time)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
t 'lock' do
|
|
21
|
-
raise NotImplementedError, "XCUITest(Appium1.6.2) doesn't support yet" if UI::Inventory.xcuitest?
|
|
22
|
-
|
|
23
|
-
lock 5
|
|
24
|
-
tag(UI::Inventory.button).name.must_equal 'SlideToUnlock'
|
|
25
|
-
|
|
26
|
-
# It appears that lockForDuration doesn't.
|
|
27
|
-
close_app
|
|
28
|
-
launch_app
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
t 'background_app' do
|
|
32
|
-
background_app 5
|
|
33
|
-
screen.must_equal catalog
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
t 'app_installed' do
|
|
37
|
-
raise NotImplementedError, "XCUITest(Appium1.6.2) doesn't support yet" if UI::Inventory.xcuitest?
|
|
38
|
-
|
|
39
|
-
installed = app_installed? 'Derrp'
|
|
40
|
-
installed.must_equal false
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
t 'shake' do
|
|
44
|
-
raise NotImplementedError, "XCUITest(Appium1.6.2) doesn't support yet" if UI::Inventory.xcuitest?
|
|
45
|
-
|
|
46
|
-
shake
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
t 'close and launch' do
|
|
50
|
-
close_app
|
|
51
|
-
launch_app
|
|
52
|
-
tag(UI::Inventory.navbar).name.must_equal 'UICatalog'
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
t 'background_app homescreen' do
|
|
56
|
-
background_app(-1) # background_app(nil) should work as same.
|
|
57
|
-
|
|
58
|
-
screen.must_equal 'UICatalog'
|
|
59
|
-
# TODO: Should update this assert.
|
|
60
|
-
# screen.must_raise ::Selenium::WebDriver::Error::NoSuchElementError
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
t 'reset' do
|
|
64
|
-
reset
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
t 'available_contexts' do
|
|
68
|
-
available_contexts.must_equal ['NATIVE_APP']
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
t 'current_context' do
|
|
72
|
-
current_context.must_equal 'NATIVE_APP'
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
t 'switch_to_default_context' do
|
|
76
|
-
switch_to_default_context
|
|
77
|
-
current_context.must_equal 'NATIVE_APP'
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
t 'app_strings' do
|
|
81
|
-
app_strings.must_include 'SearchBarExplain'
|
|
82
|
-
app_strings('en').must_include 'SearchBarExplain'
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
t 'action_chain' do
|
|
86
|
-
Appium::TouchAction.new.press(element: text(app_strings['ButtonsExplain'])).perform
|
|
87
|
-
wait { id 'ArrowButton' } # successfully transitioned to buttons page
|
|
88
|
-
go_back
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
t 'swipe' do
|
|
92
|
-
touch_action = Appium::TouchAction.new.swipe(start_x: 75, start_y: 500,
|
|
93
|
-
offset_x: 75, offset_y: 20, duration: 500).perform
|
|
94
|
-
touch_action.actions.must_equal []
|
|
95
|
-
|
|
96
|
-
touch_action = Appium::TouchAction.new.swipe(start_x: 75, start_y: 500, offset_x: 75, offset_y: 20, duration: 500)
|
|
97
|
-
|
|
98
|
-
touch_action.actions[0][:action].must_equal :press
|
|
99
|
-
touch_action.actions[0][:options].must_equal(x: 75, y: 500)
|
|
100
|
-
|
|
101
|
-
touch_action.actions[1][:action].must_equal :wait,
|
|
102
|
-
touch_action.actions[1][:options].must_equal(ms: 500)
|
|
103
|
-
|
|
104
|
-
touch_action.actions[2][:action].must_equal :moveTo
|
|
105
|
-
touch_action.actions[2][:options].must_equal(x: 75, y: 20)
|
|
106
|
-
|
|
107
|
-
touch_action.actions[3][:action].must_equal :release
|
|
108
|
-
|
|
109
|
-
touch_action.perform
|
|
110
|
-
touch_action.actions.must_equal []
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
t 'pull_file' do
|
|
114
|
-
# Selenium::WebDriver::Error::UnknownError: An unknown server-side error occurred while processing the command.
|
|
115
|
-
# Original error: Cannot read property 'getDir' of undefined
|
|
116
|
-
raise NotImplementedError, "XCUITest(Appium1.6.2) doesn't support yet" if UI::Inventory.xcuitest?
|
|
117
|
-
|
|
118
|
-
read_file = pull_file 'Library/AddressBook/AddressBook.sqlitedb'
|
|
119
|
-
read_file.start_with?('SQLite format').must_equal true
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
t 'pull_folder' do
|
|
123
|
-
# Selenium::WebDriver::Error::UnknownError: An unknown server-side error occurred while processing the command.
|
|
124
|
-
# Original error: Cannot read property 'getDir' of undefined
|
|
125
|
-
raise NotImplementedError, "XCUITest(Appium1.6.2) doesn't support yet" if UI::Inventory.xcuitest?
|
|
126
|
-
|
|
127
|
-
data = pull_folder 'Library/AddressBook'
|
|
128
|
-
data.length.must_be :>, 1
|
|
129
|
-
end
|
|
130
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# rake ios[device/multi_touch]
|
|
2
|
-
describe 'device/multi_touch' do
|
|
3
|
-
def before_first
|
|
4
|
-
screen.must_equal catalog
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
# go back to the main page
|
|
8
|
-
def go_back
|
|
9
|
-
back
|
|
10
|
-
wait { !exists { id 'ArrowButton' } } # successfully transitioned back
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
t 'before_first' do
|
|
14
|
-
before_first
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
t 'pinch & zoom' do
|
|
18
|
-
wait { id('Images').click }
|
|
19
|
-
# both of these appear to do nothing on iOS 8
|
|
20
|
-
Appium::MultiTouch.zoom 200
|
|
21
|
-
Appium::MultiTouch.pinch 75
|
|
22
|
-
go_back
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# TODO: write tests
|
|
27
|
-
# pinch
|
|
28
|
-
# zoom
|
|
29
|
-
# initialize
|
|
30
|
-
# add
|
|
31
|
-
# perform
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# rake ios[device/touch_actions]
|
|
2
|
-
describe 'device/touch_actions' do
|
|
3
|
-
def after_last
|
|
4
|
-
back_click
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
t 'swipe_default_duration' do
|
|
8
|
-
wait_true do
|
|
9
|
-
wait { UI::Inventory.xcuitest? ? find_element(:name, 'Pickers').click : text('pickers').click }
|
|
10
|
-
screen == 'Pickers'
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
ele_index(UI::Inventory.static_text, 2).text.must_equal 'John Appleseed - 0'
|
|
14
|
-
picker = ele_index(UI::Inventory.picker, 1)
|
|
15
|
-
loc = picker.location.to_h
|
|
16
|
-
size = picker.size.to_h
|
|
17
|
-
start_x = loc[:x] + size[:width] / 2
|
|
18
|
-
start_y = loc[:y] + size[:height] / 2
|
|
19
|
-
# rubocop:disable Metrics/LineLength
|
|
20
|
-
# Example for iOS's log with XCUITest
|
|
21
|
-
# [0] pry(#<device/touch_actions>)> swipe start_x: start_x, start_y: start_y, offset_x: 0, offset_y: - 50
|
|
22
|
-
# [debug] [WebDriverAgent] Sim: Jan 14 16:35:05 rrcs-172-254-99-35 CoreSimulatorBridge[65868]: KEYMAP: Chose mode=en_US@hw=Automatic;sw=QWERTY from match=en_US@hw=Automatic;sw=QWERTY from language=en
|
|
23
|
-
# [HTTP] --> POST /wd/hub/session/cd65fa75-cbd7-4348-a7d6-60cbde28db47/touch/perform {"actions":[{"action":"press","options":{"x":187,"y":201}},{"action":"wait","options":{"ms":200}},{"action":"moveTo","options":{"x":0,"y":-50}},{"action":"release"}]}
|
|
24
|
-
# [debug] [MJSONWP] Calling AppiumDriver.performTouch() with args: [[{"action":"press","options":{"x":187,"y":201}},{"action":"wait","options":{"ms":200}},{"action":"moveTo","options":{"x":0,"y":-50}},{"action":"release"}],"cd65fa75-cbd7-4348-a7d6-60cbde28db47"]
|
|
25
|
-
# [debug] [XCUITest] Executing command 'performTouch'
|
|
26
|
-
# [debug] [XCUITest] Received the following touch action: press-wait-moveTo-release
|
|
27
|
-
# [debug] [JSONWP Proxy] Proxying [POST /uiaTarget/0/dragfromtoforduration] to [POST http://localhost:8100/session/0D2991FB-A997-4D6C-94FC-D65CC252EC4B/uiaTarget/0/dragfromtoforduration] with body: {"fromX":187,"fromY":201,"toX":187,"toY":151,"duration":0.2}
|
|
28
|
-
# [debug] [WebDriverAgent] Sim: Jan 14 16:35:05 rrcs-172-254-99-35 CoreSimulatorBridge[65868]: Switching to keyboard: en
|
|
29
|
-
#
|
|
30
|
-
# Example for iOS's log with Instruments
|
|
31
|
-
# [0] pry(#<device/touch_actions>)> swipe start_x: start_x, start_y: start_y, offset_x: 0, offset_y: - 50, duration: 1000
|
|
32
|
-
# [HTTP] <-- POST /wd/hub/session/8b651f03-0fbc-43f0-aaf2-243d0650f6aa/touch/perform 200 2048 ms - 74
|
|
33
|
-
# [HTTP] --> POST /wd/hub/session/8b651f03-0fbc-43f0-aaf2-243d0650f6aa/touch/perform {"actions":[{"action":"press","options":{"x":187,"y":201.078125}},{"action":"wait","options":{"ms":1000}},{"action":"moveTo","options":{"x":0,"y":-50}},{"action":"release"}]}
|
|
34
|
-
# [debug] [MJSONWP] Calling AppiumDriver.performTouch() with args: [[{"action":"press","options":{"x":187,"y":201.078125}},{"action":"wait","options":{"ms":1000}},{"action":"moveTo","options":{"x":0,"y":-50}},{"action":"release"}],"8b651f03-0fbc-43f0-aaf2-243d0650f6aa"]
|
|
35
|
-
# [debug] [iOS] Executing iOS command 'performTouch'
|
|
36
|
-
# [debug] [UIAuto] Sending command to instruments: au.dragApp(187, 201.078125, 187, 151.078125, 1)
|
|
37
|
-
# [debug] [Instruments] [INST] 2017-01-14 08:22:57 +0000 Debug: Got new command 12 from instruments: au.dragApp(187, 201.078125, 187, 151.078125, 1)
|
|
38
|
-
# [debug] [Instruments] [INST] 2017-01-14 08:22:57 +0000 Debug: evaluating au.dragApp(187, 201.078125, 187, 151.078125, 1)
|
|
39
|
-
# [debug] [Instruments] [INST] 2017-01-14 08:22:57 +0000 Debug: target.dragFromToForDuration({x:"187", y:"201.078125"}, {x:"187", y:"151.078125"}, "1")
|
|
40
|
-
# [debug] [Instruments] [INST] 2017-01-14 08:22:58 +0000 Debug: evaluation finished
|
|
41
|
-
# [debug] [Instruments] [INST] 2017-01-14 08:22:58 +0000 Debug: responding with:
|
|
42
|
-
# [debug] [UIAuto] Socket data received (25 bytes)
|
|
43
|
-
# [debug] [UIAuto] Got result from instruments: {"status":0,"value":""}
|
|
44
|
-
# [debug] [MJSONWP] Responding to client with driver.performTouch() result: ""
|
|
45
|
-
# [HTTP] <-- POST /wd/hub/session/8b651f03-0fbc-43f0-aaf2-243d0650f6aa/touch/perform 200 1895 ms - 74
|
|
46
|
-
# rubocop:enable Metrics/LineLength
|
|
47
|
-
Appium::TouchAction.new.swipe(start_x: start_x, start_y: start_y, offset_x: 0, offset_y: - 50).perform
|
|
48
|
-
ele_index(UI::Inventory.static_text, 2).text.must_equal 'Chris Armstrong - 0'
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
t 'swipe_coordinates_end_x_end_y' do
|
|
52
|
-
s = Appium::TouchAction.new.swipe_coordinates(offset_x: 1, offset_y: 2)
|
|
53
|
-
s[:offset_x].must_equal 1
|
|
54
|
-
s[:offset_y].must_equal 2
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
t 'swipe_coordinates_end_x' do
|
|
58
|
-
s = Appium::TouchAction.new.swipe_coordinates(offset_x: 1)
|
|
59
|
-
s[:offset_x].must_equal 1
|
|
60
|
-
s[:offset_y].must_equal 0
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
t 'swipe_coordinates_end_y' do
|
|
64
|
-
s = Appium::TouchAction.new.swipe_coordinates(offset_y: 1)
|
|
65
|
-
s[:offset_x].must_equal 0
|
|
66
|
-
s[:offset_y].must_equal 1
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
t 'swipe_coordinates_offset' do
|
|
70
|
-
s = Appium::TouchAction.new.swipe_coordinates
|
|
71
|
-
s[:offset_x].must_equal 0
|
|
72
|
-
s[:offset_y].must_equal 0
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
t 'after_last' do
|
|
76
|
-
after_last
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# TODO: write tests
|
|
81
|
-
#
|
|
82
|
-
# move_to
|
|
83
|
-
# long_press
|
|
84
|
-
# press
|
|
85
|
-
# release
|
|
86
|
-
# tap
|
|
87
|
-
# wait
|
|
88
|
-
# swipe
|
|
89
|
-
# perform
|
|
90
|
-
# cancel
|
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
# rake ios[driver]
|
|
2
|
-
describe 'driver' do
|
|
3
|
-
def before_first
|
|
4
|
-
screen.must_equal catalog
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
t 'before_first' do
|
|
8
|
-
before_first
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def sauce?
|
|
12
|
-
ENV['UPLOAD_FILE'] && ENV['SAUCE_USERNAME']
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
t 'unicode defaults' do
|
|
16
|
-
data = File.read File.expand_path '../../../../data/unicode.txt', __FILE__
|
|
17
|
-
data.strip.must_equal 174.chr('UTF-8')
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
t 'load_settings' do
|
|
21
|
-
# skip this test if we're using Sauce
|
|
22
|
-
# the storage API doesn't have an on disk file
|
|
23
|
-
skip if sauce?
|
|
24
|
-
appium_txt = File.join(Dir.pwd, 'appium.txt')
|
|
25
|
-
opts = Appium.load_settings file: appium_txt, verbose: true
|
|
26
|
-
|
|
27
|
-
actual = ''
|
|
28
|
-
actual = File.basename opts[:caps][:app] if opts && opts[:caps]
|
|
29
|
-
expected = 'UICatalog.app'
|
|
30
|
-
assert_equal expected, actual
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
t 'verify Appium::Driver::Capabilities.init_caps_for_appium' do
|
|
34
|
-
expected_app = File.absolute_path('UICatalog.app')
|
|
35
|
-
caps = ::Appium::Driver::Capabilities.init_caps_for_appium(platformName: 'ios',
|
|
36
|
-
platformVersion: '10.3',
|
|
37
|
-
automationName: 'XCUITest',
|
|
38
|
-
deviceName: 'iPhone Simulator',
|
|
39
|
-
app: expected_app,
|
|
40
|
-
some_capability: 'some_capability')
|
|
41
|
-
caps_with_json = JSON.parse(caps.to_json)
|
|
42
|
-
caps_with_json['platformName'].must_equal 'ios'
|
|
43
|
-
caps_with_json['platformVersion'].must_equal '10.3'
|
|
44
|
-
caps_with_json['app'].must_equal expected_app
|
|
45
|
-
caps_with_json['automationName'].must_equal 'XCUITest'
|
|
46
|
-
caps_with_json['deviceName'].must_equal 'iPhone Simulator'
|
|
47
|
-
caps_with_json['someCapability'].must_equal 'some_capability'
|
|
48
|
-
|
|
49
|
-
caps[:platformName].must_equal 'ios'
|
|
50
|
-
caps[:platformVersion].must_equal '10.3'
|
|
51
|
-
caps[:app].must_equal expected_app
|
|
52
|
-
caps[:automationName].must_equal 'XCUITest'
|
|
53
|
-
caps[:deviceName].must_equal 'iPhone Simulator'
|
|
54
|
-
caps[:some_capability].must_equal 'some_capability'
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
describe 'Appium::Driver attributes' do
|
|
58
|
-
t 'verify all attributes' do
|
|
59
|
-
actual = driver_attributes
|
|
60
|
-
caps_app_for_teardown = actual[:caps][:app]
|
|
61
|
-
expected_app = File.absolute_path('UICatalog.app')
|
|
62
|
-
|
|
63
|
-
expected = { automation_name: 'XCUITest',
|
|
64
|
-
custom_url: false,
|
|
65
|
-
export_session: false,
|
|
66
|
-
default_wait: 30,
|
|
67
|
-
sauce_username: nil,
|
|
68
|
-
sauce_access_key: nil,
|
|
69
|
-
sauce_endpoint: 'ondemand.saucelabs.com:443/wd/hub',
|
|
70
|
-
port: 4723,
|
|
71
|
-
device: :ios,
|
|
72
|
-
debug: true,
|
|
73
|
-
listener: nil,
|
|
74
|
-
wait_timeout: 20, # defined in appium.txt
|
|
75
|
-
wait_interval: 1 } # defined in appium.txt
|
|
76
|
-
|
|
77
|
-
# actual[:caps].to_json send to Appium server
|
|
78
|
-
caps_with_json = JSON.parse(actual[:caps].to_json)
|
|
79
|
-
caps_with_json['platformName'].must_equal 'ios'
|
|
80
|
-
caps_with_json['platformVersion'].must_equal '10.3'
|
|
81
|
-
caps_with_json['app'].must_equal expected_app
|
|
82
|
-
caps_with_json['automationName'].must_equal 'XCUITest'
|
|
83
|
-
caps_with_json['deviceName'].must_equal 'iPhone Simulator'
|
|
84
|
-
caps_with_json['someCapability'].must_equal 'some_capability'
|
|
85
|
-
|
|
86
|
-
actual[:caps][:platformName].must_equal 'ios'
|
|
87
|
-
actual[:caps][:platformVersion].must_equal '10.3'
|
|
88
|
-
actual[:caps][:app].must_equal expected_app
|
|
89
|
-
actual[:caps][:automationName].must_equal 'XCUITest'
|
|
90
|
-
actual[:caps][:deviceName].must_equal 'iPhone Simulator'
|
|
91
|
-
actual[:caps][:some_capability].must_equal 'some_capability'
|
|
92
|
-
|
|
93
|
-
dup_actual = actual.dup
|
|
94
|
-
dup_actual.delete(:caps)
|
|
95
|
-
|
|
96
|
-
if dup_actual != expected
|
|
97
|
-
diff = HashDiff.diff expected, actual
|
|
98
|
-
diff = "diff (expected, actual):\n#{diff}"
|
|
99
|
-
|
|
100
|
-
actual[:caps][:app] = caps_app_for_teardown
|
|
101
|
-
# example:
|
|
102
|
-
# change :ios in expected to match 'ios' in actual
|
|
103
|
-
# [["~", "caps.platformName", :ios, "ios"]]
|
|
104
|
-
message = "\n\nactual:\n\n: #{actual.ai}expected:\n\n#{expected.ai}\n\n#{diff}"
|
|
105
|
-
raise message
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
actual_selenium_caps = actual[:caps][:automationName]
|
|
109
|
-
actual_selenium_caps.must_equal 'XCUITest'
|
|
110
|
-
actual[:caps][:app] = caps_app_for_teardown
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
t 'verify attributes are immutable' do
|
|
114
|
-
driver_attributes[:custom_url] = true
|
|
115
|
-
expected = false
|
|
116
|
-
driver_attributes[:custom_url].must_equal expected
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
t 'verify attribute of :caps are not immutable becuse it depends on Selenium' do
|
|
120
|
-
# immutability depends on Selenium
|
|
121
|
-
for_clean_up = driver_attributes[:caps][:app].dup
|
|
122
|
-
driver_attributes[:caps][:app] = 'fake'
|
|
123
|
-
expected = 'fake'
|
|
124
|
-
driver_attributes[:caps][:app].must_equal expected
|
|
125
|
-
|
|
126
|
-
# clean up
|
|
127
|
-
driver_attributes[:caps][:app] = for_clean_up
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
t 'no_wait' do
|
|
131
|
-
no_wait
|
|
132
|
-
proc { find_element(:accessibility_id, 'zz') }.must_raise Selenium::WebDriver::Error::NoSuchElementError
|
|
133
|
-
set_wait
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
t 'default_wait attr' do
|
|
137
|
-
default_wait.must_equal 30
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
t 'app_path attr' do
|
|
141
|
-
apk_name = File.basename driver_attributes[:caps][:app]
|
|
142
|
-
|
|
143
|
-
if sauce?
|
|
144
|
-
apk_name.must_equal 'sauce-storage:UICatalog6.1.app.zip'
|
|
145
|
-
else
|
|
146
|
-
apk_name.must_equal 'UICatalog.app'
|
|
147
|
-
end
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
# Only used for Sauce Labs
|
|
151
|
-
t 'app_name attr' do
|
|
152
|
-
name_attr = driver_attributes[:caps][:name]
|
|
153
|
-
if sauce?
|
|
154
|
-
name_attr.must_equal 'appium_lib_ios'
|
|
155
|
-
else
|
|
156
|
-
name_attr.must_be_nil
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
t 'sauce_username attr' do
|
|
161
|
-
sauce_username = driver_attributes[:sauce_username]
|
|
162
|
-
if sauce?
|
|
163
|
-
sauce_username.must_equal 'appiumci'
|
|
164
|
-
else
|
|
165
|
-
sauce_username.must_be_nil
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
t 'sauce_access_key attr' do
|
|
170
|
-
sauce_access_key = driver_attributes[:sauce_access_key]
|
|
171
|
-
if sauce?
|
|
172
|
-
sauce_access_key.must_match(/\h{8}-\h{4}-\h{4}-\h{4}-\h{12}/)
|
|
173
|
-
else
|
|
174
|
-
sauce_access_key.must_be_nil
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
t 'default timeout for http client' do
|
|
179
|
-
http_client.open_timeout.must_equal 999_999
|
|
180
|
-
http_client.read_timeout.must_equal 999_999
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
describe 'Appium::Driver' do
|
|
185
|
-
t '$driver.class' do
|
|
186
|
-
$driver.class.must_equal Appium::Driver
|
|
187
|
-
end
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
describe 'methods' do
|
|
191
|
-
t 'status' do
|
|
192
|
-
appium_server_version['build'].keys.sort.must_equal %w(revision version)
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
t 'server_version' do
|
|
196
|
-
server_version = appium_server_version['build']['version']
|
|
197
|
-
if sauce?
|
|
198
|
-
server_version.must_match 'Sauce OnDemand'
|
|
199
|
-
else
|
|
200
|
-
server_version.must_match(/(\d+)\.(\d+).(\d+)/)
|
|
201
|
-
end
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
t 'client_version' do
|
|
205
|
-
client_version = appium_client_version
|
|
206
|
-
expected = { version: ::Appium::VERSION }
|
|
207
|
-
client_version.must_equal expected
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
t 'set_immediate_value' do
|
|
211
|
-
go_to_textfields
|
|
212
|
-
|
|
213
|
-
message = 'hello'
|
|
214
|
-
|
|
215
|
-
element = textfield(1)
|
|
216
|
-
element.click
|
|
217
|
-
element.clear
|
|
218
|
-
|
|
219
|
-
set_immediate_value(element, message)
|
|
220
|
-
element.text.must_equal message
|
|
221
|
-
|
|
222
|
-
set_wait 10
|
|
223
|
-
leave_textfields
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
t 'restart' do
|
|
227
|
-
restart
|
|
228
|
-
text 'buttons'
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
t 'driver' do
|
|
232
|
-
driver.browser.must_be_empty
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
t 'automation_name_is_xcuitest?' do
|
|
236
|
-
automation_name_is_xcuitest?.must_equal UI::Inventory.xcuitest?
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
#
|
|
240
|
-
# Skip:
|
|
241
|
-
# screenshot # this is slow and already tested by Appium
|
|
242
|
-
# driver_quit # tested by restart
|
|
243
|
-
# start_driver # tested by restart
|
|
244
|
-
#
|
|
245
|
-
|
|
246
|
-
t 'set_wait' do
|
|
247
|
-
# fill the @last_waits array with: [30, 30]
|
|
248
|
-
set_wait(30).must_equal(30)
|
|
249
|
-
set_wait(30).must_equal(30)
|
|
250
|
-
|
|
251
|
-
# verify set_wait with no args works correctly
|
|
252
|
-
set_wait.must_equal(30)
|
|
253
|
-
set_wait(30).must_equal(30)
|
|
254
|
-
set_wait.must_equal(30)
|
|
255
|
-
|
|
256
|
-
set_wait(2).must_equal(2)
|
|
257
|
-
set_wait.must_equal(30)
|
|
258
|
-
set_wait(3).must_equal(3)
|
|
259
|
-
set_wait.must_equal(30)
|
|
260
|
-
|
|
261
|
-
set_wait(2).must_equal(2)
|
|
262
|
-
set_wait(3).must_equal(3)
|
|
263
|
-
set_wait.must_equal(30)
|
|
264
|
-
end
|
|
265
|
-
|
|
266
|
-
t 'default_wait' do
|
|
267
|
-
set_wait 30
|
|
268
|
-
default_wait.must_equal 30 # set in run.rb
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
# returns true unless an error is raised
|
|
272
|
-
t 'exists' do
|
|
273
|
-
exists(0, 0) { true }.must_equal true
|
|
274
|
-
exists(0, 0) { raise 'error' }.must_equal false
|
|
275
|
-
end
|
|
276
|
-
|
|
277
|
-
# simple integration sanity test to check for unexpected exceptions
|
|
278
|
-
t 'set_location' do
|
|
279
|
-
raise NotImplementedError, "XCUITest(Appium1.6.2) doesn't support yet" if UI::Inventory.xcuitest?
|
|
280
|
-
set_location latitude: 55, longitude: -72, altitude: 33
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
# any elements
|
|
284
|
-
t 'find_elements' do
|
|
285
|
-
find_elements(:class, UI::Inventory.table_cell).length.must_equal 12
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
# any element
|
|
289
|
-
t 'find_element' do
|
|
290
|
-
find_element(:class, UI::Inventory.static_text).class.must_equal Selenium::WebDriver::Element
|
|
291
|
-
end
|
|
292
|
-
|
|
293
|
-
# settings
|
|
294
|
-
t 'get settings' do
|
|
295
|
-
raise NotImplementedError, "XCUITest(Appium1.6.2) doesn't support yet" if UI::Inventory.xcuitest?
|
|
296
|
-
get_settings.wont_be_nil
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
t 'update settings' do
|
|
300
|
-
raise NotImplementedError, "XCUITest(Appium1.6.2) doesn't support yet" if UI::Inventory.xcuitest?
|
|
301
|
-
|
|
302
|
-
update_settings cyberdelia: 'open'
|
|
303
|
-
get_settings['cyberdelia'].must_equal 'open'
|
|
304
|
-
end
|
|
305
|
-
|
|
306
|
-
# Skip: x # x is only used in Pry
|
|
307
|
-
end
|
|
308
|
-
end
|