[Swift]UI Testing Failure – Multiple matches found

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 を使わないといけないのですね。

なるほど。

ここら辺、ソースコードと睨めっこな領域になるのですが、だいぶどんな感じのメソッドがあるのか把握してきた感じ。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中