Каждый раз, когда Apple выпускает новую версию XCode, мои тесты пользовательского интерфейса терпят неудачу

Каждый раз, когда Apple выпускает новую версию XCode, мои тесты пользовательского интерфейса терпят неудачу. А мне нужно целыми днями выяснять, что нужно изменить в тестах.

Есть ли что-то, что мне не хватает?

Пример:

       let tablesQuery = app.tables
    let passwordCellsQuery = tablesQuery.cells.containing(.staticText, identifier:"Password")
    passwordCellsQuery.children(matching: .secureTextField).element.tap()
    passwordCellsQuery.children(matching: .secureTextField).element.typeText("12345678")

    let memorableDateDdMmYyyyCellsQuery = tablesQuery.cells.containing(.staticText, identifier:"Memorable Date (dd/mm/yyyy)")
    memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 2).tap()
    memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 2).typeText("1")
    memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 0).tap()
    memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 0).typeText("2")
    memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 1).tap()
    memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 1).typeText("3")

На этот раз я получаю «Не удалось синтезировать событие: ни элемент, ни какой-либо потомок не имеют фокуса клавиатуры. Снимок отправки события: SecureTextField»

Дошло до того, что я боюсь любого нового выпуска XCode, поскольку он ВСЕГДА ломает все мои тесты пользовательского интерфейса, на этот раз это версия 11.4.1 (11E503a).

Модульные тесты ведут себя (к счастью).


person ThisIsNotMe    schedule 16.04.2020    source источник


Ответы (1)


Вы не должны придерживаться автоматически сгенерированного кода.

Пишите код теста и описание элементов сами — так тест будет более стабильным.

Постарайтесь сделать свой код проще — его будет легче поддерживать.

    let table = app.tables.element
    let passwordCell = table.cells["Password"]
    passwordCellsQuery.tapAndType("12345678")

    let dateCell = table.cells["Memorable Date (dd/mm/yyyy)"]
    dateCell.secureTextFields.element(boundBy: 2).tapAndType("1")
    dateCell.secureTextFields.element(boundBy: 0).tapAndType("2")
    dateCell.secureTextFields.element(boundBy: 1).tapAndType("3")
extension XCUIElement {
    func tapAndType(_ text: String) {
        tap()
        typeText(text)
    }
}
person Roman Zakharov    schedule 16.04.2020
comment
Большое спасибо, вы поставили меня на правильный путь. Используя идентификатор доступности, я могу получить доступ к полям ввода, например: app.secureTextFields[sxtPassword] txtPassword.tapAndType(12345678) - person ThisIsNotMe; 17.04.2020