Sunday, September 25, 2011

Adding Main() to JUnit to run from command prompt

//package com.example.tests;

import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;
import junit.framework.*;

public class GE_TC1 extends SeleneseTestCase {
public void setUp() throws Exception {
setUp("http://www.ge.com/", "*firefox");
}
public void testGE_TC1() throws Exception {
selenium.open("http://www.ge.com/");
// Search for any word
selenium.type("textToSearch", "energy efficient");
// This is just a comment
selenium.click("searchSubmit");
selenium.waitForPageToLoad("30000");
assertEquals("GE: Search Results", selenium.getTitle());
assertTrue(selenium.isTextPresent("energy efficient"));
}
public static Test suite() {
//method added
return new TestSuite(GE_TC1.class);
}
public void tearDown(){
//Added . Will be called when the test will complete
selenium.stop();
}
public static void main(String args[]) {
// Added. Execution will started from here.
junit.textui.TestRunner.run(suite());
}
}

Sunday, July 24, 2011

Hover Menus

Create a test case with the following steps:
1.Open http://www.annauniv.edu/
2.Click on the Link ‘Departments’
3.From the ‘Faculty of Civil Engineering’ menu, choose ‘Institute for Ocean Management’
4.New page opens, verify for the correct page
5.From the ‘Research Themes’ menu, choose ‘Coastal Pollution Monitoring and Hazards’
6.New page opens, verify for the correct page.

Saturday, July 23, 2011

Screen capture ex

1.Go to the below URL:http://maps.google.com/maps
2.Type or Cut and Paste the below Address:

90 Hamilton Street, Cambridge, MA-02139

1.Verify the Text Present Lim Consultants Inc
3.Click on the Lim Consultants Inclink
4.VerifyText Present “limconsultants.com” on the right side inline popup window.
5.AssertText “Lim Consultants Inc” present within the inline popup window.
6.Stop the Recoding in Selenium IDE
7.Capture the screen at the start and end of Test
8.Save and view the screen shots

Sunday, July 10, 2011

DDT CSS

css=html.yui3-js-enabled body div.page-content-wrapper section.page-content div#SearchResults-1.SearchResults ul.result-set li#search-result0.result div.main section p.title a.subtle span.name

DDT CSS

css=html.yui3-js-enabled body div.page-content-wrapper section.page-content div#SearchResults-1.SearchResults ul.result-set li#search-result0.result div.main section p.title a.subtle span.name

Shutdown RC from browser

http://localhost:4444/selenium-server/driver/?cmd=shutDownSeleniumServer

Sunday, June 5, 2011

Download Selenium RC 1.0.3

The most stable version of Selenium RC is available at:

http://code.google.com/p/selenium/downloads/list

Saturday, June 4, 2011

IDE Exercises

Ex-1
Open a specific URL (www.amazon.com)
Select “Books” under Search Select List
Search for a specific text (“Java”) in #1 page
Sort by “Prize: Low to high”
Check whether the windows title matches “Amazon.com: Java: Books”
Check whether the result set contains “Java” text
Click the link #2
Check whether the result set contains “Java” text

Wednesday, June 1, 2011

Selenium IDE 1.0.11 released

Selenium IDE

Selenium IDE is the a Firefox plugin that does record-and-playback of interactions with the browser. Use this to either script simple scripts, or to speed up creation of Selenium RC or Selenium Webdriver scripts.

Download version 1.0.11 released on 30/May/2011 or view the Release Notes

http://seleniumhq.org/download/

Saturday, April 30, 2011

DDT Code

//Data Driven Test Framework using Selenium and TestNG
//This Test performs search for the movie and looks for the attributes on the result page
//Data is read from the Excel SS - imdb_data1.xls
package script;

import com.thoughtworks.selenium.*;

//import org.junit.AfterClass;
import org.openqa.selenium.server.SeleniumServer;
import org.testng.annotations.*;

import java.io.File;
import jxl.*;

