Selenium core & IDE extension functions

本文介绍了如何使用 Selenium IDE 的扩展函数进行网页功能测试,包括日期计算与展示、表列排序判断等功能,并提供了具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Selenium core extension functions:

 

Selenium.prototype.doStoreRandom = function (variableName) {
    random = Math.floor(Math.random() * 10000000);
    storedVars[variableName] = random;
}

    Selenium.prototype.doDisplayAlert = function (variableName,value) {
    alert(value);
}

 //target=variableName; value=len
 Selenium.prototype.doStoreRandomDefinedLength = function (variableName,len) {
 //alert(len);
 //alert(variableName);
    var randomDefinedLength = (Math.floor(Math.random() * 10000000)).toString();

 //alert(randomDefinedLength);
    //alert(randomDefinedLength.length);
    if(randomDefinedLength.length<len)
    {
     var needIncreaseLen = len - randomDefinedLength.length;
     //alert(needIncreaseLen);
     for(var i =0;i<needIncreaseLen;i++)
     {
      randomDefinedLength += "a";
     }
    }else if (randomDefinedLength.length>len)
    {
     var needCutLen = randomDefinedLength.length - len;
     //alert(needCutLen);
     randomDefinedLength = randomDefinedLength.substr(needCutLen);
    }

    storedVars[variableName] = randomDefinedLength;
}


I use Selenium IDE for performing web functional testing and often work with date, so I created a extension function to deal with date calculate and presentation, the code is listed below:
用Selenium IDE做网页的功能测试经常会碰到与日期有关的验证,本人结合实际工作中遇到的应用,写了一个扩展,代码如下:

Selenium.prototype.doStoreDateByFormat = function(format,args){
    // format of args: month,day,year
    if(args.trim().length < 3)
        throw new SeleniumError("arguments must contain ""Month"",""Date"",""Year"" variables!");
    
    var formats = format.split(",");
    var days = parseInt(formats[3]);
    
    var sysDate = getSysDate(); //get the sysdate
    var specDate = dateAfterDays(sysDate,parseFloat(days),1); //get specified date
    var arrArgs = args.split(",");

    var month = specDate.getMonth()+1;
    var date = specDate.getDate();
    var year = specDate.getFullYear();
   
    // get Month string
    switch(formats[0].toUpperCase()){
        case "MM": // return 2 digits of month number, such as: 01
            month = (month+"").length==1?"0"+month:month;
            break;
        case "MMM": //return the first 3 chars of the month word, such as: Jan
            month = this.getMonthShortName(month);
            break;
        case "MMMM": //return the full word of the month word, such as: January
            month = this.getMonthFullName(month);
            break;
        case "M":
        default:
            // return 1 digit when month is lower than 10.
            // do nothing
    }

    //get Date string
    switch(formats[1].toUpperCase()){
        case "DD": //always return 2 digits of the month number, such as: 05
            date = (date+"").length==1?"0"+date:date;
            break;
        case "D":
        default:
            // return 1 digit when Date is lower than 10.
            // do nothing
    }

    //get Year string
    switch(formats[2].toUpperCase()){
        case "YY": // return last 2 digits of the year number, such as: 08 (2008)
            year = (year+"").substr(2);
            break;
        case "YYYY":
        default:
            //return full year number, such: 2008.
    }
    
    storedVars[arrArgs[0]] = month;
    storedVars[arrArgs[1]] = date;
    storedVars[arrArgs[2]] = year;

}

Selenium.prototype.getMonthFullName = function(month){
    var monthArr = new Array("January","February","March","April","May","June","July","August","September","October","November","December");

    if(month == null){
        throw new SeleniumError("you didn't specify a Month");
    }

    try{
        month = parseInt(month);
    }catch (e){
        throw new SeleniumError("""Month"" is not a Integer!");
    }

    return monthArr[month-1];
}


/* return the date N days(N*24 hours) before/after some day.
 * args   :   num - positive/negative integer/float number,default is "1";  
 *            type - 0 (second) or 1 (day), default is second.  
 * return :   Date
 */  
function dateAfterDays(date, num, type){
    date = (date == null?new Date():date);
    num = (num == null?1:num);
    
    if(typeof(num)!="number")
        throw new SeleniumError("dateAfterDays(date, num, type),""num"" argument must be Number type.");

    if(typeof(date)!="object")
        throw new SeleniumError("dateAfterDays(date, num, type),""date"" argument must be Date type.");

    var iType = (type == null?0:type);
    var arr = [1000,86400000];
    var dd = date.valueOf();
    dd += num * arr[iType];
    var d=new Date(dd);
    return d;
}

function getSysDate(){
    return new Date();
}

the image below shows how to use this function, for details please see the previous code:
使用方法如下,详见以上代码:



a data based functional testing often needs to check the data orderation, I use the function listed below in my daily work, I hope it can help you rise up your efficiency.
基于数据的功能测试经常要求我们进行数据排序的检验,以下代码是我日常工作中常用的,希望对大家有帮助。

Selenium.prototype.isColumnOrdered = function(locator,order){
    var locators = locator.split("|");
    var tableLocator = locators[0];
    var headNum = parseInt(locators[1]);
    var bottomNum = parseInt(locators[2]);
    var identifier = locators[3];
    var colNum = null;
    var elem = null;
    
    if(identifier.indexOf(":") >= 0){
        colNum = parseInt(identifier.substring(0,identifier.indexOf(":")));
        elem = identifier.substr(identifier.indexOf(":")+1);
    }else{
        colNum = parseInt(identifier);
    }
    
    var table = this.page().findElement(tableLocator);
    
    if(table != null){
        for(i=headNum; i<table.rows.length-bottomNum; i++){
            if((i+1)<table.rows.length-bottomNum){
                var fir = "";
                var sec = "";
                
                if(elem != null){
                    var path1 = tableLocator+"//tr["+ (i+1) +"]/td["+ (colNum+1) +"]//"+elem;
                    var path2 = tableLocator+"//tr["+ (i+2) +"]/td["+ (colNum+1) +"]//"+elem;
                    fir = this.getText(path1);
                    sec = this.getText(path2);
                    //alert(fir+""n"+sec);
                }else{
                    fir = getText(table.rows[i].cells[colNum]).trim();
                    sec = getText(table.rows[i+1].cells[colNum]).trim();
                }
                
                if(order.toUpperCase() == "A"){
                    if(fir > sec){
                        //alert(fir+""n"+sec);
                        return false;
                    }
                }else if(order.toUpperCase() == "D"){
                    if( fir < sec){
                        //alert(fir+""n"+sec);
                        return false;
                    }
                }
            }
        }
        
        return true;
    }else{
        throw new SeleniumError("can't find the element"""+tableLocator+"""");
    }
}


how to use:
call function: verifyColumnOrdered
param1 format: tablelocator|rowCountBeforeDataArea|rowCountAfterDataArea
    example: //table[2] | 2 |3
                  //table[2] - xPath of a table;
                  2 - there 2 rows before data area in this table;
                  3 - there are 3 rows after data area in this table
param2: order
            A: ascending
            D: descending
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值