2017-09-18 17 views
2

UIテストコード.element(boundBy: 0)のすべてのインスタンスを.firstMatchに置き換えても安全ですか?UIテストfirstMatch

私はそうだと思いますが、アップルからのドキュメントはそれについてはっきりしていません(特に複数のマッチの場合は最初のものだけは気にします)。 https://developer.apple.com/documentation/xctest/xcuielementtypequeryprovider/2902250-firstmatch

+1

Hmm良い質問。私の頭の上から、私はなぜそうではないのか分からない。 –

+0

私はそれを交換し、これまでのところよく見ています。 – Alper

答えて

3

element(boundBy: 0)firstMatchに置き換える代わりに、それらをチェーンする必要があります。

XCUIApplication().cells.element(boundBy:0).firstMatch 

これにより、画面上に複数のセルがある場合、クエリがより迅速に解決されます。 firstMatchを指定しないと、テストでは最初にすべてのセルのリストが取得され、最初のセルが使用されます。 firstMatchを指定すると、テストではセルが検索され、最初に見つかったセルが使用されます。

単一の要素がクエリと一致することを完全に知っている場合のみ、firstMatchを使用します。

あなたはまだあなたがもっともらしくfirstMatchを使用する場合、そのクエリに一致することができる唯一の要素があることを確認するために、クエリに一致する1つの以上の要素がある可能性がelement(boundBy:)のどこを行う必要があります。 3つのセルがあり、最初のセルを使用する場合は、element(boundBy: 0)を使用する必要があります。 が表示されている場合は、画面上に1セルしか表示されない場合は、element(boundBy: 0)をスキップしてelementの代わりにfirstMatchを使用してクエリを高速に解決しても問題ありません。

// fine if there is only one cell 
XCUIApplication().cells.element // also checks for multiple matches 
// also fine if there is only one cell 
XCUIApplication().cells.firstMatch // does not check for multiple matches 
+1

しかし、要素(boundBy:0)なしでfirstMatchを使用することの問題は何ですか?今はうまくいくようです。 – Alper

+0

Appleは、このAPIを紹介するWWDCのトークで、Appleが「驚くべき」結果と呼んでいることを守っています。 https://developer.apple.com/videos/play/wwdc2017/409/私が理解しているところでは、アプリが正しければ問題なく動作しますが、何か問題が起きて要素が見つからない場合は、firstMatch 'は他のAPIよりもはるかに優雅にエラーを処理します。 – Oletha

+0

私はそれが理にかなっていると思います。 UIテストではあまりにも多くの「驚くべき」結果がそのままです。 – Alper

関連する問題