ios - 测试特定 iPhone 是否支持扩展模式下的分割 View

标签 ios swift uisplitviewcontroller uitest uitraitcollection

在 iPhone 6(及更小尺寸)上,手机绝不会在“扩展”模式下显示分割 View 。也就是说,分割 View 内的主视图 Controller 和辅助 View Controller 始终按顺序显示。相比之下,在 iPhone 6Plus(及更大型号)上,手机在横向时会以扩展模式显示分割 View 。也就是说,主视图 Controller 和辅助 View Controller 并排显示。

这会给 UI 测试带来问题。当设备是手机且水平尺寸类别为紧凑型(iPhone 6 及更小)时,应该有一组测试。当设备是手机并且水平尺寸类别为常规时,应该有一组单独的测试。

不幸的是,在 UITests 中处理 UIElements 时,我无法发现尺寸类的测试。执行UI测试时有没有办法获取traitCollection信息?

UIDevice 对象有一个“model”属性。这是一个字符串。在模拟器上进行测试时,我从此属性中看到的唯一值是“phone”或“pad”。手机的型号似乎不可用,Apple 的文档也不保证任何特定值。

UIDevice 对象还有一个 userInterfaceIdiom 属性。除了 pad 和手机之外,此枚举还可以报告 CarPlay 和 Apple TV 等内容,但同样不会返回任何型号信息。

XCUIDevice 不报告特征环境或型号。

我的解决方法是在我的主项目中插入测试代码。在开始场景中,我为其中一个元素提供了反射(reflect)初始水平尺寸类别的可访问性标识符。例如,如果有标题,则可访问性标识符将变为“标题(紧凑)”或“标题(常规)”。这可以在设置期间在 UI 测试中进行询问,并且可以设置全局变量以供以后使用。然而,这是一个相当糟糕的拼凑。

我希望有人知道一个对象(可在 UI 测试中访问),该对象将返回如下内容:

<some object>.supportsSplitViewInExandedMode

那太好了!

最佳答案

对不起大家!

对于其他同样不耐烦的程序员来说,了解 Apple 文档中为 XCUIElementAttributes 描述的最后一个功能是“SizeClass”可能会很有用。文档指出:

Describes the available user interface size classes.

应该可以了!

关于ios - 测试特定 iPhone 是否支持扩展模式下的分割 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57332416/

相关文章:

ios - SwiftUI - 单击按钮打开新 View

ios - 在没有 Storyboard的情况下使用 BWWalkthrough 库,Walkthrough Custom

objective-c - UIKeyBoard 在方向更改为横向时调整大小

ios - 从地址获取位置坐标

objective-c - 防止 AlertView 解雇

objective-c - 苹果手机 : responder chain in UIScrollView

ios - 注销后如何重新加载 Root View Controller ?

ios - filepicker.io 与 IOS 上的电话差距

ios - Firebase swift 错误 Storage.storage() 在范围内找不到 'Storage'

ios - SplitView Xcode7 iOS9 - iPhone 上的 DetailViewController 中缺少后退按钮