XCUITestでは、例えば以下のように記述することで、button要素に “example” とtitle/accessibilityIdentifierなどが付与されたものを取得、tapします。
func testTapButtons() {
XCUIApplication().buttons["example"].tap()
}
ただし、表示されている画面要素に対して、この条件に合致する要素が複数存在した場合、以下のようにエラーが表示されてテストがこけます。
UI Testing Failure – Multiple matches found
こんな時は、以下のように elementBoundByIndex を使うことで、特定の配列要素を得ることができます。( childrenMatchingType(.Button) はオマケ )
func testTapButton() {
XCUIApplication().childrenMatchingType(.Button). matchingIdentifier("example").elementBoundByIndex(0).tap()
}
例えば、Appium x ruby_libを使った場合は複数要素を取得する場合は配列で要素が得られます。なので、そこらへんを使ったことがある人だとSwiftでも配列として得られて、 XCUIApplication().buttons["example"][0].tap() とかでできそうな気がしますが、そでは正しく動作しません。 elementBoundByIndex を使わないといけないのですね。
なるほど。
ここら辺、ソースコードと睨めっこな領域になるのですが、だいぶどんな感じのメソッドがあるのか把握してきた感じ。