public class dataProviderExample extends SeleneseTestCase{

@BeforeClass
public void setUp() throws Exception {
SeleniumServer seleniumserver=new SeleniumServer();
seleniumserver.boot();
seleniumserver.start();
setUp("http://www.imdb.com/", "*firefox");
selenium.open("/");
selenium.windowMaximize();
selenium.windowFocus();
}

@DataProvider(name = "DP1")
public Object[][] createData1() {
Object[][] retObjArr=getTableArray("test\\resources\\data\\imdb_data1.xls",
"DataPool", "imdbTestData1");
return(retObjArr);
}


@Test (dataProvider = "DP1")
public void testDataProviderExample(String movieTitle,
String directorName, String moviePlot, String actorName) throws Exception {
//enter the movie title
selenium.type("q", movieTitle);
//they keep switching the go button to keep the bots away
if (selenium.isElementPresent("nb15go_image"))
selenium.click("nb15go_image");
else
selenium.click("xpath=/descendant::button[@type='submit']");
selenium.waitForPageToLoad("30000");

//click on the movie title in the search result page
selenium.click("xpath=/descendant::a[text()='"+movieTitle+"']");
selenium.waitForPageToLoad("30000");
//verify director name is present in the movie details page
verifyTrue(selenium.isTextPresent(directorName));
//verify movie plot is present in the movie details page
verifyTrue(selenium.isTextPresent(moviePlot));
//verify movie actor name is present in the movie details page
verifyTrue(selenium.isTextPresent(actorName));
}

@AfterClass
public void tearDown(){
selenium.close();
selenium.stop();
}

public String[][] getTableArray(String xlFilePath, String sheetName, String tableName){
String[][] tabArray=null;
try{
Workbook workbook = Workbook.getWorkbook(new File(xlFilePath));
Sheet sheet = workbook.getSheet(sheetName);
int startRow,startCol, endRow, endCol,ci,cj;
Cell tableStart=sheet.findCell(tableName);
startRow=tableStart.getRow();
startCol=tableStart.getColumn();

Cell tableEnd= sheet.findCell(tableName, startCol+1,startRow+1, 100, 64000, false);

endRow=tableEnd.getRow();
endCol=tableEnd.getColumn();

System.out.println("startRow="+startRow+", endRow="+endRow+", " +
"startCol="+startCol+", endCol="+endCol);
tabArray=new String[endRow-startRow-1][endCol-startCol-1];
ci=0;

for (int i=startRow+1;i<endRow;i++,ci++){
cj=0;
for (int j=startCol+1;j<endCol;j++,cj++){
tabArray[ci][cj]=sheet.getCell(j,i).getContents();
}
}
}
catch (Exception e) {
System.out.println("error in getTableArray()");
}

return(tabArray);
}

}//end of class

Sunday, April 24, 2011

Android Apps Testing Tool-kit

Playing around with idea to develop a testing tool-kit for Android. With so many applications being built, there is a dire need to shorten the time to market. That is the main reason, most of the applications available in the market either crash or do not meet user expectation. It is apparent that the quality is veiong sacrificed in order to mee the deadlines. To ensure that the Android apps are delivered with quality and also in time, there is a need for a testing framework that can check on the quality of apps on certain standard parameters as below:

1. Installation testing:
Tester’s need to focus on installation & uninstallation of the app. User will install the app through Market place, but since the app is not in market place testers can use the app installer from marketplace for installation tests.

2. Requirement (Functionality) Testing:
Test for the application functionality according to designed test cases.

3. Widget testing:
Test the widget by adding widget, using widget as per functionality i.e. music widget should play music, deleting widget.

4. Phone Interrupt testing:
Test the application behavior on phone call, SMS & other notifications.

5. Stress testing (monkey test):
There is a command in android where it generates series of events at different frequencies.
Make sure your app passes this monkey test

6. UI testing:
Testing for UI can be done to verify that the app meets standard guidelines.

Refer the link below:
http://developer.android.com/guide/practices/ui_guidelines/index.html

7. Compatibility Test:
Developers do the unit testing on the emulators. Testers need to test on actual environment i.e. devices. There are multiple devices of different resolutions & having various OS i.e. Android 1.5, 1.6. 2.1 & 2.2. We need to check for compatibility on maximum devices.

Tuesday, April 12, 2011

Android App Testing



Robotium

Robotium is java based (jar) and can be run through Eclipse IDE.

Robotium officially supports Android 1.6 and up.

For more information on features of this Apache open-source tool, please click on the above link.

Sunday, April 10, 2011

Test

1. What does SIDE stand for?


2. What is a GPL (General Public License)?


3. What are main components of the Selenium Toot-kit?


