Как протестировать UITextField в тестировании пользовательского интерфейса Xcode, когда текстовое поле пусто?

Я делаю UITest в Xcode. Когда я записываю свой тест, он работает нормально, но когда я запускаю тест, он выдает ошибку.

Вот строки кода, в которых возникает ошибка:

XCUIElement *clearTextTextField = [app.textFields containingType:XCUIElementTypeButton 
                                                      identifier:@"Clear text"].element;
[clearTextTextField typeText:@"sheffield"];

Ошибка говорит

Ошибка тестирования пользовательского интерфейса - для текстового поля не найдено совпадений

Я предполагаю, что это связано с тем, что в моем текстовом поле нет начальной строки, и тестер не может найти текстовое поле с начальной строкой "Clear Text".

Я посмотрел следующий урок на YouTube.

Код демонстратора работает нормально, потому что его текстовое поле имеет начальную строку. (По крайней мере, я думаю, что проблема в этом)

Есть ли способ заставить тест работать для пустых текстовых полей?


person Anuj Kalra    schedule 07.01.2016    source источник
comment
Установите Accessibility Identifier в Interface Builder, и он найдет его, даже если он пуст.   -  person chedabob    schedule 07.01.2016


Ответы (1)


Есть несколько способов сделать это.

  1. Если в текстовом поле есть текст-заполнитель, вы можете использовать текст-заполнитель, чтобы найти текстовое поле.

  2. Вы можете использовать метод elementBoundByIndex для получения текстового поля по индексу. т. е. если это единственное текстовое поле в приложении в то время, когда вы можете использовать

    XCUIApplication().textFields.elementBoundByIndex(0) 
    

чтобы получить текстовое поле. (или любой другой запрос, который вам нужен для получения этого конкретного текстового поля в то время)

  1. Вы можете установить идентификатор доступности в коде или в раскадровке, чтобы найти текстовое поле.

Удобно использовать вариант 2 перед настройкой идентификаторов доступности, если ваше текстовое поле всегда будет доступно для поиска с помощью одного и того же запроса. Кроме того, вариант 1 потерпит неудачу, если несколько текстовых полей имеют один и тот же текст-заполнитель одновременно, поэтому вариант 2 еще более привлекателен.

person Alex    schedule 07.01.2016
comment
В дополнение к # 2 вы можете использовать XCUIApplication().textFields.element, если на экране есть одно и только одно текстовое поле. - person Joe Masilotti; 07.01.2016