これはおそらくあなたが望んでいた答えではありませんが、UITestのUIPickerView
にあるすべての行のタイトルを取得することはできません。
あなたが知っているように、UITestを実行するときは、アプリのUI要素には、XCUIElement
クラスでしかアクセスできません。そのクラスにはvalue
というプロパティがあり、アクセスするUI要素に関する情報が表示されます。 UIPickerView
にアクセスすると、value
には現在選択されている行のタイトルが表示されます。しかし、選択された行のみ。ピッカーの行要素にアクセスできますが、残念ながら行要素のvalue
プロパティは常に空です。だからここに運がない。取得できるすべての情報は、ピッカーの行数です。
これは本当に驚くことではありません。 UIPickerView
にアクセスしても、すべての行のタイトルに直接アクセスすることはできませんでした。 UIPickerView
は、それが表示するタイトルについて知りません。タイトルを提供するのはUIPickerViewDataSource
の仕事です。
残念ながら、UIPickerView
のすべての行タイトルをUITestで知る必要がある場合は、実際には、アプリのユーザーインターフェイスで各値を1つずつ選択する必要があります。
しかし、あなたがリンクした答えほど複雑である必要はありません。代わりにスクロールをシミュレートするのは、単に(わずかに速いはずです)、それを選択するために、次の行をタップすることができますあなたの質問に
let pickerView = app.pickerWheels.element
let numRows = pickerView.children(matching: .any).count
var values: [String] = [pickerView.value as! String]
for _ in 0..<numRows {
pickerView.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.55)).tap()
values.append(pickerView.value as! String)
}
あなたは本当にあなたがテストしようとしているかを説明していません。しかし、ピッカーが正しい行タイトルを持っているかどうかをテストしたいのであれば、UnitTestはもっと実用的なアプローチでしょうか?
あなたの答えに感謝し、私は本当に感謝しています。 UIPickerViewは検索フォーム上にあり、その上でタップし、ランダムな値を選択して検索を実行してから、いくつかのアサーションを実行する必要があります。問題は、ピッカービューの値が動的なので、私は事前に値を知らないということです。インストゥルメントの古いツールであるオートメーションを使用すると、インデックスごとに特定の行にアクセスできます。とにかく私はあなたの答えを受け入れるでしょう。なぜなら、私がしたことがあるからですが、それはまだ遅いです。彼らが改善し、インデックスで値を調整できることを願っています –