Index
A
- absolute path
- about / Using advanced locator strategies
- using / Using the absolute path
- Action Wrapper pattern
- about / The Action Wrapper pattern
- advantages / Advantages of the Action Wrapper pattern
- disadvantages / Disadvantages of the Action Wrapper pattern
- implementing / Implementing the Action Wrapper pattern
- advanced locator strategies
- using / Using advanced locator strategies
- absolute path, using / Using the absolute path
- relative path, using / Using the relative path
- advantages, Record and Playback pattern
- fast test growth / Advantages of the Record and Playback pattern
- no previous experience / Advantages of the Record and Playback pattern
- element lookup / Advantages of the Record and Playback pattern
- advantages, Selenium
- about / Right tool for the right job
- price / Price
- Open Source Software (OSS) / Open source
- flexibility / Flexibility
- AJAX
- about / Maintaining a stable test suite
- waiting for / Waiting for AJAX
- AJAX delays
- testing without / Testing without AJAX delays
- AJAX forms
- testing, explicit delays used / Using explicit delays to test AJAX forms
- animation
- API
- using, as source of fixture data / Using an API as a source of fixture data
- Appium
- URL / Testing a mobile site
- assertions
- adding, to Selenium test / Introducing asserts
- adding, to Selenium test / Introducing asserts
- implementing / Implementing clicks and assertions
- assert method
- using / Introducing asserts
- asserts / Introducing asserts
B
- Bamboo / The random run order principle
- BDD
- about / Behavior-driven Development
- advantages / Advantages of BDD
- disadvantages / Disadvantages of BDD
- URL / Describing shopping cart behavior
- using, in project / Is BDD right for my project?
- Big Ball of Mud pattern
- about / The Big Ball of Mud pattern
- Black Hole Proxy pattern
- about / The Black Hole Proxy pattern
- advantages / Advantages of the Black Hole Proxy pattern
- disadvantages / Disadvantages of the Black Hole Proxy pattern
- implementing / Implementing the Black Hole Proxy pattern
- BrowserMob Proxy
- BrowserStack
- bug-driven growth strategy / Bug-driven growth strategy
- build node management
- about / Build node management
- configuration management system / Configuration management system
- virtualization / Virtualization
- builds
- deploying / Deploying new builds
C
- c command / Interactive test debugging
- chained selector strategy methods
- Chain Linked pattern
- about / The Chain Linked pattern
- Chef
- CI
- about / Continuous Integration
- test environments, managing / Managing the test environments and nodes
- nodes, managing / Managing the test environments and nodes
- Selenium Grid / Selenium Grid
- CI, setting up
- test environment / Continuous Integration
- test data / Continuous Integration
- tests / Continuous Integration
- test stability / Continuous Integration
- test nodes / Continuous Integration
- CI system / Continuous Integration
- CI environment
- setup / Decoupling tests from tools
- CI environment management
- about / CI environment management
- build node management / Build node management
- CI system / Continuous Integration
- CI tool
- selecting / Choosing the CI tool
- tests, decoupling from / Decoupling tests from tools
- functions / Decoupling tests from tools
- classes
- naming / Naming classes
- CLI
- using / Using Command Line Interface
- terminal, using on Windows / Using the terminal on Windows
- terminal, using on Mac OS X / Using the terminal on Mac OS X
- terminal, using on Linux / Using the terminal on Linux
- click command
- about / Standalone mode
- clicks
- implementing / Implementing clicks and assertions
- code
- moving, into setup / Moving code into a setup and teardown
- moving, into teardown / Moving code into a setup and teardown
- collect method / Using chained selector strategy methods
- Comma Separated Value (CSV) / Introducing test fixtures
- comment test
- updating, to use default values / Updating the comment test to use default values
- computer
- setting up / Setting up the computer
- CLI, using / Using Command Line Interface
- Ruby runtime environment, configuring / Configuring the Ruby runtime environment
- Firefox, installing / Installing Firefox
- configuration directory
- about / The configuration directory
- cucumber.yml file / Cucumber.yml
- env.rb file / env.rb
- configuration management system / Configuration management system
- Continuous Integration (CI) / The random run order principle
- Cross-Site Scripting (XSS) / Reading Selenese
- CSS selector
- using / Using the CSS selector
- Cucumber
- about / Introducing Cucumber
- feature files / Feature files
- step definitions files / Step definition files
- configuration directory / The configuration directory
- cucumber.yml file / Cucumber.yml
- Cucumber implementation / Looking at the Cucumber implementation
- Cucumber profile
- Cucumber suite
- running / Running the Cucumber suite
- Cucumber wiki page
- URL / Feature files
- Curl
- about / Testing the purchase API
- Cygwin
- CygWin installer
D
- Dan North
- data accessibility
- versus data relevance / Data relevance versus data accessibility
- data relevance
- versus data accessibility / Data relevance versus data accessibility
- data stubs
- using / Using data stubs
- debug tool, Ruby / Interactive test debugging
- Decorator pattern / Implementing the Action Wrapper pattern
- default values pattern
- about / The default values pattern
- advantages / Advantages of the default values pattern
- disadvantages / Disadvantages of the default values pattern
- and faker, merging / Merging the default values pattern and the faker library
- default values pattern, merging with faker
- faker methods, implementing / Implementing faker methods
- comment test, updating to use default values / Updating the comment test to use default values
- disadvantages, Record and Playback pattern
- bad locators / Disadvantages of the Record and Playback pattern
- inflexible tests / Disadvantages of the Record and Playback pattern
- hardcoded test data / Disadvantages of the Record and Playback pattern
- poorly written tests / Disadvantages of the Record and Playback pattern
- duplicate code / Disadvantages of the Record and Playback pattern
- Domain Object Model (DOM) / Why should I use a headless browser?
- Domain Specific Language (DSL) / The Page Objects pattern
- Don't Repeat Yourself (DRY) / The DRY testing pattern
- DRY / Advantages of the Page Objects pattern
- DRY testing pattern
- about / The DRY testing pattern
- advantages / Advantages of the DRY testing pattern
- disadvantages / Disadvantages of the DRY testing pattern
- code, moving into setup / Moving code into a setup and teardown
- code, moving into teardown / Moving code into a setup and teardown
- duplication, removing with methods / Removing duplication with methods
- external test goals, removing / Removing external test goals
- method used, for filling out review form / Using a method to fill out the review form
- refactored code, reviewing / Reviewing the refactored code
- DSL framework / Advantages of the Page Objects pattern
- duplication
- removing, with methods / Removing duplication with methods
E
- elements
- locating, on page / Locating elements on the page
- inspector window, using / Using a browser's element inspector
- End-to-End test / Different types of tests
- env.rb file / env.rb
- environment management
- new builds, deploying / Deploying new builds
- CI environment management / CI environment management
- environment variables
- about / Choosing the test environment
- setting / Choosing the test environment
- exit command / Interactive test debugging
- external test goals
- removing / Removing external test goals
F
- failures, tests
- reasons for / Reasons for failures
- Faker
- about / Testing without AJAX delays
- faker
- and default values pattern, merging / Merging the default values pattern and the faker library
- faker methods
- implementing / Implementing faker methods
- feature files, Cucumber / Feature files
- feature growth strategy / New feature growth strategy
- File.dirname(__FILE__) call / Hiding test data from tests
- files
- naming / Naming files
- Firebug
- Firefox
- installing / Installing Firefox
- fixture data
- parsing / Parsing fixture data
- using, in tests / Using fixture data in the tests
- API, using as source / Using an API as a source of fixture data
- Frequently asked questions
- multiple browsers, testing / How to test on multiple browsers?, Localhost testing
- programming language, selecting / Which programming language to write tests in?
- Selenium usage, for testing JS functionality / Should we use Selenium to test the JS functionality?, Problem
- headless browser, using / Why should I use a headless browser?, PhantomJS
- BDD tool, selecting / Which BDD tool should I use on my team?
- Selenium usage, for performance testing / Can I use Selenium for performance testing?, Possible solutions
G
- generic DRY methods
- making / Creating generic DRY methods
- refactoring with / Refactoring with generic methods
- Getter method / Creating a page super class
- get_environment method / Choosing the test environment
- Graphical User Interface (GUI) / Using the terminal on Windows
- grid mode
H
- hardcoded product / Hardcoding input data
- hardcoding
- test data / Hardcoding input data
- Hermetic test pattern
- about / The Hermetic test pattern
- advantages / Advantages of the Hermetic test pattern
- disadvantages / Disadvantages of the Hermetic test pattern
- test-on-test dependence, removing / Removing test-on-test dependence
- HTMLUnit Driver
- URL / Possible solution
I
- IDE
- incompatible steps
- running / Running and fixing incompatible steps
- fixing / Running and fixing incompatible steps
- individual page classes
- implementing / Implementing individual page classes
- inspector window
- Integrated Development Environments (IDE) / Setting up the computer
- integration test / Different types of tests
- intelligent delays
- implementing / Implementing intelligent delays
- Interactive Ruby Shell (irb) / Interactive test debugging
- interactive test
- debugging / Interactive test debugging
- iOS Driver
- URL / Testing a mobile site
J
- Jasmine
- about / Possible solution
- URL / Possible solution
- JavaScript animations
- JavaScript Object Notation (JSON) / Using an API as a source of fixture data
- Jenkins / The random run order principle
- JMeter project
- URL / Possible solutions
- jQuery
- about / Implementing intelligent delays
- JSON.parse method / Using an API as a source of fixture data
- JsonWire API
- URL / JsonWire protocol
- JsonWire protocol
- about / JsonWire protocol
K
- keywords, shopping cart behavior
L
- Linux
- terminal, using on / Using the terminal on Linux
- literal object
- about / Describing a literal object
- object properties / Object properties
- object actions / Object actions
- objects within objects / Objects within objects
- localhost testing
- about / Localhost testing
- locator strategies
- about / Introducing locator strategies
- ID / Introducing locator strategies
- class name / Introducing locator strategies
- link text / Introducing locator strategies
- partial link text / Introducing locator strategies
- name property / Introducing locator strategies
- tag name / Introducing locator strategies
- CSS selector / Introducing locator strategies
- XPath / Introducing locator strategies
- advanced locator strategies, using / Using advanced locator strategies
- locator strategy code
- writing / Writing locator strategy code
- chained selector strategy methods, using / Using chained selector strategy methods
- CSS selector, using / Using the CSS selector
- XPath, using / Using XPath
- Luhn test algorithm
- about / Testing without AJAX delays
M
- Mac OS X
- terminal, using on / Using the terminal on Mac OS X
- method
- used, for filling out review form / Using a method to fill out the review form
- method chaining / Comparing Ruby to Selenese
- methods
- duplication, removing with / Removing duplication with methods
- MiniTest
- about / Possible solutions
- URL / Possible solutions
- mobile site
- testing / Testing a mobile site
- mobile site, testing
- Selenium wrapper, updating / Updating the Selenium wrapper
- step definition files, moving / Moving step definition files
- Cucumber profile, updating / Updating the Cucumber profile and tagging tests
- tests, tagging / Updating the Cucumber profile and tagging tests
- incompatible steps, running / Running and fixing incompatible steps
- incompatible steps, fixing / Running and fixing incompatible steps
- money path suite / The money path suite
- MS-DOS
- using / Using MS-DOS
- multiple tests models
- advantages / Multiple test models
- disadvantages / Multiple test models
- implementing / Implementing multiple test models
N
- namespace
- about / Understanding the namespace
- n command / Interactive test debugging
- number of sidebar objects
O
- object actions, literal object / Object actions
- object inheritance
- displaying / Showing object inheritance
- object properties, literal object / Object properties
- objects
- about / Understanding objects
- literal object, defining / Describing a literal object
- programming object, defining / Describing a programming object
- web page, defining with / Describing a web page with objects
- objects within objects, literal object / Objects within objects
- Open Source Software (OSS) / Open source
P
- -port parameter
- about / Installing Selenium Grid
- 99 percent coverage suite / The 99 percent coverage suite
- Page Objects
- used, in Test$$Unit framework / Using Page Objects in the Test::Unit framework
- used, in different testing frameworks / Using Page Objects in different testing frameworks
- Cucumber implementation / Looking at the Cucumber implementation
- RSpec implementation / Looking at the RSpec implementation
- implementing / The right way to implement Page Objects, Making pages smarter than tests, Making tests smarter than pages, Placing logic in Page Objects
- Page Objects framework
- creating / Creating a Page Objects framework
- page super class, creating / Creating a page super class
- sidebar objects, implementing / Implementing sidebar objects
- Self Verification, adding to Pages / Adding Self Verification to pages
- individual page classes, implementing / Implementing individual page classes
- number of sidebar objects, increasing / Increasing the number of sidebar objects as the website grows
- tests, running with / Running tests with the Page Objects framework
- Page Objects pattern
- about / The Page Objects pattern
- advantages / Advantages of the Page Objects pattern
- disadvantages / Disadvantages of the Page Objects pattern
- Pages
- Self Verification, adding to / Adding Self Verification to pages
- page super class
- creating / Creating a page super class
- PhantomJS
- PowerShell
- using / Using PowerShell
- PowerShell installer
- URL / Using PowerShell
- product review functionality
- testing / Testing the product review functionality
- product review test, starting / Starting a product review test
- elements, locating on page / Locating elements on the page
- locator strategies / Introducing locator strategies
- locator strategy code, writing / Writing locator strategy code
- clicks, implementing / Implementing clicks and assertions
- assertions, implementing / Implementing clicks and assertions
- product review test, duplicating / Duplicating the product review test
- product review test
- starting / Starting a product review test
- duplicating / Duplicating the product review test
- products
- validating, fixtures used / Using fixtures to validate products
- testing / Testing the remaining products
- multiple tests models / Multiple test models, Implementing multiple test models
- single test model / A single test model
- test failures / Making test failures more expressive
- product_review_test.rb file
- programming object
- about / Describing a programming object
- project
- BDD, using / Is BDD right for my project?
- Pry gem
- Puppet
- purchase API
- testing / Testing the purchase API
R
- $remote parameter
- about / Using Selenium Grid
- -role wd flag
- about / Installing Selenium Grid
- random run order principle
- about / The random run order principle
- advantages / Advantages of the random run order principle
- disadvantages / Disadvantages of the random run order principle
- Record and Playback pattern
- about / The Record and Playback pattern
- advantages / Advantages of the Record and Playback pattern
- disadvantages / Disadvantages of the Record and Playback pattern
- refactored code
- reviewing / Reviewing the refactored code
- refactoring
- about / Refactoring tests
- regression test suite / The regression suite
- relative path
- about / Using advanced locator strategies
- using / Using the relative path
- review
- creating, with single method call / Creating a new review with a single method call
- RSpec implementation / Looking at the RSpec implementation
- Ruby
- comparing, to Selenese / Comparing Ruby to Selenese
- Selenium test, writing in / Writing a Selenium test in Ruby
- installing / Installing Ruby
- installing, URL / Installing Ruby
- Ruby gems (gems) / Installing the selenium-webdriver gem
- Ruby runtime environment
- configuring / Configuring the Ruby runtime environment
- Ruby, installing / Installing Ruby
- selenium-webdriver gem, installing / Installing the selenium-webdriver gem
S
- SauceLabs
- about / Grid mode
- URL / Grid mode, Setting up SauceLabs Grid
- SauceLabs Grid
- setting up / Setting up SauceLabs Grid
- URL / Setting up SauceLabs Grid
- SauceLabs website
- URL / Using the CSS selector
- s command / Interactive test debugging
- Selenese
- reading / Reading Selenese
- comparing, to Ruby / Comparing Ruby to Selenese
- Selenium
- advantages / Choosing Selenium over other tools
- commands / Understanding Selenium commands
- selenium-webdriver gem
- installing / Installing the selenium-webdriver gem
- Selenium build / Running as often as possible
- Selenium commands
- about / Understanding Selenium commands
- Selenese, reading / Reading Selenese
- comparing, in multiple languages / Comparing Selenium commands in multiple languages
- Selenium Grid
- about / Selenium Grid
- standalone mode / Understanding standalone and grid modes
- grid mode / Understanding standalone and grid modes
- installing / Installing Selenium Grid
- using / Using Selenium Grid
- setting up / Setting up Selenium Grid
- Selenium Grid Extras
- about / Selenium Grid Extras
- URL / Selenium Grid Extras
- Selenium IDE
- about / Getting started with the Selenium IDE
- installing / Installing the Selenium IDE
- URL / Installing the Selenium IDE
- test, recording / Recording our first test
- test, saving / Saving the test
- Selenium test
- writing, in Ruby / Writing a Selenium test in Ruby
- Selenium test, writing in Ruby
- about / Writing a Selenium test in Ruby
- Test**Unit framework, using / Introducing Test::Unit
- assertions, adding / Introducing asserts
- interactive test, debugging / Interactive test debugging
- Selenium wrapper
- updating / Updating the Selenium wrapper
- SeleniumWrapper class / Implementing the Action Wrapper pattern
- Self Verification
- adding, to Pages / Adding Self Verification to pages
- setup
- code, moving into / Moving code into a setup and teardown
- Shell scripts
- about / Configuration management system
- shopping cart behavior
- testing / Testing the shopping cart behavior
- about / Describing shopping cart behavior
- step definitions, writing / Writing step definitions
- BDD, using in project / Is BDD right for my project?
- SidebarCart class
- implementing / Implementing the SidebarCart class
- sidebar objects
- implementing / Implementing sidebar objects
- SidebarCart class, implementing / Implementing the SidebarCart class
- single method call
- review, creating with / Creating a new review with a single method call
- Single Point Of Truth (SPOT) / The DRY testing pattern
- Single Source Of Truth (SSOT) / The DRY testing pattern
- single test model
- advantages / A single test model
- disadvantages / A single test model
- Smoke tests
- smoke test suite
- about / The smoke test suite
- tests / The smoke test suite
- Spaghetti pattern
- about / Introducing the Spaghetti pattern
- advantages / Advantages of the Spaghetti pattern
- disadvantages / Disadvantages of the Spaghetti pattern
- Spoonium
- Stable Test Suite
- maintaining / Maintaining a stable test suite
- standalone mode
- step definition files
- moving / Moving step definition files
- step definitions
- writing / Writing step definitions
- step definitions files, Cucumber / Step definition files
T
- table data (td) / Reading Selenese
- table row (tr) / Reading Selenese
- TeamCity / The random run order principle
- teardown
- code, moving into / Moving code into a setup and teardown
- terminal
- used, on Windows / Using the terminal on Windows
- used, on Mac OS X / Using the terminal on Mac OS X
- used, on Linux / Using the terminal on Linux
- terminal, on Windows
- MS-DOS, using / Using MS-DOS
- PowerShell, using / Using PowerShell
- terminal emulator, using / Using the terminal emulator
- terminal emulator
- using / Using the terminal emulator
- Test$$Unit framework
- Page Objects, used in / Using Page Objects in the Test::Unit framework
- about / Showing object inheritance
- Test**Unit framework
- using / Introducing Test::Unit
- test, types
- unit test / Different types of tests
- integration test / Different types of tests
- End-to-End test / Different types of tests
- test-on-test dependence
- timestamps, used as test data / Using timestamps as test data
- remaining common actions, extracting to methods / Extracting the remaining common actions to methods
- test-on-test dependency refactoring
- test class naming
- about / Understanding test class naming
- files, naming / Naming files
- classes, naming / Naming classes
- namespace / Understanding the namespace
- object inheritance, displaying / Showing object inheritance
- test data
- timestamps, using as / Using timestamps as test data
- hardcoding / Hardcoding input data
- hiding, from tests / Hiding test data from tests
- test environment, selecting / Choosing the test environment
- TestData class / Parsing fixture data
- test environment
- selecting / Choosing the test environment
- test failures
- file downloading, URL / Parsing fixture data
- about / Making test failures more expressive
- not currently visible / Waiting for JavaScript animations
- under other elements / Waiting for JavaScript animations
- Offscreen / Waiting for JavaScript animations
- test fixtures
- about / Introducing test fixtures
- fixture data, parsing / Parsing fixture data
- fixture data, using / Using fixture data in the tests
- using, to validate products / Using fixtures to validate products
- data stubs, using / Using data stubs
- Test is an Island Pattern / The Hermetic test pattern
- test nodes / Continuous Integration
- tests
- refactoring / Refactoring tests
- test data, hiding from / Hiding test data from tests
- fixture data, using / Using fixture data in the tests
- without AJAX delays / Testing without AJAX delays
- AJAX forms testing, explicit delays used / Using explicit delays to test AJAX forms
- pausing, issues / Using explicit delays to test AJAX forms
- testing, on multiple browsers / Test your tests!
- tagging / Updating the Cucumber profile and tagging tests
- running, with Page Objects framework / Running tests with the Page Objects framework
- decoupling, from CI tool / Decoupling tests from tools
- tests, writing
- prerequisites / Setting up the computer
- test stability
- about / Engineering the culture of stability
- running fast / Running fast and failing fast, Running as often as possible
- failing fast / Running fast and failing fast
- clean and consistent environment, maintaining / Keeping a clean and consistent environment
- bad code changes, discarding / Discarding bad code changes
- Stable Test Suite, maintaining / Maintaining a stable test suite
- AJAX, waiting for / Waiting for AJAX
- test suites, writing
- strategies / Strategies for writing test suites
- test, types / Different types of tests
- smoke test suite / The smoke test suite
- money path suite / The money path suite
- feature growth strategy / New feature growth strategy
- bug-driven growth strategy / Bug-driven growth strategy
- regression test suite / The regression suite
- 99 percent coverage suite / The 99 percent coverage suite
- test tool independence pattern
- about / The test tool independence pattern
- advantages / Advantages of the test tool independence
- disadvantages / Disadvantages of the test tool independence
- Tight coupling
- Travis-CI / The random run order principle
U
- unit test / Different types of tests
- user data
- private / Hardcoding input data
- User Interface (UI)
- about / Choosing the CI tool
V
- V8 Benchmark Suite
- URL / Possible solutions
- Verification and Validation (V&V) / Different types of tests
- verify method / Adding Self Verification to pages
- Version Control System (VCS) / Discarding bad code changes, Bug-driven growth strategy
- virtual box
- URL / Virtualization
- virtualization / Virtualization
- virtualization solutions
- Xen project / Virtualization
- virtual box / Virtualization
- Windows virtual PC / Virtualization
- Virtual Machine (VM) / Virtualization
W
- WebKit
- about / PhantomJS
- web page
- defining, with objects / Describing a web page with objects
- website
- URL / Hardcoding input data
- wget
- about / Testing the purchase API
- What You See (is) What You Get (WYSWYG) / Disadvantages of the Record and Playback pattern
- Windows
- terminal, using on / Using the terminal on Windows
- Windows virtual PC
- URL / Virtualization
- write once test everywhere pattern
- advantages / Advantages of the write once, test everywhere pattern
- disadvantages / Disadvantages of the write once, test everywhere pattern
X
- Xen project
- about / Virtualization
- URL / Virtualization
- XPath
- using / Using XPath
- URL / Using XPath
Y
- YAML
- about / Introducing test fixtures
- YSlow
- URL / Possible solutions