4. I installed Selenium IDE from Internet Explorer and then installed Firefox browser. Would it work, please explain?


5. What is the use of “Clipboard Format” in IDE?


6. What is the use of “Find” button on IDE?


7. What is difference between “assert” and “verify” commands?


8. What must one set within SIDE in order to run a test from the beginning to a certain point within the test?


9. What does a right-pointing green triangle with one line at the commands icons in IDE indicate?


10. What distinguishes between an absolute and relative URL in SIDE?


11. When ran as part of the whole Test the command runs fine but when I run it through the option "Execute this command X" in IDE then it fails, why?


12. How would one access a Selenium variable named "Vcount" from within a JavaScript snippet?


13. How would one access a Javacsript Stored Variable named "vStored" from within a JavaScript snippet?


14. What Selenese command can be used to display the value of a variable in the log file, which can be very valuable for debugging?


15. If one wanted to display the value of a variable named “Vanswer” in the log file, what would the first argument to the previous command look like?


16. Where did the name "Selenium" come from?


17. Which command(s) can be used to check that an alert with a particular message popped up?


18. What command simulates selecting the browser's Back button?


19. Why do you use the ‘click’ command at times and then the ‘clickAndWait’ command at others? What’s the difference?


20. If the Test Case frame contains several test cases, how can one execute just the selected one of those test cases?


21. What is the generic name for an argument (to a Selenese command) which starts with //?


22. How can I change sequence of Test Cases in my Test Suite?


23. How can I change sequence of commands in my Test Case?


24. What is the oddity associated with testing an alert?


25. How can one get IDE to always record an absolute URL for the open command's argument?



26. What are the benefits of using Integrated Development Env like Eclipse?


27. What is the use of importing libraries in the Java code?


28. What is Bromine?


29. What is Selenium GRID?


30. What is the price of Selenium license per server?


31. What is the minimum programming knowledge required to test using Selenium IDE?


32. What programming languages can you use in RC?


33. If you have an application to test which was developed in PHP, can you use Java programming language Test Scripts in RC to test it?

Standard code for @BeforeTest and @AfterTest in TestNG

@BeforeTest
public void setUp() throws Exception {
SeleniumServer seleniumserver=new SeleniumServer();
seleniumserver.boot();
seleniumserver.start();
setUp("http://www.ge.com/", "*firefox");
selenium.open("/");
selenium.windowMaximize();
selenium.windowFocus();
}

@Test public void testTC_GE_EE() throws Exception {
// your testing code goes here
}


@AfterTest
public void tearDown(){
selenium.close();
selenium.stop();
}

----------------

@BeforeTest
public void setUp() throws Exception {
SeleniumServer seleniumserver=new SeleniumServer();
seleniumserver.boot();
seleniumserver.start();

Integer port = 4444;
String browserString= "*firefox";
String url = "http://www.ge.com";
selenium = new DefaultSelenium("localhost",port,browserString,url) {
public void open(String url) { commandProcessor.doCommand("open", new String[] {url,"true"});};
};
selenium.start();

selenium.setTimeout("120000");
selenium.open("/");
selenium.windowMaximize();
selenium.windowFocus();
}

bat file for launching RC

@echo off
echo Starting Selenium RC server. . . Hit Control+C to stop.
pause
cd C:\selenium-remote-control-1.0.3\selenium-server-1.0.3
java -jar selenium-server.jar

Sample CSS file for IDE

table
{
border:2px solid black;
background: lightblue;
font-size: large;
}
td
{
border: 2px solid brown;
padding: 10px;
margin: 0;
}

IDE Test Suite Report

@echo off
java -jar C:\selenium-server-1.0.3\selenium-server.jar -htmlSuite "*firefox" "http://www.ge.com" "C:\GE\GE_TS1.html" "C:\FF\GE_TS1_Result.html"
pause

Note:
Param 1,2,3 - For launching RC
Param 4 - RC Mode
Param 5 - Browser
Param 6 - Base URL of Test Suite
Param 7 - Test Suite file with full path
Param 8 - Name of the Report html file

Important: Before running bat file, run Test Suite manually to ensure that it runs and also check the file paths.

Saturday, April 9, 2011

Stored Vars in IDE (Array like functionality)

TC_StoreVars
store ABD:XYZ:123 v
echo ${v}
echo javascript{storedVars['v'].split(':').length}
echo javascript{storedVars['v'].split(':')[2]}

