最近我遇到了一个非常头痛的问题(而且我还在苦苦思索),想知道如何检索UIPickerWheel中的所有值。对我来说应该足够在特定的方向行,但我不能!真令人沮丧!我试图逐行滚动来检索所有值(https://stackoverflow.com/a/39300344/821407),但它太慢了!任何线索?
注意:我不能使用adjustToPickerWheelValue,因为我的根本问题是我不知道该值,因为它们是动态的,我想避免launchArguments / launchEnvironment。
答案 0 :(得分:2)
这可能不是您希望的答案,但是无法在UITest中获得UIPickerView
中所有行的标题。
如您所知,在运行UITest时,您只能通过XCUIElement
课程访问应用的UI元素。该类具有value
属性,可为您提供有关您访问的UI元素的一些信息。访问UIPickerView
时,value
会为您提供当前所选行的标题。但只有选定的行。您可以访问选择器的行元素,但不幸的是,行元素的value
属性始终为空。所以,这里没有运气。您可以获得的所有信息都是选择器的行数。
但这并不奇怪。即使您有权访问UIPickerView
,也无法直接访问所有行的标题。 UIPickerView
不知道它显示的标题。提供标题是UIPickerViewDataSource
的工作。
所以,不幸的是,如果您需要知道UITest中UIPickerView
的所有行标题,您必须通过应用的用户界面逐个选择每个值。
但它不必像你所链接的答案那样复杂。您可以简单地点击下一行来选择它(应该稍快一些),而不是模拟滚动:
let pickerView = app.pickerWheels.element
let numRows = pickerView.children(matching: .any).count
var values: [String] = [pickerView.value as! String]
for _ in 0..<numRows {
pickerView.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.55)).tap()
values.append(pickerView.value as! String)
}
在你的问题中,你并没有真正描述你想要测试的内容。但是如果你想测试选择器是否具有正确的行标题,那么UnitTest是否会更实用?