iOS UI测试日期选择器

8

我正在为iOS应用程序制作UI测试。我在寻找如何使用自动化测试日期选择器方面遇到了困难。目前,我被卡在尝试查找日期选择器本身以便更改值的阶段。

我已经搜索了许多有关此问题的线程,但没有找到任何相关信息。

如果有人对此有任何见解,将不胜感激。谢谢!


1
你尝试过使用可访问性标识符吗? - Eugene Gordin
是的。我觉得这应该很容易,只需要设置一个accessibilitylabel并像datePickers["myLabel"]那样使用它。然而,它仍然有困难找到它。 - Mystified
3个回答

23

要开始,请使用 Xcode 中的“记录 UI 测试”按钮,轻松找出如何在 UI 测试中访问 UIDatePicker

对于一个简单的 UIDatePicker ,在 date 模式下更改日期就像这样简单:

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,你可以检查标签中的文本是否已正确更新。

哦...原来如此简单。非常感谢你,伙计。 - Mystified

9

对于任何需要支持多个本地化的人来说,更简单的方法是:

 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")

谢谢 - 这帮了很大的忙! - Skycamefalling
这是一个好主意,但我猜只有在您没有以编程方式设置不同日期到您的日期选择器时(Date()是默认值)才能起作用。 - Gobe

0
最后,我放弃了,因为所有的解决方案都不可靠,取决于设备的区域设置和日期。然后我自己想:为什么我要测试整个UI元素呢?如果你需要在流程中的某个地方更改日期,最好做这样的事情:
  1. 添加两个按钮,一个带有goForward SFSymbol,另一个带有goBackwards
  2. 将它们与DatePickers一起添加到您的视图中,并用#if DEBUG语句包围。
  3. 当用户按下其中一个按钮时,通过预定义的静态值增加/减少您的DatePicker。这样,您仍然可以测试不同的日期,但不再有不可靠的测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接