Wednesday, 27 April 2011

Command - Array

Aim:
to demonstrate how to use an array with Selenium IDE.

Pre-requisites:

Key Steps
      1. Copy the JavaScript from the blog and save into 'ScriptFunction.js'.
      2. Copy the script from the blog and save as 'Array.html'.
      3. Launch Firefox and open the Selenium-IDE.
      4. Include the saved 'ScriptFunction.js' into IDE using Options section and close the IDE.
      5. Again Re-Start the IDE.
      6. Open the saved 'Array.html' file into Selenium_IDE.
      7. Run the same script.
      8. Once script runs the array element would display into browser URL as because in array sript takes URL using array elements.


Conclusions


Related Entries

Zip file location: ( download from here)
C:\FoundationSelenium\Array\ArrayScript.html, C:\FoundationSelenium\Array\ScriptFunction.js.




Here is the Java Script Code
var gotoLabels= {};
var whileLabels = {};

// overload the original Selenium reset function
Selenium.prototype.reset = function() {
// reset the labels
this.initialiseLabels();
// proceed with original reset code
this.defaultTimeout = Selenium.DEFAULT_TIMEOUT;
this.browserbot.selectWindow("null");
this.browserbot.resetPopups();
}

Selenium.prototype.initialiseLabels = function()
{
gotoLabels = {};
whileLabels = { ends: {}, whiles: {} };
var command_rows = [];
var numCommands = testCase.commands.length;
for (var i = 0; i < numCommands; ++i) {
var x = testCase.commands[i];
command_rows.push(x);
}
var cycles = [];
for( var i = 0; i < command_rows.length; i++ ) {
if (command_rows[i].type == 'command')
switch( command_rows[i].command.toLowerCase() ) {
case "label":
gotoLabels[ command_rows[i].target ] = i;
break;
case "while":
case "endwhile":
cycles.push( [command_rows[i].command.toLowerCase(), i] )
break;
}
}  
var i = 0;
while( cycles.length ) {
if( i >= cycles.length ) {
throw new Error( "non-matching while/endWhile found" );
}
switch( cycles[i][0] ) {
case "while":
if( ( i+1 < cycles.length ) && ( "endwhile" == cycles[i+1][0] ) ) {
// pair found
whileLabels.ends[ cycles[i+1][1] ] = cycles[i][1];
whileLabels.whiles[ cycles[i][1] ] = cycles[i+1][1];
cycles.splice( i, 2 );
i = 0;
} else ++i;
break;
case "endwhile":
++i;
break;
}
}
}

Selenium.prototype.continueFromRow = function( row_num )
{
if(row_num == undefined || row_num == null || row_num < 0) {
throw new Error( "Invalid row_num specified." );
}
testCase.debugContext.debugIndex = row_num;
}

// do nothing. simple label
Selenium.prototype.doLabel = function(){};

Selenium.prototype.doGotolabel = function( label )
{
if( undefined == gotoLabels[label] ) {
throw new Error( "Specified label '" + label + "' is not found." );
}
this.continueFromRow( gotoLabels[ label ] );
};

Selenium.prototype.doGoto = Selenium.prototype.doGotolabel;

Selenium.prototype.doGotoIf = function( condition, label )
{
if( eval(condition) ) this.doGotolabel( label );
}

Selenium.prototype.doWhile = function( condition )
{
if( !eval(condition) ) {
var last_row = testCase.debugContext.debugIndex;
var end_while_row = whileLabels.whiles[ last_row ];
if( undefined == end_while_row ) throw new Error( "Corresponding 'endWhile' is not found." );
this.continueFromRow( end_while_row );
}
}

Selenium.prototype.doEndWhile = function()
{
var last_row = testCase.debugContext.debugIndex;
var while_row = whileLabels.ends[ last_row ] - 1;
if( undefined == while_row ) throw new Error( "Corresponding 'While' is not found." );
this.continueFromRow( while_row );
} 


here is the HTML script
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="http://foundation.time2test.co.uk/" />
<title>ArrayScript</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">ArrayScript</td></tr>
</thead><tbody>
<tr>
 <td>open</td>
 <td>/</td>
 <td></td>
</tr>
<tr>
 <td>clickAndWait</td>
 <td>link=Log in</td>
 <td></td>
</tr>
<tr>
 <td>assertTextPresent</td>
 <td>Username</td>
 <td></td>
</tr>
<tr>
 <td>assertTextPresent</td>
 <td>Password</td>
 <td></td>
</tr>
<tr>
 <td>type</td>
 <td>id=user_login</td>
 <td>admin</td>
</tr>
<tr>
 <td>type</td>
 <td>id=user_pass</td>
 <td>time4test</td>
</tr>
<tr>
 <td>clickAndWait</td>
 <td>id=wp-submit</td>
 <td></td>
</tr>
<tr>
 <td>waitForElementPresent</td>
 <td>//div[@id='user_info']/p/a[2]</td>
 <td></td>
</tr>
<tr>
 <td>getEval</td>
 <td>storedVars['arrayElements']=new Array(&quot;edit.php&quot;,&quot;upload.php&quot;,&quot;link-manager.php&quot;,&quot;themes.php&quot;,&quot;plugins.php&quot;)</td>
 <td></td>
</tr>
<tr>
 <td>getEval</td>
 <td>storedVars['y'] = storedVars['arrayElements'].length;</td>
 <td></td>
</tr>
<tr>
 <td>store</td>
 <td>-1</td>
 <td>x</td>
</tr>
<tr>
 <td>label</td>
 <td>top</td>
 <td></td>
</tr>
<tr>
 <td>getEval</td>
 <td>storedVars['x'] = ${x} + 1 ;</td>
 <td></td>
</tr>
<tr>
 <td>getEval</td>
 <td>storedVars['thisval'] = storedVars['arrayElements'][storedVars['x']];</td>
 <td></td>
</tr>
<tr>
 <td>open</td>
 <td>http://foundation.time2test.co.uk/wp-admin/${thisval}</td>
 <td></td>
</tr>
<tr>
 <td>gotoIf</td>
 <td>${x}&lt;${y}-1</td>
 <td>top</td>
</tr>
</tbody></table>
</body>
</html>


Helpful Video File


2 comments:

  1. Notes for Vipin:
    please create a simple script that demonstrates the usage of an array via the IDE.

    ReplyDelete

Thank you for your comment
- Time2test Team