robot调用关键字传参的方式是用分隔符分开不同参数,如
keyword arg1 arg2 arg3 arg4
当参数中传入了使用@符号的列表变量时,@符号会将列表展开:
@{list1}= Create List arg2 arg3 arg4
keyword arg1 @{list1} 等效于 keyword arg1 arg2 arg3 arg4
keyword arg1 @{list1} arg5 等效于 keyword arg1 arg2 arg3 arg4 arg5
 
如果不想展开则使用$形式,这里类似于Perl中的引用和解引用,对于字典变量,&和$也类似。
 
举例说明
关键字定义为
@RobotKeyword
public int lengthOfList(String str,List<String> arr){
  return str.length()+arr.size();
}
lengthOfList关键字返回的是字符串长度+列表长度
 
@RobotKeyword
public int keysCount(Map<String,Object> kvs){
  return kvs.size();
}
keysCount关键字返回key的数量
 
*** Test Cases ***
直接使用列表原始值时
  ${len1}=   lengthOfList   str   item0   item1
  log   ${len1}
  should be true   ${len1}==5
 
传入列表变量时
  @{list}=   Create List   a0   a1   a2
  ${len0}=   lengthOfList   str1   ${list}      #str:str1 arr:[a0,a1,a2]
  ${len1}=   lengthOfList   str1   @{list}     #str:str1 arr:[a0,a1,a2]
  ${len2}=   lengthOfList   @{list}         #str:a0 arr:[a1,a2]
  ${len3}=   lengthOfList   str1   str2   @{list}   a3   #str:str1 arr:[str2,a0,a1,a2,a3]
  should be true   ${len0}==${len1}
  should be true   ${len1}==7
  should be true   ${len2}==4
  should be true   ${len3}==9
 
直接传入字典原始值时
  ${len1}=   keysCount k1=v1 k2=v2 k3=v3
  log   ${len1}
  should be true   ${len1}==3
 
传入字典变量时
  &{dic}=   Create Dictionary   k1=v1   k2=v2   k3=v3
  ${len0}=   keysCount   &{dic}
  ${len1}=   keysCount   ${dic}
  ${len2}=   keysCount   k4=v4   &{dic}   k5=v5
  should be true   ${len0}==${len1}
  should be true   ${len0}==3
  should be true ${len2}==5
 
有些情况下必须使用$引用方式,如关键字形参改为如下情况
public int lengthOfList(List<String> arr1,List<String> arr2)
public int keysCount(Map<String,Object> kvs1,Map<String,Object> kvs2)

robotframework中的参数展开的更多相关文章

  1. C语言中的宏展开

    #include<stdio.h> #define f(a,b) a##b #define g(a) #a #define h(a) g(a) int main() { printf(,) ...

  2. 如何将RobotFramework中case的执行结果上传到TestLink中。

    公司的需求是: 用RobotFrameworjk框架执行case,用Testlink管理case和测试任务.需要持续统计每个版本的测试结果. 我觉得用Jenkins+Robot也行,Testlink+ ...

  3. RobotFramework自动化测试框架-Selenium Web自动化(三)关于在RobotFramework中如何使用Selenium很全的总结(下)

    本文紧接着RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)继续分享RobotFramewor ...

  4. C语言中可变参数的原理——printf()函数

    函数原型: int printf(const char *format[,argument]...) 返 回 值: 成功则返回实际输出的字符数,失败返回-1. 函数说明: 使用过C语言的人所再熟悉不过 ...

  5. 如何获取url中的参数并传递给iframe中的报表

    在使用报表软件时,用户系统左边一般有目录树,点击报表节点就会在右侧网页的iframe中显示出报表,同时点击的时候也会传递一些参数给网页,比如时间和用户信息等.如何使网页中的报表能够获取到传递过来的参数 ...

  6. JavaScript如何获取网页url中的参数

    我们可以自定义一个公共函数来实现网页url中的参数获取,返回的是一个数组 GetUrlRequest: function () { var url = decodeURI(location.searc ...

  7. JavaScript------获取url地址中的参数

    $(document).ready(function () { //获取地址中的参数(name是字符串) function getParameter(name) { //正则表达式 var reg = ...

  8. 使用JS,获取URL中指定参数的值

    /** * 获取URL中指定参数的值 * * @param name 参数名称 * @returns */ function getQueryString(name) { var reg = new ...

  9. APPCAN开发笔记:html页面之间的参数传递:使用js获取url中的参数,以及在APPCAN中不能使用的解决方法

    用PHP的GET/POST方式来传递方式已经是司空见惯了,但是如果我的页面是一个静态的html的页面,想传递参数的时候要怎么办呢?在APPCAN的开发中我们会经常遇到这样的问题,因为所有的页面都是静态 ...

随机推荐

  1. TkMybatis 是什么?

    一.TkMybatis Tkmybatis 是基于 Mybatis 框架开发的一个工具,通过调用它提供的方法实现对单表的数据操作,不需要写任何 sql 语句,这极大地提高了项目开发效率. 二.怎么用? ...

  2. uni搜索功能实现

    uni搜索功能的实现

  3. java17(面向对象)

    1.面向过程:所有事情都是按顺序一件件做,未知主体 买菜,做饭,吃饭,洗碗 面向对象:将功能封装到对象之中,让对象去实现功能 去饭馆,告诉服务员要吃啥,然后等着端上来. 面向对象的目的: 复杂的东西简 ...

  4. 不是程序员,代码也不能太丑!python官方书写规范:任何人都该了解的 pep8

    不是程序员,代码也不能太丑!python官方书写规范:任何人都该了解的 pep8 简介:为什么要强调 书写规范 ?这其实并不关乎"美丑",而是为了 更高的效率(代码阅读.开发.维护 ...

  5. 阻止brew自动更新

    export HOMEBREW_NO_AUTO_UPDATE=true  

  6. 转:使用DOS命令chcp查看windows操作系统的默认编码以及编码和语言的对应关系

    代码页是字符集编码的别名,也有人称"内码表".早期,代码页是IBM称呼电脑BIOS本身支持的字符集编码的名称.当时通用的操作系统都是命令行界面系统,这些操作系统直接使用BIOS供应 ...

  7. 第11.24节 Python 中re模块的其他函数

    一. re.compile函数 正则表达式编译函数,在后面章节专门介绍. 二. re.escape(pattern) re.escape是一个工具函数,用于对字符串pattern中所有可能被视为正则表 ...

  8. 第11.20节 Python 中正则表达式的扩展功能:后视断言、后视取反

    一. 引言 在<第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反>中老猿介绍了前视断言和前视取反,与二者对应的还有后视断言和后视取反. 二. (?<=-)后视 ...

  9. PyQt(Python+Qt)学习随笔:使用pyqtConfigure建立信号和槽的连接

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在PyQt中,一般信号和槽的连接是通过connect方法建立的,语法如下: connect(slot ...

  10. 项目使用RQ队列的思考

    碎遮项目的后端异步处理经历了 无处理->多线程/多进程->celery异步队列->RQ队列 的调整和修改,先简单说明一下为什么会存在这样的过程. 在nmap的使用指南中,提到过这样的 ...