Подтвердить что ты не робот

Как узнать, на каком устройстве я нахожусь в Xcode UI Testing?

Пока выполняется тест Uc Xcode, я хочу знать, какое устройство/среда используется (например, iPad Air 2, iOS 9.0, Simulator).

Как я могу получить эту информацию?

4b9b3361

Ответ 1

С помощью Swift 3 (при необходимости измените .pad на .phone):

if UIDevice.current.userInterfaceIdiom == .pad {
    // Ipad specific checks
}

Использование старых версий Swift:

UIDevice.currentDevice().userInterfaceIdiom

Ответ 2

К сожалению, прямой запрос на текущее устройство отсутствует. Однако вы можете работать, запрашивая классы размера устройства:

private func isIpad(app: XCUIApplication) -> Bool {
    return app.windows.elementBoundByIndex(0).horizontalSizeClass == .Regular && app.windows.elementBoundByIndex(0).verticalSizeClass == .Regular
}

Как вы можете видеть в Apple Описание классов размеров, только устройства iPad (в настоящее время) имеют как вертикальный, так и горизонтальный размер класса "Обычный",.

Ответ 3

Возможно, кому-то пригодится то же самое для XCTest в Objective C:

// Check if the device is iPhone
if ( ([[app windows] elementBoundByIndex:0].horizontalSizeClass != XCUIUserInterfaceSizeClassRegular) || ([[app windows] elementBoundByIndex:0].verticalSizeClass != XCUIUserInterfaceSizeClassRegular) ) {
    // do something for iPhone
}
else {
    // do something for iPad
}

Ответ 4

Вы можете проверить с помощью фрейма windows XCUIApplication().windows.element(boundBy: 0).frame и проверить тип устройства.

Вы также можете установить расширение для XCUIDevice с помощью свойства currentDevice:

/// Device types
public enum Devices: CGFloat {

    /// iPhone
    case iPhone4 = 480
    case iPhone5 = 568
    case iPhone7 = 667
    case iPhone7Plus = 736

    /// iPad - Portraite
    case iPad = 1024
    case iPadPro = 1366

    /// iPad - Landscape
    case iPad_Landscape = 768
    case iPadPro_Landscape = 0
}

/// Check current device
extension XCUIDevice {
    public static var currentDevice:Devices {
        get {
            let orientation = XCUIDevice.shared().orientation

            let frame = XCUIApplication().windows.element(boundBy: 0).frame

            switch orientation {
            case .landscapeLeft, .landscapeRight:
                return frame.width == 1024 ? .iPadPro_Landscape : Devices(rawValue: frame.width)!
            default:
                return Devices(rawValue: frame.height)!
            }
        }
    }
}

Использование

let currentDevice = XCUIDevice.currentDevice