48

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

在此处输入图像描述

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

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

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

app.pickers.elementAtIndex(0).pressForDuration(0.1, thenDragToElement: someElement)

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

app.pickerWheels["Green"].tap()

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

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

https://github.com/exchangegroup/PickerViewTestDemo

更新

现在可以从 Xcode 7.0 beta 6 开始选择选择器视图。

app.pickerWheels["Green"].adjustToPickerWheelValue("Yellow")
4

7 回答 7

55

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

let app = XCUIApplication()
app.launch()
app.pickerWheels.element.adjustToPickerWheelValue("Yellow")

这是一个带有工作示例的 GitHub 存储库在我写的博客文章中还有更多信息。

于 2015-07-16T15:25:56.380 回答
20

如果有多个轮子,选择项目的简单方法如下:

前提:它是一个日期选择器(UIDatePicker),swift语言

    app.pickerWheels.elementBoundByIndex(0).adjustToPickerWheelValue("March")
    app.pickerWheels.elementBoundByIndex(1).adjustToPickerWheelValue("13")
    app.pickerWheels.elementBoundByIndex(2).adjustToPickerWheelValue("1990")

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

于 2015-10-16T21:35:46.693 回答
8

@Joao_dche答案的Swift 4 版本

app.pickerWheels.element(boundBy: 0).adjust(toPickerWheelValue: "March")
app.pickerWheels.element(boundBy: 1).adjust(toPickerWheelValue: "13")
app.pickerWheels.element(boundBy: 2).adjust(toPickerWheelValue: "1990")
于 2017-06-07T06:41:46.367 回答
2

@Joao_dche答案的Objective-C版本

使用 UIDatePicker 和 XCTest 进行 UI 测试:

    XCUIElementQuery *datePickersQuery = app.datePickers;
    [datePickersQuery.pickerWheels.allElementsBoundByIndex[0] adjustToPickerWheelValue:@"May"];
    [datePickersQuery.pickerWheels.allElementsBoundByIndex[1] adjustToPickerWheelValue:@"13"];
    [datePickersQuery.pickerWheels.allElementsBoundByIndex[2] adjustToPickerWheelValue:@"2017"];

    XCUIElement *doneButton = app.buttons[@"Done"];
    [doneButton.firstMatch tap];
于 2017-12-13T20:44:45.423 回答
1

Joe 的回答在 iOS 11 上运行良好,但在 iOS 10.3.1 [Xcode 9.2] 上不适用于我

我使用自定义视图(实际上是标签)作为选择器行,不幸的是,华丽的乔的答案在 iOS 10.3.1 上对我不起作用,而在 iOS 11 上完美运行。所以我不得不使用

app.pickerWheels["X, Y of Z"].swipeUp()

在哪里

X is my label's text.
Y is row position in picker view. Position number starts with 1, not zero.
Z is number of values in picker view.

所以在我的情况下,这个命令看起来像

app.pickerWheels["1st, 1 of 28"].swipeUp()
于 2018-01-04T22:18:28.663 回答
1

这是选择pickervie(UIPickerView)最受欢迎的帖子之一

如果您想从选择器视图中选择状态/日期。您可以尝试遵循 swift 3 代码。

 XCUIApplication().tables.pickerWheels["AK"].adjust(toPickerWheelValue: "MA")

PickerWheels 从 AK 中挑选并设置目标状态。

XCUIApplication().tables.pickerWheels[ "起点" "].adjust(toPickerWheelValue:"目标位置")

在此处输入图像描述

于 2018-03-01T16:14:41.983 回答
-1

我使用下面的代码来识别现在显示在选择器轮中的元素。

在选取器中查找元素

let valueSelected = algorithmsPicker.pickerWheels.element(boundBy: 0).value as! String

要在选择器轮中选择一个值:

 algorithmsPicker.pickerWheels[valueSelected].adjust(toPickerWheelValue: "BubbleSort")
于 2018-03-26T14:33:15.700 回答