2015-12-03 16 views
10

Tôi đang làm việc với UITableViews và tôi muốn tìm ô tương ứng với điều khiển hoặc văn bản tĩnh bên trong ô.Tìm cha mẹ hoặc anh chị em với kiểm tra giao diện người dùng Xcode

Nói chung, cách tốt nhất để tìm bất kỳ phụ huynh hoặc anh chị em nào của một yếu tố nhất định sẽ là điều tuyệt vời để biết.

Hiện tại, tôi chỉ đang lặp qua các ô cho đến khi tôi tìm thấy chính xác, mà tôi muốn tránh. Tôi đã thử sử dụng app.tables.cells.containingPredicate, nhưng chưa có bất kỳ may mắn nào.

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

Phần tử được chuyển đến khối vị ngữ là XCElementSnapshot không có staticTexts.

EDIT

James là chính xác, containingType: định danh: Phương pháp hoạt động tuyệt vời.

Trong nhanh chóng, nó trông như thế này

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

Trường hợp nhận dạng trong chữ ký phương pháp không tương ứng với tài sản định danh của phần tử, chứ không phải nó chỉ đơn giản là cách thông thường bạn sẽ truy cập vào một phần tử bằng văn bản trong ngoặc .

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

Tôi vẫn còn nhầm lẫn về lý do tại sao 'app.cells.staticTexts [" My Text "]' không làm việc cho bạn. Nếu chuỗi "Văn bản của tôi" thuộc về bất kỳ ô nào, ảnh chụp nhanh của phân cấp trợ năng của ứng dụng sẽ tìm chuỗi và khớp với chuỗi đó. Phương thức 'containsType: identifier:' tạo một 'XCUIElementQuery' và điều này không có nghĩa là' XCUIElement' từ truy vấn này thực sự tồn tại trong ứng dụng của bạn. – Citronex

+0

app.cells.staticTexts [] sẽ trả lại cho tôi một văn bản tĩnh, tức là UILabel, trong khi tôi cần UITableViewCell, không phải nhãn – Alex

+0

Tôi hiểu. Sửa tôi nếu tôi sai, nhưng làm 'let cell = app.tables.cells.containingType (.StaticText, identifier:" My Text ")' đang tạo một XCUIElementQuery, không phải là một XCUIElement, vì vậy bạn không thực sự khởi tạo một trong ứng dụng của bạn, chỉ cần tạo truy vấn đến một phần tử có thể không tồn tại. Nếu trên console bạn làm 'po app.tables.cells.containingType (.StaticText, identifier:" blah blah ")' nó sẽ luôn trả về một đối tượng ngay cả khi nó không tồn tại, và bạn không thể chạy bất kỳ xác nhận nào trên một XCUIElementQuery, hoặc thậm chí các phương thức .exist hoặc .hittable để xem phần tử của bạn có phải là thực hay không. – Citronex

Trả lời

9

Bạn đã thử sử dụng containingType thay vì containingPredicate? Nó dường như cung cấp cho bạn chính xác những gì bạn đang tìm kiếm. Tôi không quá quen thuộc với Swift, nhưng trong Mục tiêu C, nó sẽ trông như thế này:

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

Tôi nghĩ 'số nhận dạng' trong phương thức là thuộc tính số nhận dạng của phần tử, nhờ chỉnh sửa – Alex

+0

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

+0

@JoeMasilotti Bất kỳ ý tưởng nào chữ ký phương thức là định danh:, nhưng điều đó không tương ứng với thuộc tính định danh trên XCUIElement? Mã định danh XCUIElementQuery là công cụ trong ngoặc? – Alex

Các vấn đề liên quan