Workshop with iOS app - up1/course-appium-robotframework GitHub Wiki

Workshop with iOS app

1. Start appium server

Install driver :: XCUITest

$appium driver list
$appium driver install xcuitest
$appium --allow-cors

2. Access to appium server with Appium Inspector

{
  "platformName": "iOS",
  "appium:deviceName": "iPhone 15 Pro",
  "appium:platformVersion": "17.5",
  "appium:automationName": "XCUITest",
  "appium:bundleId": "dev.xyz",
  "appium:connectionRetryTimeout": 60000,
  "appium:noReset": true
}

List of devices in MacOS

$xcrun xctrace list devices

== Simulators ==
iPad (10th generation) Simulator (17.5) (25FFDE58-FBF9-470E-9404-D0D7C3990558)
iPad Air 11-inch (M2) Simulator (17.5) (AFF14603-1CA4-4A28-AFF8-2E46B2F82988)
iPad Air 13-inch (M2) Simulator (17.5) (39F0D5D9-DB2C-4628-BCB6-EC152CD5297E)
iPad Pro 11-inch (M4) Simulator (17.5) (08B8CAD7-42A3-459B-A030-CA9A0CAFA852)
iPad Pro 13-inch (M4) Simulator (17.5) (04027796-18BF-4028-AF44-947EC5288A9F)
iPad mini (6th generation) Simulator (17.5) (60731347-E435-4C8B-ADF9-863EECF9BAD2)
iPhone 15 Simulator (17.5) (537A7FD2-CDA2-4D5B-BC1C-141B5FC4D411)
iPhone 15 Plus Simulator (17.5) (E611E7B2-CC6A-4217-9190-B4780F78C39C)
iPhone 15 Pro Simulator (17.5) (26535A44-1572-45F5-99A7-CF600C68CE2D)
iPhone 15 Pro Max Simulator (17.5) (E8774E3B-605E-42E1-B033-8628EA7874FC)
iPhone SE (3rd generation) Simulator (17.5) (75A0C05A-76D4-4527-A468-764BB5A268C3)

3. Add accessibility id to element in SwiftUI

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundStyle(.tint)

            Text("Hello, world!")
                .accessibilityIdentifier("hello_text")

        }
        .padding()
    }
}

#Preview {
    ContentView()
}

4. Write test case with Robotframework

*** Settings ***
Library           AppiumLibrary
Test Teardown     Close Application

*** Test Cases ***
Test Case Name
    Open Application    http://127.0.0.1:4723    
    ...    platformName=iOS    
    ...    appium:deviceName=iPhone 15 Pro    
    ...    appium:platformVersion=17.5    
    ...    appium:automationName=XCUITest    
    ...    appium:bundleId=dev.xyz    
    ...    appium:connectionRetryTimeout=${60000}    
    ...    appium:noReset=${True}    
    ...    appium:includeSafariInWebviews=${True}    
    ...    appium:newCommandTimeout=${3600}    
    ...    appium:connectHardwareKeyboard=${True}

    ${el1} =    Set Variable     accessibility_id=hello_text
    Wait Until Page Contains Element    ${el1}
    Element Text Should Be    ${el1}    Hello, world!