Обзор
iOS UI Testing — технология, представленная Apple на WWDC 2015. Как описывают её сами разработчики- это простой способ находить элементы пользовательского интерфейса, взаимодействовать с ними, а также проверять значения свойств этих элементов. Благодаря UI recording, вы можете максимально быстро настроить UI тестирование вашего проекта. Как это реализуется мы и рассмотрим в этой статье.
Прежде всего стоит отметить, что двумя китами UI тестирования являются XCTest и Accessibility:
- XCTest- фрэймворк, собственно, и позволяющий писать и запускать ваши тесты.
- Accessibility— технология, позволяющая людям с ограниченными возможностями получать такой же обширный опыт от использования iOS и OS X, как и другим людям. Ключевой особенностью является возможность использования функций универсального доступа во время UI тестирования.
UI-тесты базируются на трех классах:
- XCUIApplication (прокси вашего приложения)
- XCUIElement (сам элемент UI)
- XCUIElementQuery (запрос на поиск элемента UI)
Демо
Давайте перейдем к примеру.
Для того, что бы у вас появилась возможность тестировать ваш UI, необходимо добавить новый Target в проект: NEW -> Target -> iOS UI Testing Bundle.
Установив настройки, нажимаем finish.
Перейдя в класс DeliveryFromLocalsUITests.swift мы видим три метода:
- setUp()- вызывается перед вызовом каждого теста
- tearDown() — вызывается после каждого теста
- testExample() — заготовка под наш первый тест
Для того, чтобы приступить к записи теста, мы запускаем проект и оставляем курсор внутри testExample. После чего нажимаем на красный кружок в левом ниже углу.
Теперь мы вольны выполнять любые действия с нашим UI- XCode всё запомнит Xcode их запишет . Завершив необходимые действия, мы вновь нажимаем на красный кружок. Поздравляю, ваш первый тест написан.
NOTE: В Xcode7.1 был обнаружен баг, который проявился и в данном демо. Для его исправления необходимо выполнить действия, описанные здесь.
После внесения изменений, связанных с багом XCode, код нашего теста примет вид:
func testExample() {
let app = XCUIApplication() // создается прокси нашего приложения
app.tables.staticTexts["Paris"].tap() // находится элемент с названием Paris и выполняется тап по этому элементу
// выполняется поиск searchBar'а
let parisNavigationBar = app.navigationBars["Paris"]
let searchSearchField = parisNavigationBar.searchFields["Search"]
searchSearchField.tap()
// вводится строка поиска
searchSearchField.typeText("Onion Soup")
app.typeText("\r")
// вызывается метод forceTapElement для тапа по кнопке внтури ячейки
app.tables.cells.buttons["Buy 250$"].forceTapElement()
// тап по кнопке в алерте
app.alerts["Покупка"].buttons["Ok"].tap()
// тап по Cancel
parisNavigationBar.buttons["Cancel"].tap()
}
Теперь запустим наш тест. Обратите внимание, что для тестов создаётся отдельный Bundle.
Выполнив все действия, тест завершился успешно.
Демо вы можете скачать здесь.
А также обязательно просмотрите запись с WWDC15
Спасибо за внимание.
Автор снимка: @underbelly
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
-
GenRiH