Обзор

iOS UI Testing — технология, представленная Apple на WWDC 2015. Как описывают её сами разработчики- это простой способ находить элементы пользовательского интерфейса, взаимодействовать с ними, а также проверять значения свойств этих элементов. Благодаря UI recording, вы можете максимально быстро настроить UI тестирование вашего проекта. Как это реализуется мы и рассмотрим в этой статье.

Прежде всего стоит отметить, что двумя китами UI тестирования являются XCTest и Accessibility:

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

UI-тесты базируются на трех классах:

  • XCUIApplication (прокси вашего приложения)
  • XCUIElement (сам элемент UI)
  • XCUIElementQuery (запрос на поиск элемента UI)

Демо

Давайте перейдем к примеру.

Для того, что бы у вас появилась возможность тестировать ваш UI, необходимо добавить новый Target в проект: NEW -> Target -> iOS UI Testing Bundle.

Установив настройки, нажимаем finish.

Перейдя в класс DeliveryFromLocalsUITests.swift мы видим три метода:

  1. setUp()- вызывается перед вызовом каждого теста
  2. tearDown() — вызывается после каждого теста
  3. 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

    спасибо, просто и понятно