Подтвердить что ты не робот

Как выбрать элемент представления выбора в тесте 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")
4b9b3361

Ответ 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];