Sharing my learnings on Selenium, I share as I learn and I learn as I share..
Sunday, September 25, 2011
Adding Main() to JUnit to run from command prompt
Sunday, July 24, 2011
Hover Menus
Saturday, July 23, 2011
Screen capture ex
90 Hamilton Street, Cambridge, MA-02139
Sunday, July 10, 2011
DDT CSS
DDT CSS
Shutdown RC from browser
Sunday, June 5, 2011
Download Selenium RC 1.0.3
http://code.google.com/p/selenium/downloads/list
Saturday, June 4, 2011
IDE Exercises
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
Tuesday, April 12, 2011
Android App Testing
Sunday, April 10, 2011
Test
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
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 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
{
border:2px solid black;
background: lightblue;
font-size: large;
}
td
{
border: 2px solid brown;
padding: 10px;
margin: 0;
}
IDE Test Suite Report
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
- Go to the below URL:http://maps.google.com/maps
- Type or Cut and Paste the below Address:
- 90 Hamilton Street, Cambridge, MA-02139
- Verify the Text Present “Lim Consultants Inc”
- Verify the Title “90 Hamilton Street, Cambridge, MA-02139 - Google Maps”
- Click on the “Lim Consultants Inc” link
- VerifyText Present “limconsultants.com” on the right side inline popup window.
- AssertText “Lim Consultants Inc” present within the inline popup window.
- Stop the Recoding in Selenium IDE
- 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
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 =
'
'
'
'' +
'' +
'
'
STIQ-Pipe Format JS for IDE
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 =
'
'
'
'' +
'' +
'' +
'' +
'
'
Friday, April 8, 2011
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
Useful Add-Ons for Firefox (from Test Automation perspective)
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 )
Sunday, April 3, 2011
Changing the default time-out in IDE and RC
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
New Test | ||
open | http://www.queness.com/resources/html/modal/jquery-modal-window.html | |
click | link=Simple Window Modal | |
click | link=Close it |
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 |
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 |