This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and many iterations to get reader feedback, pivot until you have the right book and build traction once you do.
Preface
After observing many failed test automation attempts by using expensive commercial test automation tools, I am delighted to see that the value of open-source testing frameworks has finally been recognized. I still remember the day (a rainy day at a Gold Coast hotel in 2011) when I found out that the Selenium WebDriver was the most wanted testing skill in terms of the number of job ads on the Australias top job-seeking site.
Now Selenium WebDriver is big in the testing world. We all know software giants such as Facebook and LinkedIn use it, immensely-comprehensive automated UI testing enables them pushing out releases several times a day. However, from my observation, many software projects, while using Selenium, are not getting much value from test automation, and certainly nowhere near its potential. A clear sign of this is that the regression testing is not conducted on a daily basis (if test automation is done well, it will happen naturally).
Among the factors contributing to test automation failures, a key one is that automation testers lack sufficient knowledge in the test framework. It is quite common to see some testers or developers get excited when they first create a few simple test cases and see them run in a browser. However, it doesnt take long for them to encounter some obstacles: such as being unable to automate certain operations. If one step cannot be automated, the whole test case does not work, which is the nature of test automation. Searching solutions online is not always successful, and posting questions on forums and waiting can be frustrating (usually, very few people seek professional help from test automation coaches). Not surprisingly, many projects eventually gave up test automation or just used it for testing a handful of scenarios.
The motivation of this book is to help motivated testers work better with Selenium. The book contains over 190 recipes for web application tests with Selenium. If you have read one of my other books: Practical Web Test Automation, you probably know my style: practical. I will let the test scripts do most of the talking. These recipe test scripts are live, as I have created the target test site and included offline test web pages. With both, you can:
- Identify your issue
- Find the recipe
- Run the test case
- See test execution in your browser
Who should read this book
This book is for testers or programmers who are writing (or want to learn) automated tests with Selenium WebDriver. In order to get the most of this book, basic Ruby coding skill is required.
How to read this book
Usually, a recipe book is a reference book. Readers can go directly to the part that interests them. For example, if you are testing a multiple select list and dont know how, you can look up in the Table of Contents, then go to the chapter 8. This book supports this style of reading.
If you are new to Selenium WebDriver, I recommend you to try out the recipes from the front to back. The recipes in the first half of the book are arranged according to their levels of complexity, I believe readers can get the pattern of testing with Selenium and gain confidence after going through them.
Recipe test scripts
To help readers to learn more effectively, this book has a section of this book.
As an old saying goes, Theres more than one way to skin a cat. You can achieve the same testing outcome with test scripts implemented in different ways. The recipe test scripts in this book are written for simplicity, and there is always room for improvement. But for many, to understand the solution quickly and get the job done are probably more important.
If you have a better and simpler way, please let me know.
All recipe test scripts are Selenium WebDriver 3 compliant, and can be run against Chrome, Firefox and Internet Explorer on multiple platforms. I plan to keep the test scripts updated with the latest stable Selenium version.
Send me feedback
I would appreciate your comments, suggestions, reports on errors in the book and the recipe test scripts. You may submit your feedback on the books site.
Zhimin Zhan
Brisbane, Australia
Introduction
Selenium is a free and open source library for automated testing web applications. Selenium was originally created in 2004 by Jason Huggins, it merged with another test framework WebDriver in 2011 (thats why is named selenium-webdriver) led by Simon Stewart at Google (update: Simon now works at FaceBook). As WebDriver is a W3C standard, it gains support from all major browser vendors, as a result, Selenium WebDriver quickly become the de facto framework for automated testing web applications.
1.1 Selenium language bindings
Selenium tests can be written in multiple programming languages such as Java, C#, Python, JavaScript and Ruby (the core ones). Quite commonly, I heard the saying such as This is a Java project, so we shall write tests in Java as well. I disagree. Software testing is to verify whether programmers work meets customers needs. In a sense, testers are representing customers. Testers should have more weight on deciding the test syntax than programmers. Plus, why would you mandate that your testers should have the same programming language skills as the programmers. In my subjective view, scripting languages such as Ruby and Python are more suitable for test scripts than compiled languages such as C# and Java (Confession: I have been programming in Java for over 10 years). By the way, we call them test scripts, for a reason.
All examples in this book are written in Selenium with Python binding. This does not mean this book is limited to testers/developers who know Python. As you will see the examples below, the use of Selenium in different bindings are very similar. Once you master one, you can apply it to others quite easily. Take a look at a simple Selenium test script in five different language bindings: Java, C#, JavaScript, Ruby and Python.
Java:
import
org.openqa.selenium.By
;
import
org.openqa.selenium.WebDriver
;
import
org.openqa.selenium.WebElement
;
import
org.openqa.selenium.firefox.FirefoxDriver
;
public
class
GoogleSearch
{
public
static
void
main
(
String
[]
args
)
{
// Create a new instance of the html unit driver