【selenium-ide】js扩展循环函数

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 );

}

 

posted @ 2015-04-24 16:57  买丶醉  阅读(254)  评论(0编辑  收藏  举报