Xcode 7, UI-Testing: работа с UITableView

Я столкнулся с одной проблемой, используя инфраструктуру UITesting для xCode, которую Apple внедрила на WWDC 2015. У меня есть UITableView, и эта таблица содержит много ячеек. Также у меня есть NSArray с названиями ячеек - если заголовок ячейки содержится в NSArray, эта ячейка должна быть задействована. Моя проблема в том, что я не могу прокручивать представление таблицы для конкретной ячейки, потому что в фреймворке нет метода работы с табличными представлениями, только проведите жесты (вниз, вверх).

Может кто-нибудь знает, как я могу использовать конкретную ячейку в виде таблицы? Или как я могу прокручивать представление таблицы для конкретной ячейки? Потому что, когда я вызываю метод tap() для ячейки, которые не видны на экране, ничего не происходит.

Спасибо заранее!

Ответы

Ответ 1

Это сработало для меня:

XCUIElementQuery *tablesQuery = self.app.tables;

XCUIElementQuery *cellQuery = [tablesQuery.cells containingType:XCUIElementTypeStaticText
                                                     identifier:@"Work"];

XCUIElementQuery* cell = [cellQuery childrenMatchingType:XCUIElementTypeStaticText];

XCUIElement* cellElement = cell.element;

[cellElement tap];

Для прокрутки таблицы используйте:

XCUIElementQuery *tablesQuery = self.app.tables;
XCUIElement* table = tablesQuery.element;
[table swipeUp];

Ответ 2

Быстрая версия для @Евгения Женя Гордин ответ: Обновлено для Swift 4

    let tablesQuery = app.tables
    let cellQuery = tablesQuery.cells.containing(.staticText, identifier: "MyCell")
    let cell = cellQuery.children(matching: .staticText)
    let cellElement = cell.element
    cellElement.tap()

    let tableElement = tablesQuery.element
    tableElement.swipeUp()

Ответ 3

Недавно я столкнулся с подобной проблемой. Опция, которую вы можете попробовать, - это поиск определенного заголовка для ячейки в таблице и нажмите на нее,

например: -

XCUIApplication().tables.staticTexts["identifier"].tap()

или

XCUIApplication().tables.cells.staticTexts["identifier"].tap()

Где "идентификатор" - это название ячейки, к которой вы пытаетесь нажать.

Надеюсь, это поможет!

Ответ 4

У меня была такая же точная проблема!

Сначала я просто нажимал на метку ячейки через запрос .staticTexts. Здесь другой способ, который работал у меня:

В cellForRowAtIndexPath, где вы создаете экземпляр ячеек, дайте им каждый уникальный идентификатор, в зависимости от их titleLabel или другого свойства.

Пример:

cell.accessibilityIdentifier = [NSString stringWithFormat:@"myCellType%@", cell.colorIdentifier];

Затем, вернувшись в тестовый класс, попробуйте следующее: (Немного подробный, потому что это помогло мне лучше понять)

XCUIApplication *application = [XCUIApplication new];
XCUIElementQuery *tablesQuery = application.tables;
XCUIElementQuery *allCellsQuery = tablesQuery.cells;
XCUIElementQuery *specificCellQuery = [cellQuery matchingIdentifier:@"myCellTypeSaffron"];
XCUIElement *cell = specificCellQuery.element;

[cell tap];

Конкретная ячейка решает, когда она взаимодействует.

Надеюсь, что это поможет!