it-swarm.com.ru

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

У меня есть окно выбора с несколькими пунктами: «Красный», «Зеленый», «Желтый», «Черный». В моем тесте пользовательского интерфейса мне нужно выбрать определенный элемент "Зеленый" из него. Я использую API тестирования пользовательского интерфейса XCTest, которые были внедрены с 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 record, она не записывает события прокрутки в окне выбора. Это делает запись, когда я нажимаю на элементы просмотра выбора:

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

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

Вот демонстрационное приложение с тестом.

https://github.com/exchangegroup/PickerViewTestDemo

Обновление

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

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

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

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

Вот репозиторий GitHub с рабочим примером . И немного дополнительной информации в сообщении в блоге, которое я написал .

45
Joe Masilotti

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

предварительное условие: это средство выбора даты (UIDatePicker), язык Swift

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

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

14
Joao_dche

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")
4
radioaktiv

Objective-C Версия @Joao_dche 's Ответ

Использование 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];
2
Debo

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

Если вы хотите выбрать штат/дату в окне выбора. Вы можете попробовать следующий код Swift 3.

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

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

XCUIApplication (). Tables.pickerWheels ["Начальная точка" "] .adjust (toPickerWheelValue:" Target Place ")

 enter image description here

1
Boston Star

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

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

Найти элемент в пике

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

Чтобы выбрать значение в колесе выбора:

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