Selenium
Tips & Tricks
by Dave Haeffner
@TourDeDave
New to Selenium?
• Selenium Bootcamp [Link]
• Selenium Guidebook [Link]
• Weekly Selenium Tips [Link]
[Link]
etc.
[Link]
Headless
Benefits:
- Speed
- Maintenance
- Screenshotting
Headless w/ Xvfb
[Link]
Why use it?
Ideal for running small test suites on a headless machine
e.g., a Continuous Integration (CI) Server
NOTE
- display port collisions
- use unique values
- e.g., CI build number
Headless w/ GhostDriver
[Link]
[Link]
Why use it?
• Faster execution times
• Also useful for a CI server
• Not limited to just Linux
Step 1 - Download PhantomJS
[Link]
Step 2 - Start PhantomJS w/ WebDriver flag
Step 3 - Connect Your Test to PhantomJS
using Selenium Remote
NOTE
You can also connect PhantomJS to a Selenium Grid
[Link]
Visual Testing
A Visual Testing Primer
• check that an application’s UI appears correctly to its users
• goal: find visual bugs before the user does
• e.g., font, layout, rendering issues
• can also be used to verify content
• e.g., charts, dashboards, etc.
• hundreds of assertions for a few lines of code
• at least 16 open source solutions available to choose from
Visual Testing Challenges
• Managing complexity
• False positives
• e.g., shifting content, dynamic content, typos
Visual Testing Write-ups
[Link] Getting Started
[Link] False Positives part 1
[Link] False Positives part 2
[Link] Add Visual Testing To Your Existing Tests
[Link] Add Visual Testing To Your BDD Tests
Selenium Grid Resources
• [Link]
• [Link]
• [Link]
Fun with a Proxy Server
Application
Proxy
Selenium Browser Under
Server
Test
HTTP Status Codes
[Link]
Configuration
• Use a proxy server to capture the traffic from your
Selenium test(s)
• Find the status code for the action you’re interested
in (e.g., visiting a URL)
• Assert that the status code is what you expect
Blacklisting
[Link]
Configuration
• Use a proxy server to manipulate the traffic from
your Selenium test(s)
• Identify third-party resources that are slow to load
(which could negatively impact your tests)
• Blacklist them (e.g., make it so they don’t load)
Load Testing
[Link]
Configuration
• Use a proxy server to capture the traffic from your
Selenium test(s)
• Convert the HTTP Archive into a JMeter JMX file
• Run the new JMX file with JMeter to enact load on
your application (modify as needed)
Adapted from ruby-jmeter example from [Link]
[Link]
Broken Image Checking
[Link]
Option 1 - Proxy Server
Option 2 - HTTP Library
Option 3 - JavaScript
Option 1: Proxy Server
Proxy Server Cont’d
Proxy Server Cont’d
Proxy Server Cont’d
Option 2: HTTP Library
HTTP Library Cont’d
HTTP Library Cont’d
Option 3: JavaScript
JavaScript Cont’d
JavaScript Cont’d
JavaScript Cont’d
Forgot Password
[Link]
Configuration
• Use Selenium to trigger a forgot password workflow
(to a Gmail account) and keep the browser session
active
• Retrieve the e-mail and the password information
via the Gmail API
• Use the password information in the active
Selenium session (if applicable)
A/B Testing
[Link]
[Link]
• 3 page states available
• You can identify which state you’re in because
there is different header text for each
• When you’re in the control: A/B Test Control
• For the variation: A/B Test Variation 1
• When you’re not in a test: No A/B Test
Configuration
• You can easily opt-out of A/B tests by
• forging a cookie
• appending a query to the URL
• This way you get a known state of the page which
isn’t likely to change without your knowledge
File Management
Uploading a File
Workaround
• Rather than use something like AutoIt (which is a
bad idea)
• You can send the file path you want to upload into
the form input field (side-stepping the system
dialog entirely)
[Link]
Downloading a File
[Link]
[Link]
[Link]
Two approaches
• Configure Selenium to download to local disk, and
delete the file when done
• Use an HTTP library, perform a HEAD request, and
check the headers for the correct content type &
length.
Why?
• An order of magnitude faster using Selenium
• No need to download the file
With Selenium
With Selenium
With an HTTP library
With an HTTP library (for secure files)
Additional Output
Highlight Elements
[Link]
Growl Notifications
[Link]
New to Selenium?
• Selenium Bootcamp [Link]
• Selenium Guidebook [Link]
• Weekly Selenium Tips [Link]
[Link] [Link]
Get in touch
@TourDeDave
dhaeffner@[Link]
[Link]