Screen capture on Google Maps

  1. Go to the below URL:http://maps.google.com/maps
  2. Type or Cut and Paste the below Address:
  3. 90 Hamilton Street, Cambridge, MA-02139
  4. Verify the Text Present “Lim Consultants Inc‎”
  5. Verify the Title “90 Hamilton Street, Cambridge, MA-02139 - Google Maps”
  6. Click on the “Lim Consultants Inc” link
  7. VerifyText Present “limconsultants.com” on the right side inline popup window.
  8. AssertText “Lim Consultants Inc” present within the inline popup window.
  9. Stop the Recoding in Selenium IDE
  10. Add screen capture at start and end of the Test, save the images as Test01.jpg and Test02.jpg resp.

CSV Format JS for IDE

var SEPARATORS = {
comma: ",",
tab: "\t"
};

function formatCommands(commands) {
var result = '';
var sep = SEPARATORS[options['separator']];
for (var i = 0; i < commands.length; i++) {
var command = commands[i];
if (command.type == 'command') {
result += command.command + sep + command.target + sep + command.value + "\n";
}
}
return result;
}

function parse(testCase, source) {
var doc = source;
var commands = [];
var sep = SEPARATORS[options['separator']];
while (doc.length > 0) {
var line = /(.*)(\r\n|[\r\n])?/.exec(doc);
var array = line[1].split(sep);
if (array.length >= 3) {
var command = new Command();
command.command = array[0];
command.target = array[1];
command.value = array[2];
commands.push(command);
}
doc = doc.substr(line[0].length);
}
testCase.setCommands(commands);
}

function format(testCase, name) {
return formatCommands(testCase.commands);
}

options = {separator: 'comma'};

configForm =
'Separator' +
'' +
'' +
'' +
'' +
'
' +
'
';

STIQ-Pipe Format JS for IDE

var SEPARATORS = {
comma: ",",
Pipe: "|",
tab: "\t",
Tilde: '~~'
};

function formatCommands(commands) {
var result = '';
var sep = SEPARATORS[options['separator']];
for (var i = 0; i < commands.length; i++) {
var command = commands[i];
if (command.type == 'command') {
switch (sep) {
case '|':
result += sep+command.command + sep + command.target + sep + command.value + sep+ "\r\n";
break;
case '~~':
result += sep+command.command + sep + command.target + sep + command.value + sep+ "\r\n";
break;
default:
result += command.command + sep + command.target + sep + command.value + "\r\n";
}
}
}
//alert(result);
return result;
}

function parse(testCase, source) {
var doc = source;
var commands = [];
var sep = SEPARATORS[options['separator']];
//alert("sep"+sep)
while (doc.length > 0) {
var line = /(.*)(\r\n|[\r\n])?/.exec(doc);
var array = line[1].split(sep);
if (array.length >= 3) {
var command = new Command();
switch (sep) {
case '|':
command.command = array[1];
command.target = array[2];
command.value = array[3];
break;
case '~~':
command.command = array[1];
command.target = array[2];
command.value = array[3];
break;

default:
command.command = array[0];
command.target = array[1];
command.value = array[2];
}
commands.push(command);
}
doc = doc.substr(line[0].length);
}
testCase.setCommands(commands);
}

function format(testCase, name) {
return formatCommands(testCase.commands);
}

options = {separator: 'comma',separator: 'Pipe',separator: 'Tilde'};

configForm =
'Separator' +
'' +
'' +
'' +
'' +
'' +
'' +
'
' +
'
';

Friday, April 8, 2011

JUnit 4 Vs TestNG

JUnit 4 Vs TestNG

JUnit 4 and TestNG are both very popular unit test framework in Java. Both frameworks look very similar in functionality. Which one is better? Which unit test framework should i use in Java project?

Feature comparison between JUnit 4 and TestNG:


Regular Expressions

Regular Expression Is used by adding the regexp prefix to your pattern: regexp:pattern

Selenium uses the JavaScript implementation of regular expressions (Perl-based):

· any character matches its literal representation: abc will match abc

