web-dev-qa-db-fra.com

Comment sélectionner un élément de vue de sélecteur dans un test d'interface utilisateur iOS dans Xcode?

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.

enter image description here

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

Mettre à jour

Il est maintenant possible de sélectionner une vue de sélecteur depuis Xcode 7.0 beta 6.

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

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 .

45
Joe Masilotti

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

14
Joao_dche

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

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];
2
Debo

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

 enter image description here

1
Boston Star

_ {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()

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()
0
Pavel Vavilov

J'ai utilisé le code ci-dessous pour identifier l'élément affiché dans la molette du sélecteur.

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 la roue de sélection:

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