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
65
0
Share
Automated User Interface Testing
Tiago Martinho
May 01, 2018
More Decks by Tiago Martinho
See All by Tiago Martinho
Time Managment
tiagomartinho
0
45
BuddyBuild
tiagomartinho
0
41
Daily Journal
tiagomartinho
0
57
Everyone can code
tiagomartinho
0
38
Introduction to Machine Learning
tiagomartinho
0
50
Silicon Valley Tour
tiagomartinho
1
71
Swift Peer Lab - try! Swift Tokyo
tiagomartinho
0
91
Francigenr
tiagomartinho
1
37
Artusi Learning
tiagomartinho
0
49
Other Decks in Technology
See All in Technology
15年メンテしてきたdotfilesから開発トレンドを振り返る 2011 - 2026
giginet
PRO
2
260
遊びで始めたNew Relic MCP、気づいたらChatOpsなオブザーバビリティボットができてました/From New Relic MCP to a ChatOps Observability Bot
aeonpeople
1
150
OCI技術資料 : 証明書サービス概要
ocise
1
7.2k
LLMに何を任せ、何を任せないか
cap120
11
6.9k
OCI技術資料 : ロード・バランサ 概要 - FLB・NLB共通
ocise
4
27k
AWSで2番目にリリースされたサービスについてお話しします(諸説あります)
yama3133
0
110
TUNA Camp 2026 京都Stage ヒューリスティックアルゴリズム入門
terryu16
0
660
Embeddings : Symfony AI en pratique
lyrixx
0
440
スケーリングを封じられたEC2を救いたい
senseofunity129
0
130
ThetaOS - A Mythical Machine comes Alive
aslander
0
230
AIにより大幅に強化された AWS Transform Customを触ってみる
0air
0
270
会社紹介資料 / Sansan Company Profile
sansan33
PRO
16
410k
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
230
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
700
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.5k
Technical Leadership for Architectural Decision Making
baasie
3
300
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
400
Building Adaptive Systems
keathley
44
3k
The SEO identity crisis: Don't let AI make you average
varn
0
430
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
700
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Site-Speed That Sticks
csswizardry
13
1.1k
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!