我正在为iOS应用程序进行UI测试。我在了解如何对日期选择器使用自动测试时遇到问题。现在我试图找到日期选择器本身,以便我可以更改值。
我已经搜索了许多关于此问题的线程,但一无所获。
如果有人对此有任何见解,将不胜感激。谢谢!
首先,我建议您使用 Xcode 中的"记录 UI 测试"按钮轻松了解如何访问 UI 测试中的UIDatePicker
。
对于date
模式下的简单UIDatePicker
,更改日期非常简单:
let datePickers = XCUIApplication().datePickers
datePickers.pickerWheels.element(boundBy: 0).adjust(toPickerWheelValue: "June")
datePickers.pickerWheels.element(boundBy: 1).adjust(toPickerWheelValue: "1")
datePickers.pickerWheels.element(boundBy: 2).adjust(toPickerWheelValue: "2015")
如果 datePicker 连接到 UILabel
,则可以检查标签中的文本是否已正确更新。
对于任何支持多种本地化的人来说,更简单的方法是
let dateComponent = Calendar.current.dateComponents([.day, .month, .year], from: Date())
let formatter = DateFormatter()
formatter.dateFormat = "MMMM"
let monthText = formatter.string(from: Date())
datePicker.pickerWheels[String(dateComponent.year!)].adjust(toPickerWheelValue: "2017")
datePicker.pickerWheels[monthText].adjust(toPickerWheelValue: "December")
datePicker.pickerWheels[String(dateComponent.day!)].adjust(toPickerWheelValue: "21")
最后,我放弃了,因为所有解决方案都是片状的,具体取决于设备的区域设置和日期。然后我自己想:我为什么要测试整个 UI 元素?如果您需要更改流中的某个位置的日期,最好执行以下操作:
- 添加 2 个
Button
s,一个带有goForward
SFSymbol,一个带有goBackwards
。 - 使用日期选取器将它们添加到视图中,并用
#if DEBUG
语句包围 - 当用户按下其中一个按钮时,按预定义的静态值增加/减少
DatePicker
。这样,您仍然可以测试不同的日期,但不再进行片状测试。