如何在Xcode的iOS UI测试中选择一个选择器视图项?

Evg*_*nii 41 xcode ios xctest swift xcode-ui-testing

我有一个选择器视图,几个项目:"红色","绿色","黄色","黑色".在我的UI测试中,我需要从中选择一个特定的项目"绿色".我正在使用Xcode 7引入的XCTest UI测试API.

在此输入图像描述

到目前为止我设法做的是在单元测试中刷整整个选择器视图.它并不理想,因为它总是将拾取器视图更改为底部项目(向上滑动时).

let app = XCUIApplication()
app.launch()
app.pickers.elementAtIndex(0).swipeUp()    
XCTAssert(app.staticTexts["Selected: Black"].exists)
Run Code Online (Sandbox Code Playgroud)

改变选择器视图的另一种但非常相似的方法是调用pressForDuration ... thenDragToElement,这不是我想要的.

app.pickers.elementAtIndex(0).pressForDuration(0.1, thenDragToElement: someElement)
Run Code Online (Sandbox Code Playgroud)

当我使用UI测试记录功能时,它不会记录选择器视图滚动事件.当我点击选择器视图项时它会记录:

app.pickerWheels["Green"].tap()
Run Code Online (Sandbox Code Playgroud)

但是在运行测试时这实际上并不起作用(可能是因为它需要在点击之前首先滚动选择器视图).

这是带有测试的演示应用程序.

https://github.com/exchangegroup/PickerViewTestDemo

更新

现在可以从Xcode 7.0 beta 6中选择一个选择器视图.

app.pickerWheels["Green"].adjustToPickerWheelValue("Yellow")
Run Code Online (Sandbox Code Playgroud)

Joe*_*tti 48

正如问题的更新中所述,Xcode 7 Beta 6增加了对与拾取器交互的支持.-adjustToPickerWheelValue:应该使用新添加的方法来选择a上的项目UIPickerView.

let app = XCUIApplication()
app.launch()
app.pickerWheels.element.adjustToPickerWheelValue("Yellow")
Run Code Online (Sandbox Code Playgroud)

这是一个带有工作示例GitHub仓库.而一些在博客中更多信息,我写的.

  • `.adjust(toPickerWheelValue:"foo")`对我不起作用 (3认同)

Joa*_*che 15

如果有多个轮子,一个简单的方法来选择项目是这样的:

前提条件:它是一个日期选择器(UIDatePicker),快速的语言

    app.pickerWheels.elementBoundByIndex(0).adjustToPickerWheelValue("March")
    app.pickerWheels.elementBoundByIndex(1).adjustToPickerWheelValue("13")
    app.pickerWheels.elementBoundByIndex(2).adjustToPickerWheelValue("1990")
Run Code Online (Sandbox Code Playgroud)

其中:索引"0"是月,"1"是日,"2"是年

  • 使用绝对索引时要小心本地化.月和日轮可能会有所不同,具体取决于设备的本地位置(我们和德国本地人的例子有不同的布局) (7认同)
  • 这不起作用.我总是得到:"UI测试失败 - 内部错误:无法找到当前值'东西,1中的3个'可能值的东西,东西2,东西3的拾取轮"Something,1 of 3"PickerWheel" (3认同)

rad*_*tiv 6

Swift 4版本的@Joao_dche的答案

app.pickerWheels.element(boundBy: 0).adjust(toPickerWheelValue: "March")
app.pickerWheels.element(boundBy: 1).adjust(toPickerWheelValue: "13")
app.pickerWheels.element(boundBy: 2).adjust(toPickerWheelValue: "1990")
Run Code Online (Sandbox Code Playgroud)