2015-12-03 4 views
10

Я работаю с UITableViews, и я хотел бы найти ячейку, которая соответствует элементу управления или статическому тексту внутри ячейки.Найти родителя или родного брата с тестированием интерфейса Xcode

В более общем плане, хороший способ найти любого родителя или родного брата данного элемента будет замечательным.

Прямо сейчас я просто перебираю клетки, пока не нахожу правильный, чего я бы хотел избежать. Я пробовал использовать 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) 

Элемент передается к блоку предикат является XCElementSnapshot, который не имеет staticTexts.

EDIT

Джеймс является правильным, containingType: идентификатор: метод отлично работает.

В быстры, это выглядит, как этот

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

Если идентификатор в подписи метода не соответствует свойству идентификатора элемента, а это просто очередной способ вы бы получить доступ к элементу с текстом в скобках ,

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

Я до сих пор путают о том, почему 'app.cells.staticTexts [«Мой текст»]' не работа для вас. Если строка «Мой текст» принадлежит какой-либо ячейке, снимок иерархии доступности вашего приложения найдет строку и сопоставит ее. Метод 'containsType: identifier:' создает 'XCUIElementQuery', и это не означает, что' XCUIElement' из этого запроса действительно существует в вашем приложении. – Citronex

+0

app.cells.staticTexts [] вернет мне статический текст, т. Е. UILabel, тогда как мне нужен UITableViewCell, а не метка – Alex

+0

. Исправьте меня, если я ошибаюсь, но делаю 'let cell = app.tables.cells.containingType (.StaticText, identifier:« My Text »)' создает XCUIElementQuery, а не XCUIElement, поэтому вы на самом деле не создаете экземпляр в вашем приложении, просто создавая запрос к элементу, который может даже не существовать. Если на консоли вы делаете «po app.tables.cells.containingType (.StaticText, identifier:« blah blah »)', он всегда будет возвращать объект, даже если он не существует, и вы не можете запускать какие-либо утверждения на XCUIElementQuery или даже методы .exist или .hittable, чтобы убедиться, что ваш элемент является реальным. – Citronex

ответ

9

Вы пробовали использовать containingType вместо containingPredicate? Кажется, это дает вам именно то, что вы ищете. Я не слишком хорошо знакомы с Swift, но в Objective C, это будет выглядеть следующим образом:

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

Я думал, что «идентификатор» в методе был свойством идентификатора элемента, спасибо за исправление – Alex

+0

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

+0

@JoeMasilotti Любая идея, почему подпись метода является идентификатором:, но это не соответствует свойству идентификатора на XCUIElement? Идентификатор XCUIElementQuery - это материал в скобках? – Alex

Смежные вопросы