Автоматизация пользовательского интерфейса iOS: ошибка утверждения текстового поля (выделена красным цветом) через CTAssertTrue

#swift #ui-automation #assert #ios-ui-automation

#swift #пользовательский интерфейс-автоматизация #утверждать #ios-ui-автоматизация

Вопрос:

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

Как мы пытались решить проблему:

  • через функцию «waitForText»:
 func waitForText(name: String) {
        waitForElementToAppear(app.staticTexts[name])
    }
 

Функция «waitForText» — это краткий пример реализации «waitForElementToAppear»:

 func waitForElementToAppear(_ element: XCUIElement) -> Bool{
    let predicate = NSPredicate(format: "exists == true")
    let expectat = expectation(for: predicate, evaluatedWith: element, handler: nil)
    let result = XCTWaiter().wait(for: [expectat], timeout: 20)
    return result == .completed
} 
 
  • через функцию «waitForTextShort»:
 func waitForTextShort(name: String) {
        waitForElementToAppearShort(app.staticTexts[name])
    }
 

Функция «waitForTextShort» — это краткий пример реализации «waitForElementToAppearShort»:

 func waitForElementToAppearShort(_ element: XCUIElement) -> Bool{
        let predicate = NSPredicate(format: "exists == true")
        let expectat = expectation(for: predicate, evaluatedWith: element, handler: nil)
        let result = XCTWaiter().wait(for: [expectat], timeout: 5)
        return result == .completed
    }
 
  • через CTAssertTrue:
 CTAssertTrue (app.staticTexts.element (match: .any, id: "Enter your email address"). exists)
 

Поиск элементов с помощью регистратора тестов пользовательского интерфейса отображает только поле ввода, но не обязательное поле.

Выгрузка элементов через po app.StaticTexts во время выполнения теста также не дает желаемых результатов:

  StaticText, {{16.0, 130.0}, {288.0, 16.5}}, tag: "Enter your email address"
 

Используемые локаторы:

 app.tables/*@START_MENU_TOKEN@*/.staticTexts["Enter your email address"]/*[[".cells.staticTexts["Enter your email address"]",".staticTexts["Enter your email address"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.tap()
 

Ответ №1:

Решаемая задача: просто попросите вашего разработчика добавить некоторый идентификатор к требуемому элементу — и легко подтвердите его 🙂