Пока выполняется тест Uc Xcode, я хочу знать, какое устройство/среда используется (например, iPad Air 2, iOS 9.0, Simulator).
Как я могу получить эту информацию?
Пока выполняется тест Uc Xcode, я хочу знать, какое устройство/среда используется (например, iPad Air 2, iOS 9.0, Simulator).
Как я могу получить эту информацию?
С помощью Swift 3 (при необходимости измените .pad на .phone):
if UIDevice.current.userInterfaceIdiom == .pad {
// Ipad specific checks
}
Использование старых версий Swift:
UIDevice.currentDevice().userInterfaceIdiom
К сожалению, прямой запрос на текущее устройство отсутствует. Однако вы можете работать, запрашивая классы размера устройства:
private func isIpad(app: XCUIApplication) -> Bool {
return app.windows.elementBoundByIndex(0).horizontalSizeClass == .Regular && app.windows.elementBoundByIndex(0).verticalSizeClass == .Regular
}
Как вы можете видеть в Apple Описание классов размеров, только устройства iPad (в настоящее время) имеют как вертикальный, так и горизонтальный размер класса "Обычный",.
Возможно, кому-то пригодится то же самое для 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
}
Вы можете проверить с помощью фрейма 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