2015-12-03 10 views
10

私はUITableViewsで作業しています。セル内のコントロールまたは静的テキストに対応するセルを探したいと思います。Xcode UIテストで親または兄弟を検索する

さらに一般的には、特定の要素の親または兄弟を見つける良い方法は知っておくとよいでしょう。

今、私は正しいものを見つけるまで細胞をループしています。私は避けたいものです。私はapp.tables.cells.containingPredicateを使ってみましたが、運がなかった。

let pred = NSPredicate { (element, bindings: [String : AnyObject]?) -> Bool in 
     return element.staticTexts["My Text"].exists 
} 
let cells = app.tables.cells.containingPredicate(pred) 

述語ブロックに渡される要素は、staticTextsを持たないXCElementSnapshotです。

EDIT

ジェームズが正しいか、containingType:識別子:メソッドが素晴らしい作品。迅速で

、それがメソッドシグネチャ内の識別子は、要素の識別子プロパティに対応していないこの

let cell = app.tables.cells.containingType(.StaticText, identifier: "My Text") 

のように見え、むしろそれは単にあなたが括弧内のテキストによって要素にアクセスする通常の方法です。 。

app.cells.staticTexts["My Text"] 
+0

が、私はまだ、なぜ 'app.cells.staticTexts [「マイテキスト」]のように混乱していませんでした'あなたのために働く。文字列 "My Text"がどのセルに属していても、アプリのアクセシビリティ階層のスナップショットはその文字列を見つけて一致させるでしょう。 'containingType:identifier:'メソッドは 'XCUIElementQuery'を作成します。これは、このクエリの' XCUIElement'が実際にあなたのアプリに存在することを意味しません。 – Citronex

+0

app.cells.staticTexts []は静的なテキスト、つまりUILabelを返しますが、私はUITableViewCellが必要ですが、ラベルは – Alex

+0

ではありません。私が間違っている場合は私を修正しますが、 'let cell = app.tables.cells.containingType(.StaticText、identifier:" My Text ")'を実行すると、XCUIElementではなくXCUIElementQueryが作成されます。要素のクエリを作成するだけで、存在しない可能性もあります。コンソール上で 'po app.tables.cells.containingType(.StaticText、識別子:" blah blah ")'を実行すると、オブジェクトが存在しない場合でも常にオブジェクトを返します。 XCUIElementQuery、または.existまたは.hittableメソッドであっても、要素が実際のものかどうかを調べることができます。 – Citronex

答えて

9

あなたはcontainingType代わりのcontainingPredicateを使用してみましたか?それはあなたが探しているものを正確に与えるようです。私はスウィフトとあまり慣れていないんだけど、Objective Cの中で、それは次のようになります。

[app.cells containingType:XCUIElementTypeStaticText identifier:@"My Text"]; 
+0

私は、メソッドの '識別子'が要素の識別子プロパティであると考えました。訂正ありがとう – Alex

+0

Swift: 'app.cells.staticTexts [" My Text "]' –

+0

@JoeMasilottiメソッドのシグネチャはidentifier:ですが、これはXCUIElementのidentifierプロパティに対応していませんか? XCUIElementQueryの識別子は大括弧内のものですか? – Alex

関連する問題