web-dev-qa-db-ja.com

XcodeのiOS UIテストでピッカービューアイテムを選択する方法

「赤」、「緑」、「黄」、「黒」のいくつかのアイテムを含むピッカービューがあります。 UIテストでは、特定の項目「Green」を選択する必要があります。 Xcode 7で侵入されたAPIをテストするXCTest UIを使用しています。

enter image description here

これまで何とかできたのは、単体テストでピッカービュー全体を上にスワイプすることです。ピッカービューを常に下のアイテムに変更する(上にスワイプする)ため、理想的ではありません。

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

ピッカービューを変更するもう1つの非常によく似た方法は、pressForDuration ... thenDragToElement、これは私が望むものではありません。

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

UIテストrecord関数を使用すると、ピッカービューのスクロールイベントは記録されません。ピッカービューアイテムをタップすると記録されます。

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

ただし、テストの実行時には実際には機能しません(おそらく、タップする前に最初にピッカービューをスクロールする必要があるためです)。

これがテスト付きのデモアプリです。

https://github.com/exchangegroup/PickerViewTestDemo

更新

Xcode 7.0 beta 6以降、ピッカービューを選択できるようになりました。

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

質問の更新で述べたように、Xcode 7 Beta 6ではピッカーとの対話のサポートが追加されました。新しく追加されたメソッド-adjustToPickerWheelValue:は、UIPickerViewの項目を選択するために使用する必要があります。

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

GitHubリポジトリと実例を使用 です。そして、いくつかの 私が書いたブログ投稿の詳細

46
Joe Masilotti

複数のホイールがある場合、アイテムを選択する簡単な方法は次のとおりです。

前提条件:日付ピッカー(UIDatePicker)、Swift language

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

ここで、インデックス「0」は月、「1」は日、「2」は年です

16
Joao_dche

@ Joao_dcheの答えのSwift 4バージョン

app.pickerWheels.element(boundBy: 0).adjust(toPickerWheelValue: "March")
app.pickerWheels.element(boundBy: 1).adjust(toPickerWheelValue: "13")
app.pickerWheels.element(boundBy: 2).adjust(toPickerWheelValue: "1990")
6
radioaktiv

Objective-C@ Joao_dcheの回答のバージョン

UIテストのためにXCTestでUIDatePickerを使用する:

    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

これは、select pickervie(UIPickerView)の最も人気のある投稿の1つです。

ピッカービューから状態/日付を選択する場合。次のSwift 3コードを試してください。

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

PickerWheelsはAKから選択し、ターゲット状態を設定します。

XCUIApplication()。tables.pickerWheels [ "Starting Point" "] .adjust(toPickerWheelValue:"Target Place ")

enter image description here

1
N..

Joeの答え iOS 11ではうまく動作しますが、iOS 10.3.1では動作しません[Xcode 9.2]

私はピッカー行としてカスタムビュー(実際にはラベル)を使用し、残念ながらゴージャスなJoeの答えは機能しません iOS 10.3.1の私にとってはiOS 11で完全に動作しますiOS 11で

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.

だから私の場合、このコマンドは次のようになります

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

以下のコードを使用して、ピッカーホイールに現在表示されている要素を識別しました。

ピッカーで要素を見つけるには

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

ピッカーホイールで値を選択するには:

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