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
Tiago Martinho
May 01, 2018
Technology
69
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Automated User Interface Testing
Tiago Martinho
May 01, 2018
More Decks by Tiago Martinho
See All by Tiago Martinho
Time Managment
tiagomartinho
0
53
BuddyBuild
tiagomartinho
0
46
Daily Journal
tiagomartinho
0
61
Everyone can code
tiagomartinho
0
45
Introduction to Machine Learning
tiagomartinho
0
54
Silicon Valley Tour
tiagomartinho
1
79
Swift Peer Lab - try! Swift Tokyo
tiagomartinho
0
100
Francigenr
tiagomartinho
1
40
Artusi Learning
tiagomartinho
0
55
Other Decks in Technology
See All in Technology
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
130
PM領域でのAI Agentの活用
lycorptech_jp
PRO
0
270
Hub & Spoke 環境のネットワークルーティングを分解してみる
tsuyataku
1
530
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
0
200
少人数データチームのDevin活用実践事例
runandy16
2
450
Genie Code ワークショップ 基礎編 / Genie-Code-Workshop-fundamental
databricksjapan
PRO
0
360
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
270
Tab5をRubyで動くパソコンにする
kishima
1
220
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
200
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
1.2k
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
250
Guerilla InnerSource in enterprises, during the AI hype
onenashev
PRO
0
150
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
900
Ethics towards AI in product and experience design
skipperchong
2
360
Ruling the World: When Life Gets Gamed
codingconduct
0
320
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Exploring anti-patterns in Rails
aemeredith
3
490
The Cost Of JavaScript in 2023
addyosmani
55
10k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Paper Plane (Part 1)
katiecoart
PRO
1
11k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
The Language of Interfaces
destraynor
162
27k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
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!