如何在iOS UITest上获取pickerWheels的所有可能值?

如何在iOS UITest上获取pickerWheels的所有可能值?,ios,uipickerview,xcode-ui-testing,Ios,Uipickerview,Xcode Ui Testing,我的应用程序上有一个UIPickerView,其中有一个值列表,我们可以使用颜色。选择器只有一个轮子,我通过使用以下代码来选择值: let app = XCUIApplication() app.launch() app.pickerWheels.element.adjustToPickerWheelValue("Yellow") 但我想做的是在一个数组中获取这个轮子的所有可能值,这样我就可以使用数组值在选择器中进行选择 另一个好的解决方案是通过索引而不是键进行选择,但我找不到这样做的方法。有

我的应用程序上有一个UIPickerView,其中有一个值列表,我们可以使用颜色。选择器只有一个轮子,我通过使用以下代码来选择值:

let app = XCUIApplication()
app.launch()
app.pickerWheels.element.adjustToPickerWheelValue("Yellow")
但我想做的是在一个数组中获取这个轮子的所有可能值,这样我就可以使用数组值在选择器中进行选择


另一个好的解决方案是通过索引而不是键进行选择,但我找不到这样做的方法。有人吗?

我也在另一个问题上发表了这篇文章。您可以将选择器中的值的数目设为x,然后多次调用此函数x。当值更新单元格时,选择器与之关联,您可以从中获取值,将其添加到数组中

如果你有什么问题,请告诉我

解决方法:

let pickerWheel = XCUIApplication().pickers.pickerWheels.element
let appWindowHeight = XCUIApplication().windows.elementBoundByIndex(0).frame.height
let pickerWheelCellHeight = GFloat(44)
    func advancePickerWheelOneValue() -> Self {
         let topScrollPoint = Double(pickerWheel.frame.midY/appWindowHeight)
         let bottomScrollPoint = Double((pickerWheel.frame.midY + pickerWheelCellHeight)/appWindowHeight)
         let topScreenPoint = XCUIApplication().windows.elementBoundByIndex(0).coordinateWithNormalizedOffset(CGVector(dx: 0.5, dy: topScrollPoint))
         let bottomScreenPoint = XCUIApplication().windows.elementBoundByIndex(0).coordinateWithNormalizedOffset(CGVector(dx: 0.5, dy: bottomScrollPoint))
         bottomScreenPoint.pressForDuration(0, thenDragToCoordinate: topScreenPoint)
         return self
    }
您可能需要根据选择器的位置调整dx值

.coordinateWithNormalizedOffset(CGVector(dx: 0.5,
但是,如果选择器占据屏幕的宽度,则0.5起作用

使用此方法,可以一次移动选取器上的值。多次调用它,您将获得所需的值


这并不理想,但如果您想检查某些索引,它会有所帮助。希望您必须在具有数百个值的选择器上使用它;)

我也在另一个问题上发表了这篇文章。您可以将选择器中的值的数目设为x,然后多次调用此函数x。当值更新单元格时,选择器与之关联,您可以从中获取值,将其添加到数组中

如果你有什么问题,请告诉我

解决方法:

let pickerWheel = XCUIApplication().pickers.pickerWheels.element
let appWindowHeight = XCUIApplication().windows.elementBoundByIndex(0).frame.height
let pickerWheelCellHeight = GFloat(44)
    func advancePickerWheelOneValue() -> Self {
         let topScrollPoint = Double(pickerWheel.frame.midY/appWindowHeight)
         let bottomScrollPoint = Double((pickerWheel.frame.midY + pickerWheelCellHeight)/appWindowHeight)
         let topScreenPoint = XCUIApplication().windows.elementBoundByIndex(0).coordinateWithNormalizedOffset(CGVector(dx: 0.5, dy: topScrollPoint))
         let bottomScreenPoint = XCUIApplication().windows.elementBoundByIndex(0).coordinateWithNormalizedOffset(CGVector(dx: 0.5, dy: bottomScrollPoint))
         bottomScreenPoint.pressForDuration(0, thenDragToCoordinate: topScreenPoint)
         return self
    }
您可能需要根据选择器的位置调整dx值

.coordinateWithNormalizedOffset(CGVector(dx: 0.5,
但是,如果选择器占据屏幕的宽度,则0.5起作用

使用此方法,可以一次移动选取器上的值。多次调用它,您将获得所需的值


这并不理想,但如果您想检查某些索引,它会有所帮助。希望您必须在具有数百个值的选择器上使用它;)

这可能不是最好的解决方案,但我所做的是将一些垃圾值传递给adjustToPickerWheelValue(“垃圾”),这样测试将失败,控制台将打印错误-UI测试失败-请求的调整值“垃圾”,这不是拾取轮可能的黄色、红色等值之一。使用这些值,您可以在测试中创建一个静态数组,并在测试中使用这些值。@Sandy,谢谢。。但是我想要更干净的。。但这似乎是不可能的,所以不幸的是,我需要坚持使用标签。这可能不是最好的解决方案,但我所做的是将一些垃圾值传递给adjustToPickerWheelValue(“垃圾”),这样,测试将失败,控制台将打印错误-UI测试失败-请求调整为“垃圾”值,该值不是拾取轮的黄色、红色等可能值之一。使用这些值,您可以在测试中创建一个静态数组,并在测试中使用这些值。@Sandy,谢谢。。但是我想要更干净的。。但这似乎是不可能的,所以不幸的是,我需要坚持标签。感谢这个解决方案。我在快照UI测试中需要它,因为不同的地区,我不能在选择器控制盘中按字符串选择值。但我需要做一些调整才能让它发挥作用。1) 拖动对我不起作用,它总是滚动得太远。最后,我只使用了一个简单的点击“ButoScLooPooSt”,因为当前项目应该总是在中间,因此在中间的项目上点击选择下一个。2) 您不必硬编码dx值。您可以对应用程序窗口宽度使用与dy值相同的计算方法感谢此解决方案。我在快照UI测试中需要它,因为不同的地区,我不能在选择器控制盘中按字符串选择值。但我需要做一些调整才能让它发挥作用。1) 拖动对我不起作用,它总是滚动得太远。最后,我只使用了一个简单的点击“ButoScLooPooSt”,因为当前项目应该总是在中间,因此在中间的项目上点击选择下一个。2) 您不必硬编码dx值。应用程序窗口宽度的计算方法与dy值的计算方法相同