· [ starts a class, which is any number of characters specified in the class

o [a-z] will match any number of lowercase alphabetical characters without spaces: hello, pizza, world

o [A-Z] does the same with uppercase characters

o [a-zA-Z] will do the same with either uppercase of lowercase characters

o [abc] will match either a, b or c

o [0-9] will match numeric characters

o ^ negates the character class is just after [: [^a-z] will match all but lowercase alphabetic characters

o \d, \w and \s are shortcuts to match respectively digits, word characters (letters, digits and underscores) and spaces

o \D, \W and \S are the negations of the previous shortcuts

· . matches any single characters excepts line breaks \r and \n

· ^ matches the start of the string the pattern is applied to: ^. matches a in abcdef

· $ is like ^ but for the end of the string: .$ matches f in abcdef

· | is equivalent to a logical OR: abc|def|xyz matches abc, def or xyz

· | has the lowest priority so abc(def|xyz) will match either abcdef or abcxyz

· ? makes the last character of the match optional: abc? matches ab or abc

· ? works in a greedy way: it will include the last character if possible

· repeats the preceding item at least zero or more times: ".*" matches "def" and "ghi" in abc "def" "ghi" jkl

· *? is the lazy star: matches only "def" in the previous example

· + matches the previous item at least once or more times.

· {n} will match the previous item exactly n times: a{3} will match aaa

o {n,m} will match the previous item between n and m times with m >= n and is greedy so it will try to match m items first: a{2,4} will match aaaa, aaa and aa

o {n,m}? is the same but in a lazy way: will start by matching at least n times and increase the number of matches to m

o {n,} will match the previous item at least n times

· Common regexps:

o \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} matches an ip adress but will also match 999.999.999.999.

o (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) will match a real ip adress. Can be shortened to: (?:\d{1,3}\.){3}\d{1,3}

o [A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4} matches an email adress

Selenium IDE - UI-Elements Reference

Selenium IDE + UI-Element Reference
Introduction

UI-Element is an extension for the Selenium IDE and Remote Control that makes it possible to define a mapping between semantically meaningful names of elements on webpages, and the elements themselves. The mapping is stored in a file using JavaScript Object Notation. The file may be shared by the IDE and driven tests running via the Selenium server. It also offers a single point of update should the user interface of the application under test change. UI-Element is available under the GNU General Public License. Click to read more...

Useful Add-Ons for Firefox (from Test Automation perspective)

a) Selenium IDE (http://seleniumhq.org/download/ )
b) DOM Inspector (https://addons.mozilla.org/en-US/firefox/addon/6622 )
c) X-Path Checker (https://addons.mozilla.org/en-US/firefox/addon/1095 )
d) Firebug (https://addons.mozilla.org/en-US/firefox/addon/1843 )
e) Venkman - JS Debugger (https://addons.mozilla.org/en-US/firefox/addon/216 )
f) Web Developer (https://addons.mozilla.org/en-US/firefox/addon/60 )
g) Regular Expression Tester (https://addons.mozilla.org/en-US/firefox/addon/2077 )
h) HTML Validator (https://addons.mozilla.org/en-US/firefox/addon/249 )
i) XPather (https://addons.mozilla.org/en-US/firefox/addon/1192 )
j) ColorZilla (https://addons.mozilla.org/en-US/firefox/addon/271 )

Selenium 2 in News

Online Article in Info World - Selenium test suite to add mobile apps
Version 2.0 of the application testing suite will support iPhone and Android apps, with BlackBerry and Windows Phone 7 capabilities to follow.. Click to read more

Sunday, April 3, 2011

Changing the default time-out in IDE and RC

In IDE:

You go to the menu Option >> Option >> General Tab >> Second field on the form, change the value to the miliseconds of default time-out.

In RC:
open("http://www.google.com"); // Default timeout being used
setTimeout(new timeout val);
open("http://www.google.com"); // Now Specified timeout being used

Handling JQuery Modal window using Selenium IDE/RC and Selenium 2

For a simple modal window there is nothing out of ordinary that needs to be done in Selenium. I am sharing sample code for automating modal window as below:


IDE:

New Test
openhttp://www.queness.com/resources/html/modal/jquery-modal-window.html
clicklink=Simple Window Modal
clicklink=Close it

RC (Java-TestNG):

package com.example.tests;

import com.thoughtworks.selenium.*;
import org.testng.annotations.*;
import static org.testng.Assert.*;
import java.util.regex.Pattern;

public class TC_ModalWin extends SeleneseTestCase {
@Test public void testTC_ModalWin() throws Exception {
selenium.open("http://www.queness.com/resources/html/modal/jquery-modal-window.html");
selenium.click("link=Simple Window Modal");
selenium.click("link=Close it");
}
}

Selenium 2 (Using Firefox Driver):

package script;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
//import org.openqa.selenium.RenderedWebElement;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class WebDriverModalWin {
public static void main(String[] args) throws Exception {

WebDriver driver = new FirefoxDriver();

// Go to the Sample Modal Page
driver.get("http://www.queness.com/resources/html/modal/jquery-modal-window.html");

// Select the link "Simple Window Modal"
WebElement query = driver.findElement(By.linkText("Simple Window Modal"));
query.click();

// Adding sleep to view the window for 5 sec
Thread.sleep(5000);

WebElement element2 = driver.findElement(By.linkText("Close it"));
element2.click();

System.out.println("Modal Window Opened and Closed Successfully!");
}
}



