Selenium
Web Driver Rouella Macairan
QA Tester
Magenic Manila
Table of Contents
What is Selenium? (Background/Trivia) Selenium WebDriver
What is Selenium?
A set of tools that supports rapid development of test automation for webbased applications.
Can be recorded and written as HTML Support for a number of programming languages: Java, C#, Perl, PHP, Python, Ruby Cross browsers support: IE, Firefox, Opera, Safari and Google Chrome
Cross platform support: Windows, Linux, and Macintosh.
Selenium Background
Invented in 2004 by Jason R. Huggins and team.
Originally named JavaScript Functional Tester [JSFT] 100% Javascript and HTML
Designed to make test writing easy
Open source browser based integration test framework built originally by ThoughtWorks Selenium is open source software, released under the Apache 2.0 license and can be downloaded and used without charge.
Selenium Trivia
Selenium is a chemical element with the atomic number 34, represented by the chemical symbol Se. Selenium
Mercury
Selenium Components
Selenium IDE
Selenium RC
Selenium Grid Selenium 2 aka Webdriver
Selenium WebDriver
Why Use the WebDriver?
Selenium WebDriver
A tool for automating web application testing Developed to better support dynamic web pages where elements of a page may change without the page itself being reloaded(AJAX) Makes direct calls to the browser using each browsers native support for automation the page itself being reloaded.
Binding Code (C#, Java )
WebDriver Wire Protocol
Drivers (IE, Firefox, Chrome )
Selenium 1.0 + WebDriver = Selenium 2.0
The WebDriver Wire Protocol
All implementations of WebDriver that communicate with the browser, or a Remote WebDriver server shall use a common wire protocol
The wire protocol defines a RESTful web service using JSON over HTTP
implemented in request/response pairs of "commands" and "responses"
11
Rest Console Demo
Selenium RC vs. WebDriver
Selenium-RC "injected" JS functions into the browser when the browser was loaded and then used its JS to drive the AUT within the browser Selenium-WebDriver makes direct calls to the browser using each browsers native support for automation
13
Setting Up WebDriver
Using NuGet packages
Create New Project in VS
Install NuGet package manager and navigate to it
Search for selenium and install the first item in the result list
14
Creating Driver
Create an instance of a driver
Note: additional steps are required to use Chrome Driver, Opera Driver, Android Driver and iPhone Driver
IWebDriver driverOne = new FirefoxDriver(); IWebDriver driverTwo = new InternetExlorerDriver();
Navigate to page
driver.Url = "http://www.google.com";
15
Getting Started
Choose and download browser driver you want to use for your tests (ex. Chrome)
using OpenQA.Selenium; usiOpenQA.Selenium.Chrome;
The IWebDriver interface can be find under OpenQA.Selenium namespace
namespace WebDriverDemo { You have to tell the WebDriver API class Program where this ChromeDriverServer is { located static void Main(string[] args) { IWebDriver driver = new ChromeDriver(@"C:\libraries"); driver.Url= "http://www.google.com"; } } }
16
Locating Elements
Elements can be located by the same properties as in the IDE By ID
IWebElement element = driver.FindElement(By.Id("coolestWidgetEvah"));
By Class
IList<IWebElement> cheeses = driver.FindElements(By.ClassName("cheese"));
By Tag Name
IWebElement frame = driver.FindElement(By.TagName("iframe"));
17
Locating Elements(2)
By Name
IWebElement cheese = driver.FindElement(By.Name("cheese"));
By Link Text
IWebElement cheese = driver.FindElement(By.LinkText("cheese"));
By XPath
IList<IWebElement> inputs = driver.FindElements(By.XPath("//input"));
By CSS Selector
IWebElement cheese = driver.FindElement(By.CssSelector("#food span.dairy.aged"));
18
Wait Steps
Explicit wait
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); IWebElement myDynamicElement = wait.Until<IWebElement>((d) => { return d.FindElement(By.Id("someDynamicElement")); });
Implicit wait
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromS econds(10));
19
Type Text
Type Text into a field using Selenium WebDriver SendKeys() function
// Find the text input element by its name IWebElement element = driver.FindElement(By.Name("search")); // Enter something to search for element.SendKeys(magenic");
20
Verify Text Steps
WebDriver does not support the well-known commands of Selenium IDE like verifyTextPresent We can implement so
public static void AssertTextPresent(String value) { if (!driver.PageSource.Contains(value)) { throw new Exception(value + " is not present"); } }
21
Asserts
There wasnt any built-in method to assert text on a page You can do something along the lines of
static void Main(string[] args) { IWebDriver driver = new ChromeDriver(@"C:\libraries"); driver.Url= "http://www.google.com"; Assert.AreEqual("Google", driver.Title); }
22
Reporting Results
The test results are limited by the Unit Testing Framework we use ex. NUnit, VS Test Team, Gallio
Uning NUnit-Results
23
Web Driver Demo
Selenium
Questions?