Как создать запрос XCUIElement для последнего UITableViewCell в UITableView? - PullRequest
0 голосов
/ 08 октября 2019

Я создаю XCTestCase. Для одного из тестовых методов, назовите его func testConfirmLastCellContent() { ... }, я хочу подтвердить, что существует staticText дочерний элемент со значением "98765" в пределах UITableViewCell (я помещаю текстовое значение в textLabel.textсвойство ячейки табличного представления). Над этой ячейкой перечислены 4 ячейки табличного представления. Каждый из них имеет String значение "12345" для своих textLabel.text, за исключением второй ячейки, которая имеет то же текстовое значение, что и последняя: "98765".

Значения Stringдля свойства textLabel.text каждой ячейки она выглядит следующим образом:

  • "12345"
  • "98765"
  • "12345"
  • "12345"
  • "98765"

Эти значения textLabel.text являются визуальными подэлементами only в ячейках табличного представления соответственно.

Если я создам простое XCUIElementQuery вроде так ...

let staticTextForLastCell = XCUIApplication().staticTexts["98765"]

... и утверждаю его существование как true вот так ...

XCTAssert(staticTextForLastCell.exists == true)

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

Пока что я не могу найти класс / метод XCTest, чтобы получить последний последний UITableViewCell и запросего детали.

Моя цель - получить последнюю ячейку и подтвердить, что ее значение textLabel.text - это то, чего я ожидаю. Как я могу это сделать?

Примечание: Я не могу добавлять / вычитать / изменять текстовые, визуальные и т. Д. Элементы ни в одной из ячеек табличного представления.

Edit:

Следует также отметить, что UITableViewCell s генерируются динамически тестируемым приложением. Поэтому я не могу tag их или заполнить свойство accessibilityIdentifier для textLabel или ячейки.

Моя настройка следующая:

  • Операционная система : macOS Mojave 10.14.6
  • IDE : Xcode 10.3
  • SDK : iOS 12.4 SDK
  • Развертывание цели : iOS 12.0
  • Язык : Swift 5

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

Вы, вероятно, должны добавить расширение к XCUIElementQuery

extension XCUIElementQuery {
    var lastMatch : XCUIElement {return self.element(boundBy: self.count - 1)}
}

Тогда вы можете утверждать свою клетку следующим образом:

XCTAssertEqual(app.cells.lastMatch.staticTexts.element.label, 
               "98765", 
               "Unexpected text of the last cell")
1 голос
/ 16 октября 2019

Вот кое-что, что работает ...

let app = XCUIApplication()
let cells = app.cells
let lastCell = cells.element(boundBy: cells.count - 1)
let textOfLastCell = lastCell.staticTexts["98765"]
XCTAssert(textOfLastCell.exists)

Примечание : в ответе Smart Monkey использовалось расширение, которое может быть целесообразным. Выше приведен более линейный способ.

Редактировать : Ранее я заявлял, что не могу заставить его работать без запроса tables до запроса cells. работает без запроса tables.

Редактировать : изменено XCTAssert(textOfLastCell.exists == true) на XCTAssert(textOfLastCell.exists) на основе комментария от Криса. Немного чище.

...