使用 Xcode 執行 UI 自動化測試 – Part 2

本篇文章由 使用 Xcode 執行 UI 自動化測試 – Part 1 繼續延伸,列出測試過程中較進階的用法,將使用 Swift 2.3 來說明。

  • 判斷測試 App 跑在 iPhone 或 iPad

可透過 horizontalSizeClass 跟 verticalSizeClass 來判斷

let window = XCUIApplication().windows.elementBoundByIndex(0)

if (window.horizontalSizeClass == .Compact || window.verticalSizeClass == .Compact) {
    // iPhone 的 test script
}
else {
    // iPad 的 test script
}

let window = XCUIApplication().windows.elementBoundByIndex(0)

if (window.horizontalSizeClass == .Regular || window.verticalSizeClass == .Regular) {
    // iPad 的 test script
}
else {
    // iPhone 的 test script
}

基本上 .Compact 是 iPhone 而 .Regulat 是 iPad,詳細說明可參考 Auto Layout Guide_ Size-Class-Specific Layout,這邊值得注意的是如果把原本 if 判斷式改用 XCUIApplication().horizontalSizeClass 或 XCUIApplication().verticalSizeClass 反而會造成判斷錯誤。

 

  •  按下 Home 鍵
XCUIDevice.sharedDevice().pressButton(XCUIDeviceButton.Home)

 

  • 調整螢幕方向

iphone_orientations

// 將畫面轉成直向 Portrait
XCUIDevice().orientation = UIDeviceOrientation.Portrait

// 將畫面轉成直向 Portrait Upside Down
XCUIDevice().orientation = UIDeviceOrientation.PortraitUpsideDown

// 將畫面轉成橫向 Landscape Left
XCUIDevice().orientation = UIDeviceOrientation.LandscapeLeft

// 將畫面轉成橫向 Landscape Right
XCUIDevice().orientation = UIDeviceOrientation.LandscapeRight

 

  • 判斷元件是否會包含在某個元件裡
let app = XCUIApplication()
let container = app.tables.cells["info"]
let element = app.buttons["more"]
XCTAssertTrue(CGRectContainsRect(container.frame, element.frame)) // 確認 container 中會包含 element

 

  • 判斷元件是否有顯示在畫面上

可透過 hittable 來判斷,當回傳為 true 表示元件有顯示在畫面的可視範圍內:

let loginButton = XCUIApplication().buttons["login"]
XCTAssertTrue(loginButton.hittable)

 

  • 點擊元件中特定的座標位置

預設的 tap() 會點擊元件的中心點,但如果要點選的元件中心點有一個 button 就會點到這 button,導致無法點擊要點選的元件,此時就必須調整 tap 點擊的位置

func tapAtPosition(position: CGPoint) {
    let cooridnate = self.coordinateWithNormalizedOffset(CGVector(dx: 0, dy: 0))
                         .coordinateWithOffset(CGVector(dx: position.x, dy: position.y))

    cooridnate.tap()
}

let customControl = XCUIApplication().tables.cells["View"]
customControl.tapAtPosition(CGPoint(x: 20.0, y: 10.0)) // 原點為左上角

 

  • 取得畫面的 Accessibility Hierarchy
let app = XCUIApplication()
print(app.debugDescription)

 

參考文章:

  1. XCTest UI Testing Hints and Tips _ Average Pro
  2. swift – Simulating Pressing the Home button in xCode 7 UI Automation – Stack Overflow
  3. UI Testing Cheat Sheet and Examples · Masilotti.com

對「使用 Xcode 執行 UI 自動化測試 – Part 2」的一則回應

發表留言