iOS UI Test Datepicker



我正在为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 元素?如果您需要更改流中的某个位置的日期,最好执行以下操作:

  1. 添加 2 个 Button s,一个带有 goForward SFSymbol,一个带有 goBackwards
  2. 使用日期选取器将它们添加到视图中,并用#if DEBUG语句包围
  3. 当用户按下其中一个按钮时,按预定义的静态值增加/减少DatePicker。这样,您仍然可以测试不同的日期,但不再进行片状测试。