SlideShare a Scribd company logo
End-to-end browser testing 

with a manageable number of annoyances
— Steven Noble, 2019
About me
• Creating software since Dick
Smith added a Basic cartridge
and cassette data storage to
the Wizard

• Working in the digital
economy since 1994:
journalism, PR, marketing,
consulting, research, etc

• React/Node software
developer with GorillaStack:
we’re like IFTTT for your
enterprise cloud infrastructure
End-to-end browser testing: 

the theory
• Confirm that your services and units work
together as required

• Test your app the way your users test it —
through the user interface

• Spend less time on manual testing
End-to-end browser testing: 

the reality
…that’s all true, but…

• It’s really slow

• It’s hard to debug

• It can be flakey

…so here’s how to get those benefits with a
manageable number of annoyances
But first, your stack
Headless 

web 

browser
Chrome 

only
Chrome

Firefox

etc
Browser
automation 

driver
Chromedriver
Chromedriver 

Marionette (Firefox)

etc
Browser
automation
server
DevTools

protocol
Selenium
Browser

testing

framework
Google

Puppeteer
Webdriver.io
Nightwatch

TestCafe

etc
It looks like this
browser.url('/login');

$('#login-form').waitForVisible();
$('#username').setValue(WDIO_USERNAME);

$('#password').setValue(WDIO_PASSWORD);

$('#login').click();
$('#dashboard').waitForVisible();
expect(browser.getUrl()).to.equal('/dashboard');

expect($('h1')).getText().to.equal('Dashboard');

expect($('#header').getText())

.to.include(`Welcome ${WDIO_USERNAME}`);
TIP: Employ software developers,
not automation testers
So you can quickly
tell whether a failure
is a bug in the app
or a bug in the test
So developers will
write or maintain tests
whenever they write
or maintain features
aka, be GorillaStack, not the ABC
TIP: Employ software developers,
not automation testers
• So you can define semantic selectors:

• Testing your own code:

• button#reset-password
• Testing someone else's code:

• //div[@class="col-md-12"]/
form[@id="login"]/button[2]
TIP: Employ software developers,
not automation testers
So you can change the behaviour of the app being
tested:

• Disable Google Analytics, Rollbar, Intercom etc

• Use test keys for Google Recaptcha, Stripe, etc

• Execute next steps immediately instead of
sending them to a message queue

• Load/unload database fixtures
TIP: Lock down Google Chrome
If you are just using the Google Chrome binary that you
use for everyday browsing, then you are liable to find:

• Test behaviour changes randomly after automatic
Chrome version updates

• Test behaviour differs on different machines that are
running different versions of Chrome

Instead, use a Docker container or similar that lets you
lock your tests to a specific version of Chrome
TIP: If you Dockerise Selenium, don’t
treat the container as a black box
• If you get weird Selenium errors in your tests, start by
dropping down a level:

• Visit http://localhost:4444/wd/hub/static/resource/
hub.html

• Send commands to Selenium directly via its HTTP
API

• You’ll probably see errors related to a known
issues with the official SeleniumHQ containers,
with possible solutions in GitHub issues
TIP: If you Dockerise Selenium, don’t
treat the container as a black box
• If not, drop down a second level:

• docker exec -it <constainerID> 

/bin/bash
• Send commands directly to Selenium via its
CLI

• You’ll probably see errors related to a known
issues with the official SeleniumHQ containers,
with possible solutions in GitHub issues
TIP: Create forgiving pipelines 

in your CI
For example, in Buildkite, we:

• Run the WDIO step after all other steps, as they all
provide useful feedback more quickly

• Make the WDIO step mandatory when merging a
feature branch in develop

• Make the WDIO step optional in all other scenarios

• Make good use of the retry attributes in
pipeline.yml
Webdriver.io
Webdriver.io
Webdriver.io

More Related Content

PPTX
How to build webapps with tools
PDF
Selenium Israel Meetup
PDF
DCAST Meetup - Washington, DC Feb 2016
PDF
Belfast Selenium Meetup
PPTX
Helpful Automation Techniques - Selenium Camp 2014
PPTX
anatomy of a crash
PPTX
Diagnostic Tips and Tricks for Windows Store Applications using Visual Studio...
PDF
Managing Modules Without Going Crazy (NPW 2007)
How to build webapps with tools
Selenium Israel Meetup
DCAST Meetup - Washington, DC Feb 2016
Belfast Selenium Meetup
Helpful Automation Techniques - Selenium Camp 2014
anatomy of a crash
Diagnostic Tips and Tricks for Windows Store Applications using Visual Studio...
Managing Modules Without Going Crazy (NPW 2007)

