#ios #swift #xcode #xcode-ui-testing
#iOS #swift #xcode #xcode-ui-тестирование
Вопрос:
Я хотел бы иметь возможность проверить, отображается ли подстрока на панели навигации в тесте пользовательского интерфейса.
Например, если заголовок панели навигации — «Аренда свойств», я могу сопоставить его следующим образом:
XCTAssert(XCUIApplication().staticTexts["Rent Properties"].exists)
Однако у этого есть две проблемы:
- Если текст отсутствует в навигационной панели, он все равно будет соответствовать
- Это точное совпадение, тогда как я хочу иметь возможность сопоставлять подстроку, такую как «Аренда»
Как это можно сделать?
Ответ №1:
Для сопоставления аренды подстроки вы можете использовать приведенный ниже код:
XCUIApplication().staticTexts.matchingPredicate(NSPredicate(format: "label CONTAINS 'Rent'")).elementBoundByIndex(0)
//it may contains one or more element with substring Rent.
//you have to find out which element index you want in debug mode using p print() options.
Для первого варианта, безусловно, должна быть разница, пока элемент отображается или не отображается. вы должны выяснить это, используя опцию печати po или p в режиме отладки.
Например, может быть, что количество отличается, или элемент не доступен для просмотра, или так далее….
вы можете попытаться использовать :
let app = XCUIApplication()
XCTAssert(app.staticTexts["Rent Properties"].exists)
or
let app = XCUIApplication()
app.staticTexts["Rent Properties"].hittable
or
let app = XCUIApplication()
app.staticTexts["Rent Properties"].enabled
or
app.staticTexts.matchingIdentifier("Rent Properties").count
//take count while showing the text and take the count while not showing the text
Ответ №2:
Попробуйте это.
1. Получите статический текст из элемента вместо получения из приложения.
Eg:`XCUIApplication().navigationBars["Rent Properties"].staticTexts["Rent Properties"]`
- Используйте
elementMatchingPredicate
илиexpectationForPredicate
для сопоставления элемента.
Полезная ссылка: http://masilotti.com/ui-testing-шпаргалка /