Comment sélectionner un élément de vue picker dans un test iOS UI dans Xcode?

j'ai un sélecteur de vue avec quelques éléments: "Rouge", "Vert", "Jaune", "Noir". Dans mon test D'UI, je dois sélectionner un élément spécifique "vert" à partir de celui-ci. J'utilise les API de test XCTest qui ont été intrus avec Xcode 7.

enter image description here

ce que j'ai réussi à faire jusqu'à présent est de glisser toute la vue du capteur vers le haut dans le test de l'unité. Il n'est pas idéal parce qu'il change toujours la vue du picker à l'article du bas (en glissant vers le haut).

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

un autre mais très même façon de changer le sélecteur de vue est d'appeler pressForDuration ... thenDragToElement, qui n'est pas ce que je veux.

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

quand j'utilise le test de L'UI record fonction il n'enregistre pas les événements de défilement de picker view. Il enregistre quand j'appuyez sur le sélecteur afficher les éléments:

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

mais cela ne fonctionne pas vraiment lorsque le test est lancé (probablement parce qu'il faut faire défiler la vue du picker avant de taper).

Voici l'application de démonstration avec le test.

https://github.com/exchangegroup/PickerViewTestDemo

mise à Jour

il est maintenant possible de sélectionner une vue picker depuis Xcode 7.0 beta 6 .

app.pickerWheels["Green"].adjustToPickerWheelValue("Yellow")
34
demandé sur Evgenii 2015-07-07 02:32:06

7 réponses

comme indiqué dans la mise à jour de la question, Xcode 7 Beta 6 a ajouté le support pour interagir avec les cueilleurs. La nouvelle méthode -adjustToPickerWheelValue: doit être utilisé pour sélectionner des éléments sur un UIPickerView.

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

Voici un dépôt GitHub avec un exemple. Et certains plus d'informations dans un billet de blog que j'ai écrit.

38
répondu Joe Masilotti 2015-10-15 10:36:37

S'il y a plusieurs roues, un moyen facile de sélectionner des éléments, c'est comme ceci:

condition préalable: c'est une date picker (UIDatePicker), langage swift

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

où: l'indice "0" est le mois, "1" est le jour, "2" est l'année

14
répondu Joao_dche 2015-10-16 21:35:46

version Swift 3 de @Joao_dcheréponse

app.pickerWheels.element(boundBy: 0).adjust(toPickerWheelValue: "March")
app.pickerWheels.element(boundBy: 1).adjust(toPickerWheelValue: "13")
app.pickerWheels.element(boundBy: 2).adjust(toPickerWheelValue: "1990")
3
répondu radioaktiv 2017-06-07 06:41:46

Objective-C Version de @Joao_dcheRéponse

Utilisation de la UIDatePicker avec XCTest pour l'INTERFACE utilisateur de Test:

    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];
1
répondu Debo 2017-12-13 20:44:45

la réponse de Joe travaille bien sur iOS 11, mais ne travaille pas pour moi sur iOS 10.3.1 [Xcode 9.2]

j'utilise des vues personnalisées (étiquettes en fait) comme des rangées de picker et malheureusement la réponse de gorgeous Joe ne fonctionne pas pour moi, sur iOS 10.3.1 while fonctionne parfaitement sur iOS 11. J'ai donc dû utiliser

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.

alors dans mon cas cette commande semble comme

app.pickerWheels["1st, 1 of 28"].swipeUp()
0
répondu Pavel Vavilov 2018-01-04 22:18:28

C'est l'un des plus populaires post pour sélectionner pickervie(UIPickerView)

si vous voulez sélectionner l'état/la date à partir de la vue de picker. Vous pouvez essayer de suivre le code swift 3.

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

volants de sélection choisir AK et définir l'état cible.

XCUIApplication ().table.pickerWheels["Point De Départ""].adjust (toPickerWheelValue:" Cible Place")

enter image description here

0
répondu Boston Star 2018-03-01 16:28:58

j'ai utilisé le code ci-dessous pour identifier l'élément affiché maintenant dans la roue de picker.

Pour Trouver un élément dans le sélecteur

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

Pour sélectionner une valeur dans le sélecteur de roue:

 algorithmsPicker.pickerWheels[valueSelected].adjust(toPickerWheelValue: "BubbleSort")
0
répondu Sujananth 2018-03-26 14:33:15