Как выбрать элемент представления выбора в тесте пользовательского интерфейса iOS в Xcode?

у меня есть вид выбора с несколькими элементами:" красный"," зеленый"," желтый","черный". В моем тесте пользовательского интерфейса мне нужно выбрать конкретный элемент "Зеленый" из него. Я использую API-интерфейсы тестирования XCTest UI, которые были введены с Xcode 7.

enter image description here

что мне удалось сделать до сих пор, это провести весь вид подборщика в модульном тесте. Это не идеально, потому что он всегда изменяет вид выбора на нижний элемент (при прокрутке вверх).

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 test запись функция он не записывает события прокрутки вида выбора. Он записывает, когда я нажимаю на элементы просмотра выбора:

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

но это на самом деле не работает при запуске теста (вероятно, потому, что ему нужно прокрутить представление выбора перед нажатием).

вот демо-приложение с тест.

https://github.com/exchangegroup/PickerViewTestDemo

обновление

теперь можно выбрать вид выбора с Xcode 7.0 beta 6 .

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

7 ответов


как отмечено в обновлении вопроса, Xcode 7 Beta 6 добавил поддержку взаимодействия с сборщиками. Недавно добавленный метод -adjustToPickerWheelValue: следует использовать для выбора элементов на UIPickerView.

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

здесь РЕПО GitHub с рабочим примером. И некоторые больше информации в блоге я писал.


Если есть несколько колес, Простой способ, чтобы выбрать элементы это:

предварительное условие: это выбор даты (UIDatePicker), swift language

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

где: индекс "0" - месяц, "1" - день, "2" - год


Swift 3 версия @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")

С версия @Joao_dcheответом

использование UIDatePicker с XCTest для тестирования пользовательского интерфейса:

    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];

Джо отлично работает на 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()

Это одна из самых популярных пост для выбора pickervie(UIPickerView)

Если вы хотите выбрать состояние / дату из вида выбора. Вы можете попробовать следовать swift 3 код.

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

PickerWheels выберите из AK и установите целевое состояние.

XCUIApplication ().таблицы.pickerWheels["Отправная Точка" "].adjust (toPickerWheelValue:"Целевые Места")

enter image description here


я использовал ниже код для идентификации элемента, отображаемого теперь в колесе выбора.

чтобы найти элемент в picker

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

, чтобы выбрать значение в колесо подборщика:

 algorithmsPicker.pickerWheels[valueSelected].adjust(toPickerWheelValue: "BubbleSort")