Selenium IDE Rollup策略
为什么需要使用Rollup策略呢?
使用Rollup策略可以使你的测试脚本看起来更加简洁,测试命令集合重用性更强,使用Rollup可以让你的脚本看起来像下面代码一样:
其中,rollup命令中loggincommands是一个selenese指令集合,包含了登录部分脚本指令,通过这种方式,可以将任何在多脚本中重复的部分提取出来,以供更多的测试脚本重复使用,这样做有三大优势:
§ 脚本简洁,通俗易懂。
§ 公共部分selenese命令集合得到了最大限度的重用性。
§ 提供了单点访问入口,一处修改,处处使用的效果。
下面我们看一下如何来定义一组rollup策略,定义rollup需要新建一个.js为结尾的javascript文件。
var manager = new RollupManager(); manager.addRollupRule({ ... }); manager.addRollupRule({ ... }); ... |
RollupManager作为rollup策略实现的管理对象,我们可以向rollup manager中添加多组rollupRule,只需要简单的使用RollupManager#addRollupRule(Object)方法就可以完成rollup策略的添加。
添加完rollupRule之后,我们再来看一下如何定义rollup对象:
manager.addRollupRule({ name: 'logincommands', description: 'register & login into newtours.com', args: [ { name: 'email', description: 'register one user account, used it just for the identifier.', exampleValues: ['aa', 'bb', 'cc'] } ,{ name: 'passwd', description: 'register one user account, used it just for the identifier.', exampleValues: ['122', '333', '222'] } ], commandMatchers: [ { command: 'type' , target: 'id=email' , updateArgs: function(command, args) { args.email = command.value; return args; } } , { command: 'type' , target: 'name=password' , updateArgs: function(command, args) { args.passwd = command.value; return args; } } , { command: 'type' , target: 'name=confirmPassword' , updateArgs: function(command, args) { args.passwd = command.value; return args; } } , { command: 'clickAndWait' , target: 'name=register' } ], getExpandedCommands: function(args) { var commands = []; commands.push({ command: 'type' , target: 'id=email' , value: args.email }); commands.push({ command: 'type', target: 'name=password', value: args.passwd }); commands.push({ command: 'clickAndWait', target: 'name=register' }); return commands; } });
以上代码片段是一个完整的Rollup策略定义,在rollup对象中包含多个属性:name, description, args, commandMatchers, getExpandedCommands,下面对这几个属性一一介绍:
Name:rollup策略的名字,需保证在rollup manager中唯一。
Description: 对该rollup策略的描述,该描述作为帮助文档显示给使用者。
Args: array类型,可以有多组args,args用于调用者传入rollup策略的参数,比如:,这里调用logincommand时传入了两个参数,也就对应了args数组中存在两个args定义,在args定义中包含三个参数:name(参数名), description(参数描述), exampleValues(没有实际意义,为用户展示参数值类型),Args中的定义的变量应用于两个位置,commandMatchers中的updateArgs方法,以及getExpandedCommands方法。
CommandMatchers,该参数用于使用Selenium IDE中应用组策略功能,也就是Selenium IDE中,只有当定义了commandMatchers时,这里才可用。
commandMatchers用于匹配脚本中符合commandMachers定义的规则的selenese命令,并一键生成rollup命令。
{ command: 'type' , target: 'id=email' , updateArgs: function(command, args) { args.email = command.value; return args; } }
commandMatchers中可以定义多组command,每个command中可以包含command, target, updateArgs若干参数。
Command: 即selenese命令,也就是该command matcher所要匹配的命令。
Target: 即元素定位器,这里可以使用正则方式匹配多种target,如果使用正则也就是该command matcher可以匹配多个selenese命令,当然前提是同一个类型的command。
UpdateArgs:Function, 函数的实现用于动态接收rollup调用者穿来的参数及参数值,并动态的根据自定义规则更新args中定义的变量,注意,这里只是根据调用者传过来的参数值动态修改args变量值,最后将args对象作为方法返回值return.
其中当定义rollup时args的值为空时,如,args:[],此时updateArgs定义无效。
GetExpandedCommands
getExpandedCommands参数用于定义该rollup命令所包含的Selenese命令集合,也就是在运行时真正需要执行的命令
该参数定义为一个带有args参数的函数,且该函数返回值为数组,数组包含所有需要执行的命令集合。
commands.push({ command: 'type', target: 'name=password', value: args.passwd });
数组元素中包含三部分,即selenese指令的三部分,分别为command, target, value, 其中value可以通过用户调用rollup命令时传入的参数进行动态更新。
总结,rollup策略是一个selenium ide提供的一个非常强大的功能,使用rollup策略有三大好处,掌握rollup策略只需要脚本开发人员掌握javascript语言,就能轻松灵活运用。
原文地址:http://blog.51cto.com/shareku/2091107