J'ai une vue sélecteur avec quelques éléments: "Rouge", "Vert", "Jaune", "Noir". Dans mon test d’interface utilisateur, je dois sélectionner un élément spécifique "vert". J'utilise les API de test XCTest UI impliquées dans Xcode 7.
Ce que j’ai réussi à faire jusqu’à présent, c’est de faire glisser l’ensemble du sélecteur dans le test unitaire. Ce n'est pas idéal car cela change toujours la vue du sélecteur sur l'élément du bas (quand vous glissez vers le haut).
let app = XCUIApplication()
app.launch()
app.pickers.elementAtIndex(0).swipeUp()
XCTAssert(app.staticTexts["Selected: Black"].exists)
Une autre façon, mais très similaire, de changer l’affichage du sélecteur consiste à appeler pressForDuration ... thenDragToElement
, ce qui n’est pas ce que je veux.
app.pickers.elementAtIndex(0).pressForDuration(0.1, thenDragToElement: someElement)
Lorsque j'utilise la fonction de test de l'interface utilisateur enregistrer, elle n'enregistre pas les événements de défilement de la vue sélecteur. Il enregistre lorsque je tape sur les éléments de vue du sélecteur:
app.pickerWheels["Green"].tap()
mais cela ne fonctionne pas réellement lorsque le test est exécuté (probablement parce qu'il doit d'abord faire défiler la vue du sélecteur avant de toucher).
Voici l'application de démonstration avec le test.
https://github.com/exchangegroup/PickerViewTestDemo
Il est maintenant possible de sélectionner une vue de sélecteur depuis Xcode 7.0 beta 6.
app.pickerWheels["Green"].adjustToPickerWheelValue("Yellow")
Comme indiqué dans la mise à jour de la question, Xcode 7 Beta 6 a ajouté la prise en charge de l'interaction avec les sélecteurs. La méthode nouvellement ajoutée -adjustToPickerWheelValue:
devrait être utilisée pour sélectionner des éléments sur une UIPickerView
.
let app = XCUIApplication()
app.launch()
app.pickerWheels.element.adjustToPickerWheelValue("Yellow")
Voici un GitHub repo avec un exemple de travail . Et quelques plus d’informations dans un article de blog que j’ai écrit .
S'il y a plusieurs roues, une méthode simple pour sélectionner les éléments est la suivante:
condition préalable: c'est un sélecteur de date (UIDatePicker), langue Swift
app.pickerWheels.elementBoundByIndex(0).adjustToPickerWheelValue("March")
app.pickerWheels.elementBoundByIndex(1).adjustToPickerWheelValue("13")
app.pickerWheels.elementBoundByIndex(2).adjustToPickerWheelValue("1990")
où: index "0" est le mois, "1" est le jour, "2" est l'année
Swift 4 version de @Joao_dche 's answer
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 la réponse de @Joao_dche
Utilisation de UIDatePicker avec XCTest pour les tests d'interface utilisateur:
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];
Ceci est l’un des articles les plus populaires pour le pickervie sélectionné (UIPickerView)
Si vous souhaitez sélectionner l'état/la date dans la vue du sélecteur. Vous pouvez essayer de suivre le code Swift 3.
XCUIApplication().tables.pickerWheels["AK"].adjust(toPickerWheelValue: "MA")
PickerWheels choisir parmi AK et définir l'état cible.
XCUIApplication (). Tables.pickerWheels ["Point de départ" "] .adjust (toPickerWheelValue:" Target Place ")
_ {La réponse de Joe fonctionne très bien sur iOS 11, mais ne fonctionne pas pour moi sur iOS 10.3.1 [Xcode 9.2]} _
J'utilise des vues personnalisées (en fait, des étiquettes) comme rangées de sélecteurs et, malheureusement, la superbe réponse de Joe ne fonctionne pas pour moi sur iOS 10.3.1 tandis que 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.
Donc, dans mon cas, cette commande ressemble à
app.pickerWheels["1st, 1 of 28"].swipeUp()
J'ai utilisé le code ci-dessous pour identifier l'élément affiché dans la molette du sélecteur.
let valueSelected = algorithmsPicker.pickerWheels.element(boundBy: 0).value as! String
algorithmsPicker.pickerWheels[valueSelected].adjust(toPickerWheelValue: "BubbleSort")