2015-12-03 13 views
10

Sto lavorando con UITableViews e vorrei trovare la cella che corrisponde a un controllo o un testo statico all'interno della cella.Trova genitore o fratello con XI UI test

Più in generale, un buon modo per trovare qualsiasi genitore o fratello di un dato elemento sarebbe bello sapere.

In questo momento sto solo scorrendo tra le celle finché non trovo quello corretto, che vorrei evitare. Ho provato a utilizzare app.tables.cells.containingPredicate, ma non ho avuto fortuna.

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

L'elemento passato al blocco predicato è un XCElementSnapshot che non ha staticTexts.

EDIT

James è corretta, il containingType: identificatore: metodo funziona alla grande.

a Swift, sembra che questo

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

Dove l'identificatore nella firma del metodo non corrisponde alla proprietà di identificazione dell'elemento, piuttosto è semplicemente il modo normale si dovrebbe accedere a un elemento da un testo tra parentesi .

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

Sono ancora confuso come di perche' app.cells.staticTexts [ "Il mio testo"] 'no Lavoro per te. Se la stringa "My Text" appartiene a qualsiasi cella, l'istantanea della gerarchia di accessibilità della tua app troverà la stringa e la corrisponderà. Il metodo 'containingType: identifier:' crea un 'XCUIElementQuery', e questo non significa che' XCUIElement' da questa query esista effettivamente nella tua app. – Citronex

+0

app.cells.staticTexts [] mi restituirebbe un testo statico, ad esempio UILabel, mentre mi serviva UITableViewCell, non l'etichetta – Alex

+0

che vedo. Correggetemi se ho torto, ma facendo 'let cella = app.tables.cells.containingType (.StaticText, identificatore:" My Text ")' sta creando un XCUIElementQuery, non un XCUIElement, quindi non stai effettivamente creando un'istanza elemento nella tua app, semplicemente creando una query a un elemento che potrebbe non esistere nemmeno. Se sulla console si esegue 'po app.tables.cells.containingType (.StaticText, identificatore:" blah blah ")' restituirà sempre un oggetto anche se non esiste, e non è possibile eseguire alcuna affermazione su un XCUIElementQuery, o anche i metodi .exist o .hittable per vedere se il tuo elemento è reale. – Citronex

risposta

9

Hai provato a usare containingType invece di containingPredicate? Sembra darti esattamente quello che stai cercando. Io non sono troppo familiarità con Swift, ma in Objective C, che sarà simile a questa:

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

Ho pensato che l''identificatore' nel metodo fosse la proprietà dell'identificatore dell'elemento, grazie per la correzione – Alex

+0

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

+0

@JoeMasilotti Qualche idea la firma del metodo è identificatore:, ma questo non corrisponde alla proprietà identificatore su XCUIElement? L'identificatore di XCUIElementQuery è il materiale tra parentesi? – Alex