guidelines bar ios xcode swift xctest xcode-ui-testing

bar - ¿Cómo seleccionar un elemento de vista de selector en una prueba de IU de iOS en Xcode?



navigation bar swift 4 (7)

Tengo una vista de selector con algunos elementos: "Rojo", "Verde", "Amarillo", "Negro". En mi prueba de IU, necesito seleccionar un elemento específico "Verde" de ella. Estoy utilizando las API de prueba de interfaz de usuario XCTest que se intrudujeron con Xcode 7.

Lo que logré hacer hasta ahora es deslizar toda la vista del selector hacia arriba en la prueba unitaria. No es ideal porque siempre cambia la vista del selector al elemento inferior (al deslizar hacia arriba).

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

Otra forma muy similar de cambiar la vista del selector es llamar a pressForDuration ... thenDragToElement , que no es lo que quiero.

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

Cuando uso la función de registro de prueba de IU, no registra los eventos de desplazamiento de la vista del selector. Graba cuando toco los elementos de vista del selector:

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

pero eso no funciona cuando se ejecuta la prueba (probablemente porque necesita desplazarse por la vista del seleccionador antes de tocar).

Aquí está la aplicación de demostración con la prueba.

https://github.com/exchangegroup/PickerViewTestDemo

Actualizar

Ahora es posible seleccionar una vista del selector desde Xcode 7.0 beta 6.

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



Esta es una de las publicaciones más populares para select pickervie (UIPickerView)

Si desea seleccionar estado / fecha desde la vista del selector. Puedes intentar seguir el código rápido 3.

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

PickerWheels elige de AK y establece el estado objetivo.

XCUIApplication (). Tables.pickerWheels [ "Starting Point" "] .adjust (toPickerWheelValue:" Target Place ")


Si hay varias ruedas, una forma sencilla de seleccionar elementos es así:

precondición: es un selector de fecha (UIDatePicker), lenguaje rápido

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

donde: el índice "0" es el mes, "1" es el día, "2" el año


Swift 3 versión de la respuesta de @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")


Utilicé el código siguiente para identificar el elemento que se muestra ahora en la rueda del selector.

Para encontrar un elemento en selector

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

Para seleccionar un valor en la rueda de selección:

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


Versión de Objective-C de la respuesta de @Joao_dche

Usando UIDatePicker con XCTest para pruebas de 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];


La respuesta de Joe funciona muy bien en iOS 11, pero no funciona para mí en iOS 10.3.1 [Xcode 9.2]

Utilizo vistas personalizadas (etiquetas en realidad) como filas de selectores y, desafortunadamente, la respuesta preciosa de Joe no funciona para mí en iOS 10.3.1 mientras funciono perfectamente en iOS 11. Así que tuve que usar

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

dónde

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.

Entonces en mi caso este comando se ve como

app.pickerWheels["1st, 1 of 28"].swipeUp()