Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Automated User Interface Testing
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Tiago Martinho
May 01, 2018
Technology
0
64
Automated User Interface Testing
Tiago Martinho
May 01, 2018
Tweet
Share
More Decks by Tiago Martinho
See All by Tiago Martinho
Time Managment
tiagomartinho
0
44
BuddyBuild
tiagomartinho
0
40
Daily Journal
tiagomartinho
0
55
Everyone can code
tiagomartinho
0
37
Introduction to Machine Learning
tiagomartinho
0
47
Silicon Valley Tour
tiagomartinho
1
70
Swift Peer Lab - try! Swift Tokyo
tiagomartinho
0
90
Francigenr
tiagomartinho
1
36
Artusi Learning
tiagomartinho
0
47
Other Decks in Technology
See All in Technology
Webhook best practices for rock solid and resilient deployments
glaforge
1
280
超初心者からでも大丈夫!オープンソース半導体の楽しみ方〜今こそ!オレオレチップをつくろう〜
keropiyo
0
110
Digitization部 紹介資料
sansan33
PRO
1
6.8k
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.7k
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
240
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/jat08
thara0402
0
180
インフラエンジニア必見!Kubernetesを用いたクラウドネイティブ設計ポイント大全
daitak
1
360
日本の85%が使う公共SaaSは、どう育ったのか
taketakekaho
1
150
今日から始めるAmazon Bedrock AgentCore
har1101
4
410
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.3k
GitLab Duo Agent Platform × AGENTS.md で実現するSpec-Driven Development / GitLab Duo Agent Platform × AGENTS.md
n11sh1
0
130
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.2k
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
0
270
Test your architecture with Archunit
thirion
1
2.1k
Are puppies a ranking factor?
jonoalderson
1
2.7k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
420
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
Exploring anti-patterns in Rails
aemeredith
2
250
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
450
Paper Plane (Part 1)
katiecoart
PRO
0
4.1k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Transcript
Tiago Martinho @martinho_t tiagomartinho Automated User Interface Testing
None
+ User POV Black Box Testing Offload Testers
- Flaky Expensive Slow
Unit Integration UI
100x 10x x
None
Anti-Pattern
func testLogin() { application.launch() let loginButton = application.buttons["login"] loginButton.tap() wait(for:
“label") label = application.labels[“label”] assertEqual("42", label.text) }
Objectives Robust Easy to write Easy to read
AAA Arrange Act Assert
UI Driver Application Acceptance Test
UI Driver Application Model Acceptance Test
Acceptance Test No tap, click, swipe No UI references Clear
state and asserts
func testDeleteAllChannels() { model.enforce(state: .notEmptyChannelsList) model.deleteAllChannels() model.assert(condition: .emptyChannelsList) }
func testDeleteAllChannels() { model.enforce(state: .notEmptyChannelsList) model.deleteAllChannels() model.assert(condition: .emptyChannelsList) }
func testDeleteAllChannels() { model.enforce(state: .notEmptyChannelsList) model.deleteAllChannels() model.assert(state: .emptyChannelsList) }
UI Driver Application Model Acceptance Test
Application Model Represents our App Does not depend on the
UI testing Framework
None
None
None
UI Driver Application Model Acceptance Test
UI Driver Drives the UI Knows nothing about our app
Can be replaced
None
None
None
+ Knowledge Base Short and Robust Tests Framework Independent
Tiago Martinho @martinho_t tiagomartinho Thank you!