Selenium
Tips & Tricks
by Dave Haeffner
[Link]
[Link]
Headless
[Link]
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
- e.g., xvfb-run -a
Headless w/ GhostDriver
[Link]
[Link]
Why use it?
Faster execution times
Also useful for a CI server
Not limited to just Linux
Option 1
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]
Option 2
Step 1 - Download PhantomJS
[Link]
Step 2 - Tell Selenium where it is
Step 3 - Launch Selenium with PhantomJS locally
Visual Testing
A Visual Testing Primer
Check that an applications UI appears correctly
Can also be used to verify content
Hundreds of assertions for a few lines of code
Visual Testing Challenges
Managing complexity
False positives
e.g., shifting content, dynamic content, typos
In [Link]
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
Fun with a Proxy Server
Selenium
Browser
Proxy
Server
Application
Under
Test
[Link]
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 youre 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 dont 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)
[Link]
[Link]
Broken Image Checking
[Link]
Option 1 - Proxy Server
Option 2 - HTTP Library
Option 3 - JavaScript
Option 1: Proxy Server
Option 1: Proxy Server
Option 1: Proxy Server
Option 2: HTTP Library
Option 2: HTTP Library
Option 2: HTTP Library
Option 3: JavaScript
Option 3: JavaScript
Option 3: JavaScript
Forgot Password
[Link]
Configuration
Use Selenium to trigger a forgot password workflow
(to email a real address) and keep the browser
session active
Retrieve the e-mail and the password information
via the email providers API
Use the password information in the active
Selenium session (if applicable)
[Link]
A/B Testing
[Link]
[Link]
3 page states available
You can identify which state youre in because
there is different header text for each
When youre in the control: A/B Test Control
For the variation: A/B Test Variation 1
When youre 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
is far less likely to change without your knowledge
File Management
Uploading a File
[Link]
Options
GUI manipulation with something like AutoIt
Input the file path into the form field (side-stepping
the system dialog)
[Link]
Downloading a File
[Link]
[Link]
[Link]
Two approaches
[Link] Selenium to download to local disk, and
delete the file when done
[Link] an HTTP library, perform a HEAD request, and
check the headers for the correct content type &
length.
Why #2?
An order of magnitude faster
No need to download the file
With Selenium
With Selenium
With an HTTP library
With an HTTP library
Additional Output
Highlight Elements
[Link]
Growl Notifications
[Link]
More Selenium Resources
Selenium Bootcamp
[Link]
Weekly Selenium Tips [Link]
Weekly Se Tip Code
[Link]
Selenium Guidebook
[Link]
[Link]