Selenium 1 or 2

Selenium 1 has been there for long time and most of the people I know working in this tool have been working on Selenium 1. The Selenium 2 has also been in news since last one year, more so after knowing it will be merging the two projects Webdriver (by Google) and Selenium 1. This seems like a great news as this overcomes the major drawback on Seleniuim 1, the "same origin" problem (rather than running as a Javascript application within the browser), WebDriver controls the browser itself. This means that it can take advantage of any facilities offered by the native platform.

As I have been observing the Selenium 2 project very closely, I noticed that they are not following the "bing bang" integration approach, i.e. the features of Selenium 2 (which have its origin into Webdriver) started to creep into the Selenium RC server over the last one year.

Now Selenium 2 is officially out there, still not very stable and also the lack of documentation is a challenge. However whatever I got to test using the Selenium 2 has been very encouraging, gives you a lot of control and the "same origin" problem is completely avoided.

Now the big question, Selenium 1 or 2?

There in no Selenium IDE or GRID for Selenium 2 yet and that could be the deciding factor for many.

If you are hands-on programmer (esp. java) then you can directly start with Selenium 2. Otherwise, I will recommend that you start with IDE, record and run the formatted code in RC (Selenium 1) and then slowly migrate to Selenium 2.

Another deciding factor, since Selenium 2, even though released officially, it is still a beta release and it might be risky affair to run your client's test scripts on a beta release. So, definitely practice and learn Selenium 2, however wait up for it's official "full-blown" release at a later date.

Also if you need to use GRID then you need to stick to Selenium 1... at least for the time being.

Platforms Supported by Selenium - Browsers, Languages and OS

Browsers

Browser

Selenium IDE

Selenium Remote Control

Selenium Core

Firefox 3

Record and playback tests

Start browser, run tests

Run tests

Firefox 2

Record and playback tests

Start browser, run tests

Run tests

IE 8

not supported

Start browser, run tests

Run tests

IE 7

not supported

Start browser, run tests

Run tests

Safari 3

not supported

Start browser, run tests

Run tests

Safari 2

not supported

Start browser, run tests

Run tests

Opera 9

not supported

Start browser, run tests

Run tests

Opera 8

not supported

Start browser, run tests

Run tests

Others

not supported

Partial support possible

Run tests


Operating Systems

OS

Selenium IDE

Selenium Remote Control

Selenium Core

Windows

Works in Firefox 2+

Start browser, run tests

Run tests

OS X

Works in Firefox 2+

Start browser, run tests

Run tests

Linux

Works in Firefox 2+

Start browser, run tests

Run tests

Solaris

Works in Firefox 2+

Start browser, run tests

Run tests

Others

Should work in Firefox 2+

Start browser, run tests

Run tests


Programming Languages

Programming languages are supported through Selenium Remote Control "drivers." These are libraries made for each language that expose commands from the Selenium API natively in the form of methods/functions.

Language

Selenium IDE

Selenium Remote Control

Selenium Core

C#

Generate code

Library ("driver") support

n/a

Java

Generate code

Library ("driver") support

n/a

Perl

Generate code

Library ("driver") support

n/a

PHP

Generate code

Library ("driver") support

n/a

Python

Generate code

Library ("driver") support

n/a

Ruby

Generate code

Library ("driver") support

n/a

Others

Generate custom code

Commands via HTTP requests

n/a