Xcode UITest прокручивается к нижней части UITableView - PullRequest
0 голосов
/ 22 января 2019

Я пишу тестовый пример пользовательского интерфейса, в котором мне нужно выполнить действие, а затем на текущей странице прокрутить единственный UITableView до конца, чтобы проверить, отображается ли определенный текст внутри последней ячейки в UITableView.

Сейчас я могу думать только о том, чтобы прокрутить его с помощью app.tables.cells.element(boundBy: 0).swipeUp(), но если ячеек слишком много, он не прокручивается полностью до самого дна.И число ячеек в UITableView не всегда одинаково, я не могу провести более одного раза, потому что в таблице может быть только одна ячейка.

1 Ответ

0 голосов
/ 04 февраля 2019

Один из способов сделать это - получить последнюю ячейку из tableView. Затем запустите цикл while, который прокручивает и проверяет, находится ли ячейка isHittable между каждой прокруткой. Как только определено, что isHittable == true, элемент может быть утвержден против. https://developer.apple.com/documentation/xctest/xcuielement/1500561-ishittable

Это будет выглядеть примерно так (быстрый ответ):

  1. В вашем файле XCTestCase напишите запрос для идентификации таблицы. Затем последующий запрос для определения последней ячейки.
let tableView = app.descendants(matching: .table).firstMatch
guard let lastCell = tableView.cells.allElementsBoundByIndex.last else { return }
  1. Используйте цикл while, чтобы определить, находится ли ячейка isHittable / на экране. Примечание: isHittable полагается на свойство userInteractionEnabled ячейки, установленное в true
//Add in a count, so that the loop can escape if it's scrolled too many times
let MAX_SCROLLS = 10
var count = 0
while lastCell.isHittable == false && count < MAX_SCROLLS {
    apps.swipeUp()
    count += 1
}
  1. Проверьте текст ячейки, используя свойство label, и сравните его с ожидаемым текстом.
//If there is only one label within the cell
let textInLastCell = lastCell.descendants(matching: .staticText).firstMatch
XCTAssertTrue(textInLastCell.label == "Expected Text" && textInLastCell.isHittable)
...