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
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
220
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
740
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
8
840
20260912_スクラムにジェネラリストは必要か
ryugen04
0
400
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
1
840
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
180
2026_devsumi_ozono.pdf
o3
3
470
2026/09/10 Spring Bootから Jakarta EE/MicroProfileへの移行
megascus
0
360
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
500
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
4
1.2k
Geolonia の開発現場における AIの活用について
miya0001
0
100
range over func 2年間の軌跡 Issue #56413 はGoのエコシステムをどう変えたか
ryujicre8ive
0
170
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
230
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
690
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
The SEO identity crisis: Don't let AI make you average
varn
0
560
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
330
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
900
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
Спасибо за внимание!