Skip to content

Commit 7801efa

Browse files
authored
ci: run iOS 13 and Android 10 as CI (#238)
* try to run with the latest set * use iPhone 11 * rename ios 13 check method
1 parent 92343f4 commit 7801efa

8 files changed

+64
-30
lines changed

ci-jobs/functional_test.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
parameters:
33
vmImage: 'macOS-10.14'
44
vmImageForIOS: 'macOS-10.14' # Not sure the reason, but macOS 10.14 instance raises no info.plist error
5-
xcodeForIOS: 10.3
6-
xcodeForTVOS: 10.2
7-
androidSDK: 28
5+
xcodeForIOS: 11
6+
xcodeForTVOS: 11
7+
androidSDK: 29
88
appiumVersion: 'beta'
99
ignoreVersionSkip: true
1010
CI: true

test/functional/ios/driver_test.rb

+19-10
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@ class DriverTest < AppiumLibCoreTest::Function::TestCase
2121
private
2222

2323
def alert_view_cell
24-
ios_platform_version_over13(@@driver) ? 'Alert Controller' : 'Alert Views'
24+
over_ios13?(@@driver) ? 'Alert Controller' : 'Alert Views'
25+
end
26+
27+
def uicatalog
28+
over_ios13?(@@driver) ? 'UIKitCatalog' : 'UICatalog'
2529
end
2630

2731
public
@@ -56,13 +60,13 @@ def test_screenshot
5660
end
5761

5862
def test_wait_true
59-
e = @@core.wait_true { @@driver.find_element :accessibility_id, 'UICatalog' }
63+
e = @@core.wait_true { @@driver.find_element :accessibility_id, uicatalog }
6064
assert e.name
6165
end
6266

6367
def test_wait
64-
e = @@core.wait { @@driver.find_element :accessibility_id, 'UICatalog' }
65-
assert_equal 'UICatalog', e.name
68+
e = @@core.wait { @@driver.find_element :accessibility_id, uicatalog }
69+
assert_equal uicatalog, e.name
6670
end
6771

6872
def test_click_back
@@ -71,13 +75,17 @@ def test_click_back
7175
e = @@driver.find_element :accessibility_id, alert_view_cell
7276
e.click
7377
sleep 1 # wait for animation
74-
error = assert_raises do
75-
e.click
78+
if over_ios13?(@@driver)
79+
e.click # nothing happens
80+
else
81+
error = assert_raises do
82+
e.click
83+
end
84+
assert [::Selenium::WebDriver::Error::UnknownError,
85+
::Selenium::WebDriver::Error::ElementNotVisibleError,
86+
::Selenium::WebDriver::Error::InvalidSelectorError].include? error.class
87+
assert error.message.include? ' is not visible on the screen and thus is not interactable'
7688
end
77-
assert [::Selenium::WebDriver::Error::UnknownError,
78-
::Selenium::WebDriver::Error::ElementNotVisibleError,
79-
::Selenium::WebDriver::Error::InvalidSelectorError].include? error.class
80-
assert error.message.include? ' is not visible on the screen and thus is not interactable'
8189
@@driver.back
8290
end
8391

@@ -87,6 +95,7 @@ def test_default_keyboard_pref
8795

8896
bundle_id = @@driver.session_capabilities['CFBundleIdentifier']
8997
begin
98+
@@driver.terminate_app('com.apple.Preferences') # To ensure the app shows the top view
9099
@@driver.activate_app('com.apple.Preferences')
91100
@@driver.find_element(:accessibility_id, 'General').click
92101
@@driver.find_element(:accessibility_id, 'Keyboard').click

test/functional/ios/ios/device_test.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class DeviceTest < AppiumLibCoreTest::Function::TestCase
2828
private
2929

3030
def alert_view_cell
31-
ios_platform_version_over13(@@driver) ? 'Alert Controller' : 'Alert Views'
31+
over_ios13?(@@driver) ? 'Alert Controller' : 'Alert Views'
3232
end
3333

3434
public
@@ -123,7 +123,7 @@ def test_context_related
123123
end
124124

125125
def test_app_string
126-
default_lang = ios_platform_version_over13(@@driver) ? 'Base' : 'en'
126+
default_lang = over_ios13?(@@driver) ? 'Base' : 'en'
127127
assert_equal 'A Short Title Is Best', @@driver.app_strings(default_lang)['A Short Title Is Best']
128128
end
129129

test/functional/ios/ios/mobile_commands_test.rb

+10-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@
1818
class AppiumLibCoreTest
1919
module Ios
2020
class MobileCommandsTest < AppiumLibCoreTest::Function::TestCase
21+
private
22+
23+
def uicatalog
24+
over_ios13?(@driver) ? 'UIKitCatalog' : 'UICatalog'
25+
end
26+
27+
public
28+
2129
def setup
2230
@core = ::Appium::Core.for(Caps.ios)
2331
end
@@ -80,11 +88,12 @@ def test_permission
8088
assert @driver.execute_script('mobile: getPermission',
8189
{ service: 'photos', bundleId: 'com.example.apple-samplecode.UICatalog' }) == 'no'
8290

91+
@driver.terminate_app('com.apple.Preferences') # To ensure the app shows the top view
8392
@driver.activate_app('com.apple.Preferences')
8493
@driver.find_element(:accessibility_id, 'Privacy').click
8594

8695
@driver.find_element(:accessibility_id, 'Calendars').click
87-
el = @driver.find_element(:accessibility_id, 'UICatalog')
96+
el = @driver.find_element(:accessibility_id, uicatalog)
8897
assert_equal '1', el.value
8998

9099
@driver.back

test/functional/ios/patch_test.rb

+15-4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@
1919
# rubocop:disable Style/ClassVars
2020
class AppiumLibCoreTest
2121
class PathTest < AppiumLibCoreTest::Function::TestCase
22+
private
23+
24+
# Should click before typing text for iOS 13 simulator case since the simulator looks unstable
25+
def ensure_type(element)
26+
element.click if over_ios13?(@@driver)
27+
end
28+
29+
public
30+
2231
def setup
2332
@@core = ::Appium::Core.for(Caps.ios)
2433
@@driver = @@core.start_driver
@@ -41,7 +50,8 @@ def test_type
4150

4251
@@core.wait { @@driver.find_element :accessibility_id, 'Text Fields' }.click
4352

44-
text = @@core.wait { @@driver.find_element :name, 'Placeholder text' }
53+
text = @@core.wait { @@driver.find_element :class, 'XCUIElementTypeTextField' }
54+
ensure_type text
4555
text.type 'hello'
4656

4757
e = @@core.wait { @@driver.find_element :name, 'hello' }
@@ -54,7 +64,7 @@ def test_location_rel
5464
e = @@core.wait { @@driver.find_element :accessibility_id, 'Date Picker' }
5565
location = e.location_rel @@driver
5666

57-
if ios_platform_version_over13(@@driver)
67+
if over_ios13?(@@driver)
5868
assert_equal '64.0 / 414.0', location.x
5969
assert_equal '235.5 / 896.0', location.y
6070
else
@@ -68,8 +78,9 @@ def test_immediate_value
6878

6979
@@core.wait { @@driver.find_element :accessibility_id, 'Text Fields' }.click
7080

71-
text = @@core.wait { @@driver.find_element :name, 'Placeholder text' }
72-
text.immediate_value('hello')
81+
text = @@core.wait { @@driver.find_element :class, 'XCUIElementTypeTextField' }
82+
ensure_type text
83+
text.immediate_value 'hello'
7384

7485
text = @@core.wait { @@driver.find_element :name, 'hello' }
7586
assert_equal 'hello', text.value

test/functional/ios/webdriver/device_test.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ class DeviceTest < AppiumLibCoreTest::Function::TestCase
2323
private
2424

2525
def alert_view_cell
26-
ios_platform_version_over13(@@driver) ? 'Alert Controller' : 'Alert Views'
26+
over_ios13?(@@driver) ? 'Alert Controller' : 'Alert Views'
2727
end
2828

2929
def okay_cancel_cell
30-
ios_platform_version_over13(@@driver) ? 'OK / Cancel' : 'Okay / Cancel'
30+
over_ios13?(@@driver) ? 'OK / Cancel' : 'Okay / Cancel'
3131
end
3232

3333
public

test/functional/ios/webdriver/w3c_actions_test.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def test_tap
3636
el = @@core.wait { @@driver.find_element(:accessibility_id, 'Buttons') }
3737
@@driver.action.click(el).perform
3838

39-
el = @@core.wait { @@driver.find_element(:name, ios_platform_version_over13(@@driver) ? 'X' : 'X Button') }
39+
el = @@core.wait { @@driver.find_element(:name, over_ios13?(@@driver) ? 'X' : 'X Button') }
4040
rect = el.rect
4141
@@driver.action.click_and_hold(el).move_to_location(rect.x, rect.y + 500).release.perform
4242
end

test/test_helper.rb

+12-7
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def skip_as_appium_version(required_version)
5858
# rubocop:enable Style/GuardClause
5959
end
6060

61-
def ios_platform_version_over13(driver)
61+
def over_ios13?(driver)
6262
Gem::Version.create(driver.capabilities['platformVersion']) >= Gem::Version.create('13.0')
6363
end
6464

@@ -99,7 +99,7 @@ def self.android_web
9999

100100
# Require a simulator which OS version is 11.4, for example.
101101
def ios(platform_name = :ios)
102-
platform_version = platform_name == :tvos ? '12.2' : '12.4'
102+
platform_version = '13.0'
103103
wda_port = wda_local_port
104104

105105
real_device = ENV['REAL'] ? true : false
@@ -108,9 +108,9 @@ def ios(platform_name = :ios)
108108
caps: { # :desiredCapabilities is also available
109109
platformName: platform_name,
110110
automationName: ENV['AUTOMATION_NAME_IOS'] || 'XCUITest',
111-
udid: 'auto',
111+
# udid: 'auto',
112112
platformVersion: platform_version,
113-
deviceName: device_name(platform_name, wda_port),
113+
deviceName: device_name(platform_version, platform_name, wda_port),
114114
useNewWDA: false,
115115
eventTimings: true,
116116
useJSONSource: true,
@@ -154,20 +154,25 @@ def ios(platform_name = :ios)
154154

155155
private
156156

157+
def over_ios13?(os_version)
158+
Gem::Version.create(os_version) >= Gem::Version.create('13.0')
159+
end
160+
157161
def test_app(os_version)
158-
if Gem::Version.create(os_version) >= Gem::Version.create('13.0')
162+
if over_ios13?(os_version)
159163
# https://github.com/appium/ios-uicatalog/pull/15
160164
"#{Dir.pwd}/test/functional/app/iOS13__UICatalog.app.zip"
161165
else
162166
"#{Dir.pwd}/test/functional/app/UICatalog.app.zip"
163167
end
164168
end
165169

166-
def device_name(platform_name, wda_local_port)
170+
def device_name(os_version, platform_name, wda_local_port)
167171
if platform_name.downcase == :tvos
168172
'Apple TV'
169173
else
170-
parallel? ? "iPhone Xs Max - #{wda_local_port}" : 'iPhone Xs Max'
174+
name = over_ios13?(os_version) ? 'iPhone 11' : 'iPhone Xs Max'
175+
parallel? ? "#{name} - #{wda_local_port}" : name
171176
end
172177
end
173178

0 commit comments

Comments
 (0)