Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
UI-тесты для iOS. XCTest. Page Object. Local mo...
Search
Redmadrobot
November 22, 2019
Technology
2.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
UI-тесты для iOS. XCTest. Page Object. Local mock server
Redmadrobot
November 22, 2019
More Decks by Redmadrobot
See All by Redmadrobot
UI-автотесты: неочевидные очевидности в планировании и реализации
redmadrobot_msk
0
2.6k
No pain, no gain. Тестируем голосовые приложения
redmadrobot_msk
0
2.5k
«Модульность и оптимизация проекта»
redmadrobot_msk
0
1.8k
«Зачем нам OAuth и тем более 2.0: как настроить авторизацию сторонних сервисов в приложении»
redmadrobot_msk
0
1.8k
«Как спроектировать и задокументировать хорошую спецификацию API»
redmadrobot_msk
0
1.9k
Other Decks in Technology
See All in Technology
ai_cording_with_k8s_knowledge.pdf
mochizuki875
1
330
使いこなすために知っておきたい Azure SRE Agent アンチパターン
torumakabe
2
470
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
940
Jetson Orin Nanoとk3sとローカルLLMで音声文字起こしシステム作ってみた
y_sera15
0
120
契約書画像からの情報抽出に特化した視覚接地モデルを育てる話
sansantech
PRO
1
160
Kiro Crewをはじめよう
kizawa2020
1
140
味覇で作るパスタが美味い - 20261001_yabaubuki.dev
livesense
PRO
0
120
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
2
830
hackers_champloo_2026_tidb
makocchi
0
110
予測不能な実行エージェントを安全にサクッと試せるサンドボックス環境の話
sansantech
PRO
1
140
IoTデバイスを繋げるプロトコルMatterをAndroidで使用する方法
harutiro
0
140
AIは爆速なのに、私が詰まっていた話 ― 音声入力と鳴くマスコットでボトルネックを削る
yama3133
0
600
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Color Theory Basics | Prateek | Gurzu
gurzu
1
480
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
700
Unsuck your backbone
ammeep
672
58k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
400
Designing Powerful Visuals for Engaging Learning
tmiket
1
600
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Prompt Engineering for Job Search
mfonobong
0
500
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
590
Transcript
UI-тесты для iOS. XCTest. Page Object. Local mock server
2 Что такое XCTest? XCTest - фреймворк для написания тестов,
интегрированный в Xcode Unit ui perfomance
3 1. Не нужно устанавливать дополнительные компоненты. Достаточно установить Xcode
версии 7 или выше 2. Скорость 3. Test Recorder 4. Поддержка tvOS Почему XCTest?
XCTest API
5 XCUIApplication Класс, являющийся прокси между тестами и приложением
6 e.g. let app = XCUIApplication(bundleIdentifier:"com.apple.MobileAddressBook") ///Запустить приложение “Контакты” app.launch()
///Убить приложение “Контакты” app.terminate()
7 Tests Simulator Device App Я, у которого нет доступа
к коду приложения XCUIApplication(bundleIdentifier: "app.bundle.id")
8 XCUIElement Класс, который обеспечивает взаимодействие с UI-элементами на экране
приложения
9 1. Label 2. Accessibility identifier Как обратиться к элементу
из теста?
10
11 Текст /// Заголовок экрана app.staticTexts["title"]
12 Текстовое поле /// Поле логина app.textFields["email"]
13 Защищенное поле /// Поле пароля app.secureTextFields["password"]
14 Кнопка /// Кнопка "Войти" app.buttons["login"]
15 1. XCTAssert (XCTAssertTrue) / XCTAssertFalse 2. XCTAssertEqual / XCTAssertNotEqual
3. XCTAssertNil / XCTAssertNotNil Asserts
16 e.g. XCTAssert(loginButton.exists) /// true XCTAssertFalse(loginButton.isEnabled) /// true
Page Object
18 Что такое Page Object? Список элементов экрана и действий,
которые совершаются над этими элементами
19 e.g. class LoginScreen { /// Заголовок экрана var title:
XCUIElement { return app.staticTexts["title"] } /// Поле логина var loginField: XCUIElement { return app.textFields["email"] } /// Поле пароля var passwordField: XCUIElement { return app.secureTextFields["password"] } /// Кнопка "Войти" var loginButton: XCUIElement { return app.buttons["login"] } /// Кнопка Помощь var helpButton: XCUIElement { return app.buttons["ic16DpInfoPurple"] } func fillLogin(login: String) -> LoginScreen { loginField.tap() loginField.typeText(login) return self } func fillPassword(password: String) -> LoginScreen { passwordField.tap() passwordField.typeText(password) return self } }
20 UI-test case Test Base App Proxy for tests Common
test functions Screen Base Common screen elements Page Objects
Local mock server. Catbird
22 1. Надежность 2. Скорость 3. Независимость от бэка Почему
локальный мок?
23 1.Локальный мок 2.Статичный мок 3.Перезапись моков Catbird
24 APPLICATION Tests API Тесты без мока
25 Tests Application API Тесты с моком
26 https://github.com/RedMadRobot/catbird Пользуемся и ставим звездочки
Result
28 func testInvalidCredentials() { addMock(LoginMock.auth_401_invalid_credentials) step(“Попробовать авторизоваться") { loginScreen.login(login: “
[email protected]
",
password: “1234567890") assertion("Проверить, что отобразилась ошибка") { assertElementAppears(loginScreen .errorInvalidCredentials) } } } Test example
Спасибо за внимание!