What's hot (20)

PDF
JUST EAT: Tools we use to enable our culture
PPTX
Intro to Netflix's Chaos Monkey
PPTX
Selenium and Appium Training from Sauce Labs
PPTX
Sauce Labs for Visual Studio Team Services & TFS
PPTX
Release the Monkeys ! Testing in the Wild at Netflix
PDF
Task runners + theming automating your workflow
PDF
Intro to Electron - Creating Desktop Applications with HTML5
PDF
Coding with jetpack
DOCX
Installing and setting up eclipse java projects
PPTX
Saving Time By Testing With Jest
PPTX
Moving From a Selenium Grid to the Cloud - A Real Life Story
PDF
presentation-chaos-monkey
PDF
DjangoZoom lightning talk
PPTX
Automated Testing with Cucumber, PhantomJS and Selenium
PDF
Progressive Enhancement using WSGI
PDF
Practical Tips & Tricks for Selenium Test Automation
PPTX
Email Production at scale
PDF
Si fa presto a dire serverless
PPTX
How to create your own WordPress plugin
PDF
Build Fail-Proof Tests in Any Browser with Selenium
JUST EAT: Tools we use to enable our culture
Intro to Netflix's Chaos Monkey
Selenium and Appium Training from Sauce Labs
Sauce Labs for Visual Studio Team Services & TFS
Release the Monkeys ! Testing in the Wild at Netflix
Task runners + theming automating your workflow
Intro to Electron - Creating Desktop Applications with HTML5
Coding with jetpack
Installing and setting up eclipse java projects
Saving Time By Testing With Jest
Moving From a Selenium Grid to the Cloud - A Real Life Story
presentation-chaos-monkey
DjangoZoom lightning talk
Automated Testing with Cucumber, PhantomJS and Selenium
Progressive Enhancement using WSGI
Practical Tips & Tricks for Selenium Test Automation
Email Production at scale
Si fa presto a dire serverless
How to create your own WordPress plugin
Build Fail-Proof Tests in Any Browser with Selenium
Ad

Similar to Webdriver.io (20)

PDF
R meetup 20161011v2
PDF
Automated Browser Testing
KEY
CodeIgniter for Startups, cicon2010
PPTX
Automated Acceptance Testing from Scratch
PPTX
BBS Selenium & Docker
PDF
Journey to Docker Production: Evolving Your Infrastructure and Processes - Br...
PDF
Droidcon Spain 2105 - One app to rule them all: Methodologies, Tools & Tricks...
PPTX
10 tips for Cloud Native Security
PPTX
Development Processes and Tooling
PDF
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
PDF
Getting your mobile test automation process in place - using Cucumber and Cal...
PDF
Using Minikube for Node.js development
PDF
DCEU 18: Building Your Development Pipeline
PPTX
ma-formation-en-Docker-jlklk,nknkjn.pptx
PDF
Modern websites in 2020 and Joomla
PDF
4Developers 2018: Zero-Downtime deployments with Kubernetes (Mateusz Dymiński)
PPTX
DevOps On AWS - Deep Dive on Continuous Delivery
KEY
Continuous Integration In A PHP World
PPTX
DockerCon 15 Keynote - Day 2
PPTX
Dockercon EU 2015
R meetup 20161011v2
Automated Browser Testing
CodeIgniter for Startups, cicon2010
Automated Acceptance Testing from Scratch
BBS Selenium & Docker
Journey to Docker Production: Evolving Your Infrastructure and Processes - Br...
Droidcon Spain 2105 - One app to rule them all: Methodologies, Tools & Tricks...
10 tips for Cloud Native Security
Development Processes and Tooling
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Getting your mobile test automation process in place - using Cucumber and Cal...
Using Minikube for Node.js development
DCEU 18: Building Your Development Pipeline
ma-formation-en-Docker-jlklk,nknkjn.pptx
Modern websites in 2020 and Joomla
4Developers 2018: Zero-Downtime deployments with Kubernetes (Mateusz Dymiński)
DevOps On AWS - Deep Dive on Continuous Delivery
Continuous Integration In A PHP World
DockerCon 15 Keynote - Day 2
Dockercon EU 2015
Ad

Recently uploaded (20)

PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Approach and Philosophy of On baking technology
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Modernizing your data center with Dell and AMD
PDF
Electronic commerce courselecture one. Pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Encapsulation theory and applications.pdf
PPTX
A Presentation on Artificial Intelligence
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Reach Out and Touch Someone: Haptics and Empathic Computing
Advanced methodologies resolving dimensionality complications for autism neur...
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Network Security Unit 5.pdf for BCA BBA.
NewMind AI Monthly Chronicles - July 2025
The Rise and Fall of 3GPP – Time for a Sabbatical?
Approach and Philosophy of On baking technology
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Unlocking AI with Model Context Protocol (MCP)
20250228 LYD VKU AI Blended-Learning.pptx
Spectral efficient network and resource selection model in 5G networks
Building Integrated photovoltaic BIPV_UPV.pdf
Modernizing your data center with Dell and AMD
Electronic commerce courselecture one. Pdf
Review of recent advances in non-invasive hemoglobin estimation
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Encapsulation theory and applications.pdf
A Presentation on Artificial Intelligence
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows

Webdriver.io

  • 1. End-to-end browser testing 
 with a manageable number of annoyances — Steven Noble, 2019
  • 2. About me • Creating software since Dick Smith added a Basic cartridge and cassette data storage to the Wizard • Working in the digital economy since 1994: journalism, PR, marketing, consulting, research, etc • React/Node software developer with GorillaStack: we’re like IFTTT for your enterprise cloud infrastructure
  • 3. End-to-end browser testing: 
 the theory • Confirm that your services and units work together as required • Test your app the way your users test it — through the user interface • Spend less time on manual testing
  • 4. End-to-end browser testing: 
 the reality …that’s all true, but… • It’s really slow • It’s hard to debug • It can be flakey …so here’s how to get those benefits with a manageable number of annoyances
  • 5. But first, your stack Headless 
 web 
 browser Chrome 
 only Chrome
 Firefox
 etc Browser automation 
 driver Chromedriver Chromedriver 
 Marionette (Firefox)
 etc Browser automation server DevTools
 protocol Selenium Browser
 testing
 framework Google
 Puppeteer Webdriver.io Nightwatch
 TestCafe
 etc
  • 6. It looks like this browser.url('/login');
 $('#login-form').waitForVisible(); $('#username').setValue(WDIO_USERNAME);
 $('#password').setValue(WDIO_PASSWORD);
 $('#login').click(); $('#dashboard').waitForVisible(); expect(browser.getUrl()).to.equal('/dashboard');
 expect($('h1')).getText().to.equal('Dashboard');
 expect($('#header').getText())
 .to.include(`Welcome ${WDIO_USERNAME}`);
  • 7. TIP: Employ software developers, not automation testers So you can quickly tell whether a failure is a bug in the app or a bug in the test So developers will write or maintain tests whenever they write or maintain features aka, be GorillaStack, not the ABC
  • 8. TIP: Employ software developers, not automation testers • So you can define semantic selectors: • Testing your own code: • button#reset-password • Testing someone else's code: • //div[@class="col-md-12"]/ form[@id="login"]/button[2]
  • 9. TIP: Employ software developers, not automation testers So you can change the behaviour of the app being tested: • Disable Google Analytics, Rollbar, Intercom etc • Use test keys for Google Recaptcha, Stripe, etc • Execute next steps immediately instead of sending them to a message queue • Load/unload database fixtures
  • 10. TIP: Lock down Google Chrome If you are just using the Google Chrome binary that you use for everyday browsing, then you are liable to find: • Test behaviour changes randomly after automatic Chrome version updates • Test behaviour differs on different machines that are running different versions of Chrome Instead, use a Docker container or similar that lets you lock your tests to a specific version of Chrome
  • 11. TIP: If you Dockerise Selenium, don’t treat the container as a black box • If you get weird Selenium errors in your tests, start by dropping down a level: • Visit http://localhost:4444/wd/hub/static/resource/ hub.html • Send commands to Selenium directly via its HTTP API • You’ll probably see errors related to a known issues with the official SeleniumHQ containers, with possible solutions in GitHub issues
  • 12. TIP: If you Dockerise Selenium, don’t treat the container as a black box • If not, drop down a second level: • docker exec -it <constainerID> 
 /bin/bash • Send commands directly to Selenium via its CLI • You’ll probably see errors related to a known issues with the official SeleniumHQ containers, with possible solutions in GitHub issues
  • 13. TIP: Create forgiving pipelines 
 in your CI For example, in Buildkite, we: • Run the WDIO step after all other steps, as they all provide useful feedback more quickly • Make the WDIO step mandatory when merging a feature branch in develop • Make the WDIO step optional in all other scenarios • Make good use of the retry attributes in pipeline.yml