Как выбрать элемент представления выбора в тесте iOS UI в Xcode?
У меня есть выборщик с несколькими элементами: "Красный", "Зеленый", "Желтый", "Черный". В моем тестировании пользовательского интерфейса мне нужно выбрать из него конкретный элемент "Зеленый". Я использую API тестирования XCTest UI, которые были внедрены с Xcode 7.
![enter image description here]()
То, что мне удалось сделать до сих пор, - это прорисовать весь вид подборщика в unit test. Это не идеально, потому что он всегда меняет вид подборщика на нижний элемент (при прокрутке вверх).
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)
Когда я использую функцию запись теста пользовательского интерфейса, она не записывает события прокрутки в режиме выбора. Он записывает, когда я нажимаю на элементы просмотра выбора:
app.pickerWheels["Green"].tap()
но на самом деле это не работает, когда выполняется тест (возможно, потому, что перед тем, как нажать, нужно прокрутить представление выбора).
Вот демонстрационное приложение с тестом.
https://github.com/exchangegroup/PickerViewTestDemo
Update
Теперь можно выбрать представление выбора, так как Xcode 7.0 beta 6.
app.pickerWheels["Green"].adjustToPickerWheelValue("Yellow")
Ответы
Ответ 1
Как отмечено в обновлении вопроса, Xcode 7 Beta 6 добавила поддержку для взаимодействия с сборщиками. Добавленный метод -adjustToPickerWheelValue:
должен использоваться для выбора элементов в UIPickerView
.
let app = XCUIApplication()
app.launch()
app.pickerWheels.element.adjustToPickerWheelValue("Yellow")
Здесь репозиторий GitHub с рабочим примером. И некоторые больше информации в сообщении в блоге, которое я написал.
Ответ 2
Если есть несколько колес, легкий способ выбрать элементы, это примерно так:
precondition: это выбор даты (UIDatePicker), быстрый язык
app.pickerWheels.elementBoundByIndex(0).adjustToPickerWheelValue("March")
app.pickerWheels.elementBoundByIndex(1).adjustToPickerWheelValue("13")
app.pickerWheels.elementBoundByIndex(2).adjustToPickerWheelValue("1990")
где: индекс "0" - месяц, "1" - день, "2" - год
Ответ 3
Свифт 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")
Ответ 4
Objective-C Версия @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];