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.
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")
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.
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
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")
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];
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()
où
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()
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")
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")