Selenium
Selenium automates browsers.
Selenium Introduction:
Selenium Types:
· Selenium IDE: a Firefox add-on that will do simple record-and-playback of interactions with the browser
· Selenium RC (Remote Control): Selenium 1. deprecated. WebDriver is the successor.
· Selenium WebDriver: Selenium 2. a collection of language specific bindings to drive a browser -- the way it is meant to be driven.
· Selenium Server: used by both WebDriver and Remote Control. Built-in grid capabilities.
· Selenium-Grid: Selenium Grid allows you to run your tests in parallel, that is, different tests can be run at the same time on different remote machines.
Selenium-WebDriver supports the following browsers along with the operating systems these browsers are compatible with.
· Google Chrome 12.0.712.0+
· Internet Explorer 6, 7, 8, 9 - 32 and 64-bit where applicable
· Firefox 3.0, 3.5, 3.6, 4.0, 5.0, 6, 7
· Opera 11.5+
· HtmlUnit 2.9
· Android – 2.3+ for phones and tablets (devices & emulators)
· iOS 3+ for phones (devices & emulators) and 3.2+ for tablets (devices & emulators)
Selenium IDE note:
Use guide: http://seleniumhq.org/docs/02_selenium_ide.html
Install, launch IDE;
IDE feature:
add test case/suite, record, edit, run, log, reference;
export html/junit/python/c#/TestNG/Ruby;
Export script types:
WebDriver
Remote Control
WebDriver Backend (java only)
Selenese – Selenium commands:
Command reference:http://release.seleniumhq.org/selenium-core/1.0.1/reference.html
Actions: do things like “click this link”, some with “AndWait” suffix.
Accessors: examine the status and store the results in variables;
Assertions: verify that the state conforms to what’s expected. All in 3 modes:
“assert” (once it fails, test is aborted),
“verify” (once it fails, test will continue)
“waitFor” (test halts after timeout).
Selenium 2.0 and WebDriver http://seleniumhq.org/docs/03_webdriver.html
Some reason why you will need the Selenium-Server -
· You are using Selenium-Grid to distribute your tests over many machines / VMs.
· You want to connect to a remote machine that has a particular browser version that is not on your current machine.
· You are not using the Java bindings and would like to use HtmlUnit Driver
Java env setup with Maven:
Maven 3.0.3: http://maven.apache.org/download.html
selenium-java for Maven: http://seleniumhq.org/download/maven.html
1. Download Maven and add it to path;
2. Create a pom.xml in your project and run “mvn clean install” in your project folder; (This will download Selenium and all its dependencies and will add them to the project.)
3. Import your project into Eclipse after you run “mvn eclipse:eclipse” to generate project files for Eclipse. Your Eclipse must have m2eclipse installed (http://m2eclipse.sonatype.org/installing-m2eclipse.html for Eclipse 3.5.2 and 3.6.1 only).
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MySel20Proj</groupId>
<artifactId>MySel20Proj</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.12.0</version>
</dependency>
</dependencies>
</project>
Java test sample:
package org.openqa.selenium.example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Selenium2Example {
public static void main(String[] args) {
// Create a new instance of the Firefox driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
WebDriver driver = new FirefoxDriver();
// And now use this to visit Google
driver.get("http://www.google.com/");
// Alternatively the same thing can be done like this
// driver.navigate().to("http://www.google.com/");
// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for
element.sendKeys("Cheese!");
// Now submit the form. WebDriver will find the form for us from the element
element.submit();
// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
// Google's search is rendered dynamically with JavaScript.
// Wait for the page to load, timeout after 10 seconds
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return d.getTitle().toLowerCase().startsWith("cheese!");
}
});
// Should see: "cheese! - Google Search"
System.out.println("Page title is: " + driver.getTitle());
//Close the browser
driver.quit();
}
}
Here is a guide on Jave env setup without Maven: http://www.silverwareconsulting.com/index.cfm/2010/5/17/Getting-Started-with-WebDriver-a-Browser-Automation-Tool
References:
Blog: http://seleniumhq.wordpress.com/
docs
http://www.ibm.com/developerworks/cn/java/wa-selenium-ajax/
http://www.ibm.com/developerworks/cn/opensource/os-webautoselenium/
http://www.cnblogs.com/hyddd/archive/2009/05/30/1492536.html