it-swarm.com.de

Wie wähle ich einen Picker View-Eintrag in einem iOS-UI-Test in Xcode aus

Ich habe eine Picker-Ansicht mit wenigen Elementen: "Rot", "Grün", "Gelb", "Schwarz". In meinem UI-Test muss ich ein bestimmtes Element "Grün" auswählen. Ich verwende die XCTest-UI-Test-APIs, die mit Xcode 7 eingeführt wurden.

enter image description here

Was ich bisher geschafft habe, ist, die gesamte Picker-Ansicht im Gerätetest nach oben zu streichen. Dies ist nicht ideal, da die Picker-Ansicht immer in das unterste Element geändert wird (wenn Sie nach oben ziehen).

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

Eine andere, aber sehr ähnliche Möglichkeit zum Ändern der Picker-Ansicht ist der Aufruf von pressForDuration ... thenDragToElement, den ich nicht möchte.

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

Wenn ich die UI-Testfunktion record verwende, werden die Scrollen der Picker-Ansicht nicht aufgezeichnet. Es zeichnet auf, wenn ich auf Elemente der Auswahlansicht tippe:

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

das funktioniert jedoch nicht, wenn der Test ausgeführt wird (wahrscheinlich, weil vor dem Antippen zuerst die Auswahlansicht durchgeblättert werden muss).

Hier ist die Demo-App mit dem Test.

https://github.com/exchangegroup/PickerViewTestDemo

Aktualisieren

Es ist jetzt möglich, eine Picker-Ansicht seit Xcode 7.0 Beta 6 auszuwählen.

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

Wie in der Aktualisierung der Frage erwähnt, hat Xcode 7 Beta 6 Unterstützung für die Interaktion mit Kommissionierern hinzugefügt. Die neu hinzugefügte Methode -adjustToPickerWheelValue: sollte verwendet werden, um Elemente in einer UIPickerView auszuwählen.

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

Hier ist ein GitHub-Repo mit einem Funktionsbeispiel . Und einige weitere Informationen in einem Blogpost, den ich geschrieben habe .

45
Joe Masilotti

Wenn mehrere Räder vorhanden sind, können Sie Elemente auf einfache Weise auswählen:

voraussetzung: Es handelt sich um eine Datumsauswahl (UIDatePicker), Swift-Sprache

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

dabei gilt: Index "0" ist Monat, "1" ist Tag, "2" ist Jahr

14
Joao_dche

Swift 4-Version von @Joao_dche s Antwort

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 von @Joao_dche s Antwort

Verwenden von UIDatePicker mit XCTest zum Testen der Benutzeroberfläche:

    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

Dies ist einer der beliebtesten Posts für select pickervie (UIPickerView)

Wenn Sie Status/Datum aus der Kommissionieransicht auswählen möchten. Sie können versuchen, den Swift 3-Code einzuhalten.

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

PickerWheels wählen von AK aus und legen den Zielzustand fest. 

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

 enter image description here

1
Boston Star

Joes Antwort funktioniert super unter iOS 11, aber unter iOS 10.3.1 funktioniert er nicht [Xcode 9.2]

Ich verwende benutzerdefinierte Ansichten (eigentlich Etiketten) als Auswahlzeilen und leider die großartige Antwort von Joe funktioniert nicht für mich unter iOS 10.3.1, während perfekt funktioniert auf iOS 11. Also musste ich verwenden

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

woher

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.

In meinem Fall sieht dieser Befehl also aus

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

Ich habe den folgenden Code verwendet, um das Element zu identifizieren, das jetzt im Picker-Rad angezeigt wird.

So finden Sie ein Element in der Auswahlfunktion

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

So wählen Sie einen Wert im Picker-Rad aus:

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