iOS Тест пользовательского интерфейса: ожидание сбоя в существовании для динамически добавленной кнопки - PullRequest
0 голосов
/ 25 февраля 2020

Мое приложение выполняет автоматическое обновление и инициализацию SDK при запуске. По завершении я добавляю кнопку, чтобы проверить, завершено ли автоматическое обновление и инициализация в моем тесте пользовательского интерфейса:

let hiddenButton = UIButton(frame: CGRect(x: 0, y: 0, width: 1, height: 1))
hiddenButton.setTitle("databaseUpdated", for: .normal)
hiddenButton.accessibilityIdentifier = "databaseUpdated"
self.view.addSubview(hiddenButton)

Я пробовал следующие строки, чтобы проверить это, но всегда происходит сбой:

XCTAssertTrue(app.descendants(matching: .button)["databaseUpdated"].waitForExistence(timeout: 60))
XCTAssertTrue(app.children(matching: .button)["databaseUpdated"].waitForExistence(timeout: 60))
XCTAssertTrue(app.otherElements["databaseUpdated"].waitForExistence(timeout: 60))
XCTAssertTrue(app.buttons["databaseUpdated"].waitForExistence(timeout: 60))

Я подтвердил, что моя кнопка находится в иерархии представления, используя Debug View Hierarchy:

enter image description here

ОБНОВЛЕНИЕ

Я решил добавить кнопку в viewDidLoad с другим идентификатором и обновить ее при инициализации SDK:

private let button = UIButton(frame: CGRect(x: 0, y: 0, width: 1, height: 1))

override public func viewDidLoad() {
    super.viewDidLoad()
    button.isAccessibilityElement = true
    button.accessibilityTraits = .button
    button.accessibilityIdentifier = "initial"
    view.addSubview(button)
}

при инициализации SDK для нее установлено:

button.accessibilityIdentifier = "databaseUpdated"

и вот что я вижу, когда проверяю кнопку в отладчике вида:

accessibility attributes

все еще тест не может найти его.

ОБНОВЛЕНИЕ 2

Я могу найти кнопку с помощью инспектора специальных возможностей:

inspector

1 Ответ

0 голосов
/ 27 февраля 2020

Проверьте, виден ли добавляемый вами ViewController при выполнении запроса. Если не ваш запрос не удастся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...