Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Four Tips for More Testable UI
Search
Jim Holmes
March 17, 2019
Technology
0
51
Four Tips for More Testable UI
Quick talk given at the 2019 Microsoft MVP summit during the ALM group's MVP2MVP sessions.
Jim Holmes
March 17, 2019
Tweet
Share
More Decks by Jim Holmes
See All by Jim Holmes
Adapting to Change in Software Delivery
jimholmes
0
73
Public_Speaking.pdf
jimholmes
0
95
Trusted System Boundaries
jimholmes
0
92
What's Worse? Zombies or Brittle UI Tests?
jimholmes
0
110
Odd Parallels Between Weightlifting and Software Delivery
jimholmes
0
56
Is Quality The Bottleneck?
jimholmes
0
130
Don't Fear Leadership
jimholmes
0
91
Intro To TDD
jimholmes
1
79
Honor Flight #20 (Bay Area) Recap
jimholmes
0
130
Other Decks in Technology
See All in Technology
[2025-12-12]あの日僕が見た胡蝶の夢 〜人の夢は終わらねェ AIによるパフォーマンスチューニングのすゝめ〜
tosite
0
110
日本の AI 開発と世界の潮流 / GenAI Development in Japan
hariby
1
120
AWS Security Agentの紹介/introducing-aws-security-agent
tomoki10
0
380
Building Serverless AI Memory with Mastra × AWS
vvatanabe
0
240
Fashion×AI「似合う」を届けるためのWEARのAI戦略
zozotech
PRO
2
1.1k
1人1サービス開発しているチームでのClaudeCodeの使い方
noayaoshiro
2
550
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
1
360
AIエージェント開発と活用を加速するワークフロー自動生成への挑戦
shibuiwilliam
4
770
ExpoのインダストリーブースでみたAWSが見せる製造業の未来
hamadakoji
0
180
AgentCore BrowserとClaude Codeスキルを活用した 『初手AI』を実現する業務自動化AIエージェント基盤
ruzia
7
880
AgentCoreとStrandsで社内d払いナレッジボットを作った話
motojimayu
1
640
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1.1k
Featured
See All Featured
Applied NLP in the Age of Generative AI
inesmontani
PRO
3
1.9k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
38
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
0
26
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
130
WCS-LA-2024
lcolladotor
0
380
Abbi's Birthday
coloredviolet
0
3.6k
Designing for Performance
lara
610
69k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
0
130
Transcript
Testable UIs
Or: How to help your test automation folks drink less
[email protected]
@aJimHolmes
Fortune 10 client Java 6 Enterprise-ready components HP build and
SCM tools “What’s a unit test?”
Thank you ET
Generalized Talk Ideas apply to all UI and automation tools
https://github.com/jimholmes/ Demo-Site
Two main problems in all UI testing
Finding Stuff
Async
Also SharePoint
Finding stuff == Locators
For Web, prefer: IDs CSS/JQuery-ish Name Custom Attributes
As a last resort: XPath
None
Create Good Locators
0) Own Your HTML
None
None
None
FindElement.ById(“grid”)
None
None
1) Understand your controls / frameworks
None
None
None
FindElement.ByCss( “some big stupid CSS string”)
Someone changes style
None
None
None
FindElement.ById( “update-btn”)
2) Tweak dynamic data
None
Find elements by text content. Might not be granular enough.
None
None
No useful attributes
None
None
None
ID is position-based. Data changes, IDs change.
None
We own the code!
Is there some useful data in your objects?
None
None
None
None
None
FindElement.ById( contains(“Cobb”) )
“Name” isn’t all that useful. Got contract numbers? Project IDs?
Other stuff? Find good metadata!
3) Make complex async less painful
None
SharePoint
wait until expected condition 1 wait until expected condition 2
IF SOMETHING wait until expected condition 3 IF SOMETHING ELSE wait until expected condition 4 FINALLY wait until expected condition 342
We own the code!
Create “flags” when async is complete
None
None
None
None
None
Wait until flags.div(responseType=create) exists
0) Add static IDs 1) Tweak controls 2) Use data
for locators 3) Build flags/latches for complex async
None
https://github.com/jimholmes/ Demo-Site