我有一个选择器 View ,其中包含在Interface Builder中创建的日期选择器。在“属性”检查器中,选择:模式“日期和时间”。在我的UI测试中,我需要从中选择特定的日期和时间。我正在使用Xcode 7引入的XCTest UI测试API。

我的本地化美国日期和时间选择器的测试代码如下所示:

app.tables.pickerWheels.elementBoundByIndex(0).adjustToPickerWheelValue("Jun 29")
app.tables.pickerWheels.elementBoundByIndex(1).adjustToPickerWheelValue("12")
app.tables.pickerWheels.elementBoundByIndex(2).adjustToPickerWheelValue("10")
app.tables.pickerWheels.elementBoundByIndex(3).adjustToPickerWheelValue("PM")

会完美的工作!

我的本地化德语日期和时间选择器的测试代码如下所示:
app.tables.pickerWheels.elementBoundByIndex(0).adjustToPickerWheelValue("29. Juni")
app.tables.pickerWheels.elementBoundByIndex(1).adjustToPickerWheelValue("07")
app.tables.pickerWheels.elementBoundByIndex(2).adjustToPickerWheelValue("10")

在这种情况下,我得到以下异常:

断言失败:UI测试失败-内部错误:无法在可能的值中找到当前值'(null)'。11. Mai,12. Mai,13. Mai,14. Mai,15. Mai,16. Mai,17 。Mai,18. Mai,19. Mai,20. Mai,21. Mai,22. Mai,23. Mai,24. Mai,25. Mai,26. Mai,27. Mai,28. Mai,29. Mai ,30. Mai,31. Mai,1. Juni,2. Juni,3. Juni,4. Juni,5. Juni,6. Juni,7. Juni,8. Juni,9. Juni,10. Juni,11 。Juni,12. Juni,13. Juni,14. Juni,15. Juni,16. Juni,17. Juni,18. Juni,19. Juni,20. Juni,21. Juni,22. Juni,23. Juni ,24. Juni,25. Juni,26. Juni,27. Juni,28. Juni, 29. Juni ,30. Juni,1. Juli,2. Juli,3. Juli,4. Juli,5. Juli ,6. Juli,7. Juli,8. Juli,9. Juli,10. Juli,11. Juli,12. Juli,13. Juli,14. Juli,15. Juli,16. Juli,17. Juli,18 。Juli,19. Juli,20. Juli,21. Juli,22. Juli,23. Juli,24. Juli,25. Juli,26. Juli,27. Juli,28. Juli,29. Juli,30. Juli ,31. Juli,1. Aug.,2. Aug.,3. Aug.,4. Aug.,5. Aug.,6. Au例如,7月7日,8月8日,8月​​8日,9月8日,10月8月11日,8月11日,12月8日,13月8月14日,8月14日,15月8月16日。 8月17日,8月18日,8月​​8日。

我假设'(null)'表示没有为UITest查询设置搜索字符串:
app.tables.pickerWheels.elementBoundByIndex(0).adjustToPickerWheelValue("29. Juni")

这就是引发此异常的原因。

仅当模拟器首选项“常规/语言和地区”未设置为默认“美国” 时,才会出现所描述的问题。

当我在模拟器中切换到其他语言设置时,通过上面自己的快速代码以及以下发布中引用的Objective-C代码,我得到了相同的结果:

How to select a picker view item in an iOS UI test in Xcode?

我绝对必须使用本地化的日期和时间选择器执行UITestings!
有人有想法吗,这里出什么问题了,如果有解决办法?

最佳答案

可能为时已晚,但这帮助了我

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

10-08 17:06